Problème d'importation de données excel
Fermé
Benjamin1803
Messages postés
11
Date d'inscription
jeudi 21 avril 2011
Statut
Membre
Dernière intervention
28 avril 2011
-
26 avril 2011 à 16:09
castours - 1 mai 2011 à 19:57
castours - 1 mai 2011 à 19:57
A voir également:
- Problème d'importation de données excel
- Liste déroulante excel - Guide
- Formule excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
1 réponse
Bonjour
Importer plusieurs classeurs Excel dans une table Access en VBA
Par Hervé Inisan le mardi 13 juillet 2010, 20:28 - Liaisons Office - Lien permanent
· access 2000
· access 2002
· access 2003
· access 2007
· fichier
· table
· vba
Cet article fait suite à celui-ci : Importer plusieurs feuilles Excel dans une table Access en VBA.
Sur le même principe, on va voir ici comment importer les données de plusieurs classeurs Excel. Et pour garder la logique de l'article précédent, j'ai gardé la possibilité d'importer plusieurs feuilles de chaque classeur.
Le scénario
Je dispose de plusieurs classeurs Excel, dont les données doivent être importées dans Access. Pour que ça marche, les tableaux respectent un certain nombre de contraintes :
· Les feuilles ont toutes la même structure (sinon, on ne va pas s'en sortir !).
· Les feuilles peuvent avoir ou non des titres sur leur 1ère ligne (dans mon exemple, toutes les feuilles ont des titres).
· La structure des feuilles correspond à la structure de ma table Access : les champs sont dans le même ordre, et les types de données sont compatibles.
· Dans mon scénario, la 1ère colonne (Numéro Acteur) est clef primaire dans la table Access. Ça veut dire qu'il faut que les valeurs de Numéro Acteur, dans Excel, soient toutes différentes. Sinon, il y a aura des erreurs - normales - à l'importation.
· Les classeurs sont tous placés dans le même dossier Windows.
· Chaque classeur doit avoir le même nombre de feuilles à importer, et ces feuilles portent le même nom. Par exemple, si je veux importer les feuilles Acteurs1 et Acteurs2, tous les classeurs doivent avoir des feuilles portant ces noms.
· Un classeur peut comporter d'autres feuilles (en nombre quelconque) qui ne seront pas concernées par l'importation.
Comme dans l'article précédent, la table Access a cette structure :
Le code
Voici une procédure VBA à recopier intégralement dans un module standard de votre base de données.
' ---
' IMPORTATION DE PLUSIEURS FEUILLES EXCEL,
' A PARTIR DE PLUSIEURS CLASSEURS
' ---
Sub ImportExcelMulti( _
ByVal strChemin As String, _
ByVal varFeuilles As Variant, _
ByVal blnNoms As Boolean, _
ByVal strTable As String _
)
' Déclaration des variables
Dim strClasseur As String
Dim varFeuille As Variant
' Est-ce que le dossier existe ?
strChemin = AddBackslash(strChemin)
If Dir(strChemin, vbDirectory) = "" Then
MsgBox "Le dossier ['" & strChemin & "] est introuvable.", vbExclamation
Exit Sub
End If
' Vidage de la table si nécessaire
On Error GoTo ImportExcelErr
If MsgBox("Souhaitez-vous vider la table [" & strTable & "] avant l'importation ?", _
vbQuestion + vbYesNo) = vbYes Then
CurrentDb.Execute "DELETE * FROM [" & strTable & "];"
End If
' Parcourir tous les classeurs du dossier
strClasseur = Dir(strChemin & "*.xls", vbNormal)
While strClasseur <> ""
' Procédure d'importation
For Each varFeuille In varFeuilles
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
strTable, strChemin & strClasseur, blnNoms, varFeuille & "!"
Next
' Classeur suivant
strClasseur = Dir
Wend
' Un p'tit message pour terminer :-)
MsgBox "Opération terminée !", vbInformation
Exit Sub
ImportExcelErr:
MsgBox "Erreur d'importation : " & Err.Description, vbExclamation
Exit Sub
End Sub
important
La fonction AddBackslash() doit aussi être présente dans un module de votre base de données.
La procédure ci-dessus doit recevoir 4 paramètres pour fonctionner :
1. Le chemin du dossier qui contient les classeurs Excel à importer.
Tous les classeurs sont supposés d'extension XLS, mais vous pouvez adapter en XLSX sur Excel 2007/2010.
2. La liste des feuilles à importer (au cas où certaines feuilles devraient être ignorées).
3. Le nom de la table Access de destination.
4. Une valeur booléenne (True / False) qui indique si les feuilles Excel ont des titres en première ligne.
Tester le code
Cette autre procédure (à recopier par exemple dans le même module) permet de tester l'import :
Sub TestImportExcelMulti()
Dim varFeuilles As Variant
' Liste des feuilles Excel à importer
varFeuilles = Array("Acteurs1", "Acteurs2")
' Importation proprement dite
ImportExcelMulti "C:\Users\Hervé\Documents\Classeurs Excel", _
varFeuilles, True, "tbl Acteurs - Import"
End Sub
Bien sûr, vous adaptez les valeurs en fonction de votre configuration.
Exécutez ce deuxième bloc de code. Il vous sera demandé si vous souhaitez vider la table Access avant d'importer toutes les données.
Et hop !
Importer plusieurs classeurs Excel dans une table Access en VBA
Par Hervé Inisan le mardi 13 juillet 2010, 20:28 - Liaisons Office - Lien permanent
· access 2000
· access 2002
· access 2003
· access 2007
· fichier
· table
· vba
Cet article fait suite à celui-ci : Importer plusieurs feuilles Excel dans une table Access en VBA.
Sur le même principe, on va voir ici comment importer les données de plusieurs classeurs Excel. Et pour garder la logique de l'article précédent, j'ai gardé la possibilité d'importer plusieurs feuilles de chaque classeur.
Le scénario
Je dispose de plusieurs classeurs Excel, dont les données doivent être importées dans Access. Pour que ça marche, les tableaux respectent un certain nombre de contraintes :
· Les feuilles ont toutes la même structure (sinon, on ne va pas s'en sortir !).
· Les feuilles peuvent avoir ou non des titres sur leur 1ère ligne (dans mon exemple, toutes les feuilles ont des titres).
· La structure des feuilles correspond à la structure de ma table Access : les champs sont dans le même ordre, et les types de données sont compatibles.
· Dans mon scénario, la 1ère colonne (Numéro Acteur) est clef primaire dans la table Access. Ça veut dire qu'il faut que les valeurs de Numéro Acteur, dans Excel, soient toutes différentes. Sinon, il y a aura des erreurs - normales - à l'importation.
· Les classeurs sont tous placés dans le même dossier Windows.
· Chaque classeur doit avoir le même nombre de feuilles à importer, et ces feuilles portent le même nom. Par exemple, si je veux importer les feuilles Acteurs1 et Acteurs2, tous les classeurs doivent avoir des feuilles portant ces noms.
· Un classeur peut comporter d'autres feuilles (en nombre quelconque) qui ne seront pas concernées par l'importation.
Comme dans l'article précédent, la table Access a cette structure :
Le code
Voici une procédure VBA à recopier intégralement dans un module standard de votre base de données.
' ---
' IMPORTATION DE PLUSIEURS FEUILLES EXCEL,
' A PARTIR DE PLUSIEURS CLASSEURS
' ---
Sub ImportExcelMulti( _
ByVal strChemin As String, _
ByVal varFeuilles As Variant, _
ByVal blnNoms As Boolean, _
ByVal strTable As String _
)
' Déclaration des variables
Dim strClasseur As String
Dim varFeuille As Variant
' Est-ce que le dossier existe ?
strChemin = AddBackslash(strChemin)
If Dir(strChemin, vbDirectory) = "" Then
MsgBox "Le dossier ['" & strChemin & "] est introuvable.", vbExclamation
Exit Sub
End If
' Vidage de la table si nécessaire
On Error GoTo ImportExcelErr
If MsgBox("Souhaitez-vous vider la table [" & strTable & "] avant l'importation ?", _
vbQuestion + vbYesNo) = vbYes Then
CurrentDb.Execute "DELETE * FROM [" & strTable & "];"
End If
' Parcourir tous les classeurs du dossier
strClasseur = Dir(strChemin & "*.xls", vbNormal)
While strClasseur <> ""
' Procédure d'importation
For Each varFeuille In varFeuilles
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, _
strTable, strChemin & strClasseur, blnNoms, varFeuille & "!"
Next
' Classeur suivant
strClasseur = Dir
Wend
' Un p'tit message pour terminer :-)
MsgBox "Opération terminée !", vbInformation
Exit Sub
ImportExcelErr:
MsgBox "Erreur d'importation : " & Err.Description, vbExclamation
Exit Sub
End Sub
important
La fonction AddBackslash() doit aussi être présente dans un module de votre base de données.
La procédure ci-dessus doit recevoir 4 paramètres pour fonctionner :
1. Le chemin du dossier qui contient les classeurs Excel à importer.
Tous les classeurs sont supposés d'extension XLS, mais vous pouvez adapter en XLSX sur Excel 2007/2010.
2. La liste des feuilles à importer (au cas où certaines feuilles devraient être ignorées).
3. Le nom de la table Access de destination.
4. Une valeur booléenne (True / False) qui indique si les feuilles Excel ont des titres en première ligne.
Tester le code
Cette autre procédure (à recopier par exemple dans le même module) permet de tester l'import :
Sub TestImportExcelMulti()
Dim varFeuilles As Variant
' Liste des feuilles Excel à importer
varFeuilles = Array("Acteurs1", "Acteurs2")
' Importation proprement dite
ImportExcelMulti "C:\Users\Hervé\Documents\Classeurs Excel", _
varFeuilles, True, "tbl Acteurs - Import"
End Sub
Bien sûr, vous adaptez les valeurs en fonction de votre configuration.
Exécutez ce deuxième bloc de code. Il vous sera demandé si vous souhaitez vider la table Access avant d'importer toutes les données.
Et hop !