Bonjour,
Donc en fet j’ai un formulaire avec des boutons dont un correspond à une importation d’un fichier Excel en une table Access. Le probléme c’est que si la table existe alors le code supprime l’ancienne table pour importer la nouvelle mais par-contre lorsque la table n’existe po , ca ne veu pas fonctionner. Je vous met mon code en dessous cela vous aidera tête à voir pourquoi!!
Private Sub Importer_Obsolete_Click()
On Error GoTo Err_Importer_Obsolete_Click
If Database = OBSOLETE Then
DoCmd.RunSQL ("DROP TABLE OBSOLETE")
MsgBox ("la table est supprimer")
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 à été effectué")
Else
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 à été effectué")
End If
Là tu as deux variables Database et OBSOLETE que je ne vois initialisées nulle part.
Comme tu n’as pas mis option Explicit en haut de ton programme, VBA fait automatiquement Database =0 et OBSOLETE=0
Donc ta condition est toujours vraie, comme si la table existait toujours
merci gcc de m’avoir répondu, j’ai mit OBSOLETE entre parenthèse mais j’ai tjs le même problème, comment faire, si ta une nvle idée, fé moi signe!!
merci!!
pr guymage : dsl mé je sé po comment on fé pr changer de titre, dc ça restera comme ca!!lol.
1- OBSOLETE, c’est une chaine de caractères (le nom de ta table) ; il faut donc la mettre entre guillemets et non entre parenthèses
2- Et la variable Database, elle est supposée représenter quoi ?
3- Tu as testé la solution qui est dans ton post de ce matin ? (le mieux serait de te limiter à un seul post, pour avoir toutes les infos au même endroit ; c’est plus facile pour ceux qui arrivent en cours de route)
donc tt dabord, dsl d'avoir changer mé javé envie!!LOL.
Ensuite Database, je m'en servé cr je penser que ça représenter la base de donnée mais jme suis tromper, C ca??
Ensuite j'ai essayer la sol de ce matin CAD :[b] If CurrentDb.TableDefs("OBSOLETE").Name = "OBSOLETE" Then[/b]
Mais j'ai un message d'erreur qui s'affiche :
Microsoft Office Access
Item not found in this collection
Ce message s’affiche lorsque la table n’existe pas dans la base de donnée par contre si la table es connu par la base de donnée, ya aucun souci ca s’effectue comme normal!!
voila, je crois que tu sait tout d’ou j’en suis!!lol
Bonjour,
voila j’ai trouver un site avec une fonction qui pourrait peut-être résoudre mon problème mais malheureusement je ne comprend pas trop comment je doit insérer cette fonction dans mon code … Enfin pourrez-vous m’aider SVP.
Par hasard si toi gcc, tu a compris et tu as une idée avec cette fonction, je veux bien tester!!
re-bonjour,
voila je voulais vraiment vous écrire surtout pour toi gcc car tu m’as énormément aidé jusque là donc je devais quand même te dire que j’ai à peut prêt réussir avec une otre fct : officesystem.access.free.fr…
Par contre j’ai encore un petit souci, donc je te met mon code :
Private Sub Importer_Obsolete_Click()
On Error GoTo Err_Importer_Obsolete_Click
If IsTableExist("OBSOLETE") Then
MsgBox "la table OBSOLETE existe"
DoCmd.RunSQL ("DROP TABLE OBSOLETE")
MsgBox ("la table est supprimer")
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 à été effectué")
Else
MsgBox "la table OBSOLETE n'existe pas"
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 à été effectué")
End If
En fet mon problème c’est que lorsque je modifie ma feuille excel avant de l’importer, ben au momen de l’importer, la clé primaire ne se réalise plus et la première ligne est vide, jvois pas pourquoi, jcontinu à chercher mais si tu as une idée, tien moi au courant stp!!
Merci bcp pour tout!!
Mince j'ai oublié de te mettre le code de la fonction : IsTableExist, donc jte la met mtn
Public Function IsTableExist(NomdelaTable As String) As Boolean
On Error Resume Next
IsTableExist = (CurrentDb.TableDefs(NomdelaTable).Name = NomdelaTable)
CurrentDb.Close
End Function
Effectivement c’est une bonne idée de passer par une fonction ; ca permet de traiter plus proprement le On Error Resume (que j’avais oublié de te dire d’ajouter).
D’une manière plus générale dans ton code, tu as écrit deux fois la même chose. Cela vient du fait que tu utilises un if…then…else là où un if simple aurait suffit.
Ton raisonnement :
Si la table existe
alors je l’efface puis je la recrée
sinon le la crée
fin_si
Ce qu’il faudrait faire :
Si la table existe
alors je l’efface
fin_si
Et comme maintenant dans tous les cas je n’ai plus de table, je la crée
Ca permet d’alléger le code, et surtout en cas de modif de n’avoir qu’un seul endroit où intervenir
je voulais savoir si tu savais si c’était possible de choisir que l’index d’une table importer soir ‘oui-avec doublon’ via du code VBA??
merci d’avance!!
bonjour tout le monde,
en fet j’ai un bouton dans un formulaire qui doit importer une feuille excel vers Access (jusque la j’ai pas de souci enfin à pars un problème d’ISAM)
Mon problème est d’indiquer par code VBA si les champs sont indexés… comment faire pour dire que les champs de la tables à importer ne sont pas indexés?? {cela correspond à Indexés : NON --> lors de l’importation manuelle}
Normalement, quand on importe une table, elle n’est pas indexée. c’est à toi de l’indexer.
Au moment de crer ton index, tu mets sa propriété .Unique à false
dsl, je me rapelé plu ke tu mavé di ke normalemen javé po a indexé si on voulé ke NON.Sui vrémen béte!!lol
Sinon j’ai deux autres question :
* on es obliger d’indexé chaque champ CAD on es obliger de créer un index pour chaque champ??yoré po une méthode plus simple??
* comment on fait pour dire que l’on veu que ce soi Access qui choissise la clé primaire d’une table??