Modification d'un champ d'une table Access via VBA

Voila je suis en stage pendant 1 mois et j’ai à réaliser un formulaire pour la mise à jour de requête. Mais lors d’une importation effectuée par code VBA, j’ai un probléme lors de l’ouverture de ma table c’est à dire que le nom des champs n’est pas correct , plus précisément : le nom des champs sont F1, F2, F3… alors que je voudrais : CODE_ARTICLE…!!
si quelqu’un pourrai m’aider à résoudre mon probléme assez rapidement cela maiderai!!merci d’avance!!
Edité le 11/06/2007 à 11:48

Il faudrait savoir ce que tu importes ; une autre table access ? une table excel, un fichier texte ?

bonjour gcc, tout d’abord merci pour ta rép!!
J’importe tt d’abord une requête ds un fichier excel(ca ji arrive) puis ensuite mon fichier excel je veu le retransférer dans une table (cça ji arrive sans probléme) mais ensuite le probléme C que les nom des champs ne sont pas les bonnes CAD que par exemple :
dans ma requête j’ai : CODE_ARTICLE
Ben apré l’avoir transérer sur Excel puis sur Access ben le champ se nomme F1 et mi je voudrais que le champ redevienne CODE_ARTICLE.
J’espére avoir été assez clair??(si non, ben fais moi signe j’essayeré de te épondre) merci d’avance!!

Donc tu utilises sans doute une instruction DoCmd.TransferSreadsheet.
Si tu regardes bien l’aide, le 5e argument sert à dire si la première ligne de la feuille excel contient ou non les noms de champs
TransferSpreadsheet(TypeTransfert, TypeFeuille, NomTable, NomFichier, ContientNomsChamps, Étendue, UtiliserOA)

merci gcc pour ta réponse , j’utilise effectivement cette instruction mais je n’avais pas vu la 5éme instruction!! Je peux malheureusement pas te dire si ca fonctionne ou pas car j’ai un probléme qui apparait défois CAD que lorsque j’actionne mon bouton, au momen d’importer la requête d’Access vers Excel, j’ai un message d’erreur qui s’affiche. Ce message est le suivant : “Could not find installable ISAM”. Si par hasard tu peux me renseigner, ca ne serait pas de refus!!
Je voulais aussi, quand même savoir comment on peus dire par le code VBA(toujours) le quel champ on veux en clé primaire??(le champ serait connu d’avance)

MERCI D’AVANCE!!

Si d’autre personne aussi peuve me renseigner, n’hésiter pas!!(tkt, c’est pas contre toi gcc!!mais je met tt de mon côté!!LOL.)

Il faut que tu déclares un index que tu vas lier à ta table (pas évident la première fois …), et cet index, tu mettras sa propriété Primary à true.

Ca ressemble à une erreur de dialogue entre Access et Excel. Comme je suppose que les deux sont sur le même micro, je ne vois pas d’explication.
… A moins que le classeur Excel soit resté ouvert ?

Merci de m’avoir répondu!!

“Il faut que tu déclares un index que tu vas lier à ta table (pas évident la première fois …), et cet index, tu mettras sa propriété Primary à true.”

Je ne voit plus comment on lie une table à un index?? Quel nom donne tu à ton index lors de la déclaration??

Pour mon autre problème : le classeur Excel es fermé, qd je m’informe sur le message d’erreur il me dise de faire des choses mé C po pr ça ke ca fct : BIZARRE surtt que parfois ca va fonctionner impeccablement (par exemple hier!!lol)

Merci d’avance pr tes prochaines réponse et dsl de te déranger avc mes souci!!

En fait c’est l’index que tu lies à la table.
Tu rajoutes ton index à tabledefs et tu le lies à ta table
Pour le nom d’index, tu peux mettre ce que tu veux, mais PrimaryKey ce ne serait pas mal

Regarde sur google pour avoir un tuto
Si tu n’y arrives pas, donne le nom de ta table et le nom du champ sur lequel tu veux indexer

tout d’abord merci pour tes précieux conseil. En fet j’ai tjs un pb , j’ai fais tt ce ke tu m’as di, lorsque je clike sur mon bouton “importer” qui correspond à l’import de mon fichier Excel en une table Access, à la fin il m’informe que "le champ ‘CODE_ARTICLE’ n’existe pas dans la table destination ‘OBSOLETE’.

je vais te mettre mon bou de code, ca taidera têtre mieu a comprendre :

Private Sub Importer_Obsolete_Click()
On Error GoTo Err_Importer_Obsolete_Click

Dim PrimaryKey As String

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel7, _
"OBSOLETE", _
"X:\Base de donnée TOLAS\Fichiers pour mise à jour BdD\OBSOLETE.xls", True

TableDefs.PrimaryKey = "OBSOLETE"

MsgBox ("L'importation à été effectué")

Exit_Importer_Obsolete_Click:
Exit Sub

Err_Importer_Obsolete_Click:
MsgBox err.Description
Resume Exit_Importer_Obsolete_Click

End Sub

Je comprend pas trop ce qui veut me dire, et toi tu comprend?? (lol)

Ce serait plutôt

Private Sub Importer_Obsolete_Click()
On Error GoTo Err_Importer_Obsolete_Click

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel7, "OBSOLETE", _
"X:\Base de donnée TOLAS\Fichiers pour mise à jour BdD\OBSOLETE.xls", True

'Crée l'index en le nommant
Set oInd = CurrentDb.TableDefs("OBSOLETE").CreateIndex("PrimaryKey")

'Cree le champ dans l'index
Set oFld = oInd.CreateField("CODE_ARTICLE")
'Ajoute le champ à la collection Fields
oInd.Fields.Append oFld
'Définit la clé primaire
oInd.Primary = True
'Ajoute l'index à la table
CurrentDb.TableDefs("OBSOLETE").Indexes.Append oInd
'Rafraichit la collection
CurrentDb.TableDefs("OBSOLETE").Indexes.Refresh
'Libération des objets
Set oInd = Nothing
Set oFld = Nothing

MsgBox ("L'importation a été effectuée")

Exit_Importer_Obsolete_Click:
Exit Sub

Err_Importer_Obsolete_Click:
MsgBox err.Description
Resume Exit_Importer_Obsolete_Click

End Sub

Sans garantie …

j’ai essayer ton code mais malheureusement j’ai tjs le mm message qui s’affiche
(enfin te tire po les cheveux pr mi, si ji arive po, C po grave mon maitre de stage se débroiuillera manuellemen pr l’importation!!)enfin j’aimeré y arivé o moin pr mi mé bon l’informatike surtt VBA n’est pas tj facile!!
merci ke mm de m’aider!!

Ca c’est le meileur moyen pour ne pas y arriver.
Si tu n’as pas le minimum de rigueur pour t’exprimer avec des tournures et un vocabulaire correct, tu reproduiras immanquablement le même genre d’erreurs dans tes lignes de programme.
Ce qui n’est pas fait pour arranger la situation quand on est déjà en train de tâtonner pour trouver la syntaxe qui correspond à ce qu’on attend.

Pour ton message d’erreur : tu zippes le tout et tu transfères sur un autre micro, si possible dans une arborescence spécifique (un répertoire, avec un sous-répertoire pour le fichier excel et un autre pour la base access) pour voir ce que ç a donne. N’oublie pas de mettre à jour les chemins dans le programme.

Ce n’est pas une solution ; peut-être qu’il pourrait lui aussi se pencher sur la question ? Deux avis valent mieux qu’un.
Et puis pense à ton rapport final : cherché pas trouvé, ça ne fait quand même pas très sérieux.

bonjour gcc, ca va aujourd’hui??
Dsl mais hier ca commencé a ménnervé un peu mé tkt po jperd pas espoir surtt ke ce matin j’ai repris ton code ke tu m’avait donné hier, celui la :

et donc mon importation fonctionne CAD que CODE_ARTICLE prend effectivement sa place de nom de champ et il devient clé primaire!!donc normalemen c’est bon!!je réssayeré ds la journée pr voir mé normalemen ya plu de souci, jte remerci bcp de m’avoir aidé, de m’avoir encourager, C vrémen gentil!! :slight_smile:
Normalemen j’ai plu de souci!!NOMALEMENT!!LOL.

le code qui se situe sur mon autre message de ce sujet est correct mé il y a ke mm un pb, le problème est que si la table OBSOLETE existe déja alor rien ne change dans la table, commen faire pr ke :
SI la table existe ALORS supprimer la table puis importer la feuille Excel SINON importer la feuille Excel directement.

Ce qu’il me faudrait c’est pouvoir voir si la table existe ou po, comment puis-je faire??!!

Merci d’avance!!

Tu es sûr ?
En principe, la commande TransferSpreadsheet travaille en allongement ; tu devrais retrouver tes données en fin de table, derrière celles déjà existantes.
A partir de là, tu as deux solutions avant transfert :

  • soit détruire la table
  • soit simplement la vider
    Dans le deuxième cas, il faut penser à ne pas recréer la clé d’index qui sera conservée avec la structure.

Comme pour l’ajout d’index, tu vas voir dans Tabledefs

If CurrentDb.TableDefs("OBSOLETE").Name = "OBSOLETE" Then ...

Edité le 06/06/2007 à 12:19

ben justement gcc, regarde le sujet se nommant : “VBA : IMPORTANT” j’explique plus en détail mon probléme!!
merci d’avance!!

bonjour, j’ai un nouveau bouton auquel j’aimerait mettre un code VBA qui puisse insérer 1 champs Date/Heure correspondant à une table existanta, mais je n’y arrive pas, pourrez-vous m’aider??
Il faut savoir que ce bouton insérera un champ à différente Table c’est à dire : Table 1 --> 1champ ; Table2 --> 1Champ ; Table3 --> 1Champ ; Table4 --> 1Champ.
Voila, en attente d’une aide!! MERCI D’AVANCE!!

Tu veux insérer un champ à une table, c’est à dire modifier sa structure, à l’aide d’un bouton, c’est ca ?
Quel intérêt ?
Sinon, le faire sur plusieurs tables, il suffit d’enchainer les instructions séquentiellement

je voudrais insérer plusieur champ à plusieur table plus précisément par exemple on a 4 tables et 4 champs différent(portons le même nom)
table1=juju
table2=jojo
table3=hihi
table4=haha
champ1=beber1
champ2=beber2
champ3=beber3
champ4=beber4
et au final je veu que : beber1 saffecte à juju ; beber2 s’affecte à jojo ; beber3 s’affecte à hihi ; beber4 s’affecte à haha
L’intérêt c’est que cette manipulation s’effectue plus rapidement et donc que mon maitre de stage ne perde pas son temps lorsquil doit le faire et donc qu’il est moin de manip çà effectuer!!
voila, j’espér t’avoir mieu aider pour pouvoir mieu m’aider, cr depuis ce matin je cherche mais je trouve bof des choses concluante!!

Donc ce n’est pas un champ que tu veux rajouter, c’est un champ existant que tu veux mettre à jour d’après un autre champ d’une autre table ?