Importer des données de plusieurs fichiers EXCEL vers ACCESS
Importer des données de plusieurs fichiers EXCEL vers ACCESS - VB/VBA/VBS - Programmation
MarshPosté le 10-02-2009 à 14:48:32
Bonjour à tous,
Je vais tenter de vous expliquer brievement mon probleme: J'ai créé 3 tables ACCESS dans lesquelles je veux rapatrier automatiquement les données de mes tables excel.
Mes tables ACCESS sont: prodution globale, production par onduleur 1 à 8, production par onduleur 9 à 16 et production de tous les onduleurs.
Deux appareils me renvoient des données journalieres (donc deux dossiers à aller parcourir) et sur ces fichiers excel, je veux etre capable de selectionner les lignes et colonnes à rapatrier sur mes tablmes ACCESS. De plus, deux colonnes sont crées dans ACCESS: la premiere m'indique l'appareil qui a renvoyé le resultat et le second une colonne avec la date ( à aller cherche parmi le titre du doc excel).
Après de nombreuses recherches sur le net, j'ai trouvé un début de code que j'ai commencé à programmer.
Si qqn qi a un peu de temps ici pouvait regardait et tenter de m'aider car c'est un travail d'entreprise!
Par avance merci à celui qui pourra me venir en aide car les aides sont assez limitées pour un tel problème!!
Private Sub Commande1_Click() 'Ici l'importation se déclenche en cliquant sur le bouton "Commande1" 'mais on peut aussi mettre ce code à l'ouverture d'un formulaire Dim oApp As Excel.Application Dim oWkb As Excel.Workbook Dim oWSht As Excel.Worksheet
Set oApp = CreateObject("excel.application" ) Set oWkb = oApp.Workbooks.Open("C:\Users\toshiba\Desktop\ENR1\1_EXCEL_DD_20090127" ) 'mettez ici le chemin vers votre fichier Excel Set oWSht = oWkb.Worksheets("1_EXCEL_DD_20090" ) 'mettez ici le nom de la feuille qui contient les données à importer
'première ligne ou commence l'import i = 289
'pour éviter les messages lors de l'ajout des enregistrements DoCmd.SetWarnings False
'on arrête l'importation lorsque le programme rencontre une case 'vide : While oWSht.Range("B" & 2517).Value <> "" '(où B représente la colonne et 2517 la ligne)
'condition de remplissage de la table => eviter les doublons 'si l'enregistrement existe déjà dans la table destination, 'on passe à la ligne suivante sans l'importer 'If DCount("*", "[Prod_globale]", "[nom_du_champ_destination_qui_ne_doit_pas_avoir_de_doublons] LIKE '" & oWSht.Cells(i, 9) & "'" ) = 0 Then 'le numéro 9 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus) cSQL = "insert into [Prod_globale] ( [Energrid], [Jour],[Heure],[Pprod],[Pcons],[Ppc],[Pinj],[Pabs],[Pc1],[Pc2],[Pc3],[Pc4],[Pa],[Psi],[Pso],[Ia],[Isi],[Iso],[Va],[Vs],[T1],[T2],[Gi1],[Gi2],[Ve1],[Ve2],[Di1],[Di2],[TMST],[R1],[R2],[R3],[R4],[R5],[R6],[R7],[R8],[R9],[R10] ) values (" & Chr(34) & oWSht.Cells(i, 13) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & " );" 'ici, on dit dans quel table, il inserera quels champs.
'exécute la requète DoCmd.RunSQL cSQL
End If
'on incrémente la variable i pour passer à la ligne suivante i = i + 1
Wend
'on réactive les messages d'erreurs DoCmd.SetWarnings True
End Sub End Sub
Message édité par appolonia le 10-02-2009 à 15:11:13
Marsh Posté le 10-02-2009 à 14:48:32
Bonjour à tous,
Je vais tenter de vous expliquer brievement mon probleme:
J'ai créé 3 tables ACCESS dans lesquelles je veux rapatrier automatiquement les données de mes tables excel.
Mes tables ACCESS sont: prodution globale, production par onduleur 1 à 8, production par onduleur 9 à 16 et production de tous les onduleurs.
Deux appareils me renvoient des données journalieres (donc deux dossiers à aller parcourir) et sur ces fichiers excel, je veux etre capable de selectionner les lignes et colonnes à rapatrier sur mes tablmes ACCESS. De plus, deux colonnes sont crées dans ACCESS: la premiere m'indique l'appareil qui a renvoyé le resultat et le second une colonne avec la date ( à aller cherche parmi le titre du doc excel).
Après de nombreuses recherches sur le net, j'ai trouvé un début de code que j'ai commencé à programmer.
Si qqn qi a un peu de temps ici pouvait regardait et tenter de m'aider car c'est un travail d'entreprise!
Par avance merci à celui qui pourra me venir en aide car les aides sont assez limitées pour un tel problème!!
Private Sub Commande1_Click()
'Ici l'importation se déclenche en cliquant sur le bouton "Commande1"
'mais on peut aussi mettre ce code à l'ouverture d'un formulaire
Dim oApp As Excel.Application
Dim oWkb As Excel.Workbook
Dim oWSht As Excel.Worksheet
Set oApp = CreateObject("excel.application" )
Set oWkb = oApp.Workbooks.Open("C:\Users\toshiba\Desktop\ENR1\1_EXCEL_DD_20090127" ) 'mettez ici le chemin vers votre fichier Excel
Set oWSht = oWkb.Worksheets("1_EXCEL_DD_20090" ) 'mettez ici le nom de la feuille qui contient les données à importer
'première ligne ou commence l'import
i = 289
'pour éviter les messages lors de l'ajout des enregistrements
DoCmd.SetWarnings False
'on arrête l'importation lorsque le programme rencontre une case
'vide :
While oWSht.Range("B" & 2517).Value <> "" '(où B représente la colonne et 2517 la ligne)
'condition de remplissage de la table => eviter les doublons
'si l'enregistrement existe déjà dans la table destination,
'on passe à la ligne suivante sans l'importer
'If DCount("*", "[Prod_globale]", "[nom_du_champ_destination_qui_ne_doit_pas_avoir_de_doublons] LIKE '" & oWSht.Cells(i, 9) & "'" ) = 0 Then
'le numéro 9 correspond au numéro de la colonne source, tel que : A=1, B=2, C=3 ...
'requète SQL (avec en paramètre la ligne i et le numéro de la colonne comme précisé au-dessus)
cSQL = "insert into [Prod_globale] ( [Energrid], [Jour],[Heure],[Pprod],[Pcons],[Ppc],[Pinj],[Pabs],[Pc1],[Pc2],[Pc3],[Pc4],[Pa],[Psi],[Pso],[Ia],[Isi],[Iso],[Va],[Vs],[T1],[T2],[Gi1],[Gi2],[Ve1],[Ve2],[Di1],[Di2],[TMST],[R1],[R2],[R3],[R4],[R5],[R6],[R7],[R8],[R9],[R10] ) values (" & Chr(34) & oWSht.Cells(i, 13) & Chr(34) & ", " & Chr(34) & oWSht.Cells(i, 11) & Chr(34) & " );"
'ici, on dit dans quel table, il inserera quels champs.
'exécute la requète
DoCmd.RunSQL cSQL
End If
'on incrémente la variable i pour passer à la ligne suivante
i = i + 1
Wend
'on réactive les messages d'erreurs
DoCmd.SetWarnings True
End Sub
End Sub
Message édité par appolonia le 10-02-2009 à 15:11:13