Macro dynamique
Résolu
senecartour
Messages postés
324
Date d'inscription
Statut
Membre
Dernière intervention
-
senecartour Messages postés 324 Date d'inscription Statut Membre Dernière intervention -
senecartour Messages postés 324 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'intègre régulièrement des données contenues dans des tables Excel dans la base sql.
Pour chaque base de données, je suis obligé de faire le traitement des données pour pouvoir faire des inert dans sql.
J'ai réussi, à faire une première macro qui transforme mes données prêtes à être insérées dans la base. Mais je me rends compte que mon code n'est pas très flexible dans la mesure où je suis obligé de le mettre à jour à chaque fois que j'ajoute une colonne dans mes données Excel.
Mon souhait, c'est que la macro soit dynamique, c'est à dire s'adapter par rapport au nombre de colonnes et lignes de ma tables Excel.
Par exemple, si j'ajoute dans ma table Excel, des colonnes "POPULATION", "MONNAIE" avec des données, ma macro doit tenir en compte ces données dans la conversion des données.
Je vous joins en pièce jointe la première version de mon fichier avec la macro
https://www.cjoint.com/c/EKtuERyQYuG
Merci d'avance
J'intègre régulièrement des données contenues dans des tables Excel dans la base sql.
Pour chaque base de données, je suis obligé de faire le traitement des données pour pouvoir faire des inert dans sql.
J'ai réussi, à faire une première macro qui transforme mes données prêtes à être insérées dans la base. Mais je me rends compte que mon code n'est pas très flexible dans la mesure où je suis obligé de le mettre à jour à chaque fois que j'ajoute une colonne dans mes données Excel.
Mon souhait, c'est que la macro soit dynamique, c'est à dire s'adapter par rapport au nombre de colonnes et lignes de ma tables Excel.
Par exemple, si j'ajoute dans ma table Excel, des colonnes "POPULATION", "MONNAIE" avec des données, ma macro doit tenir en compte ces données dans la conversion des données.
Je vous joins en pièce jointe la première version de mon fichier avec la macro
https://www.cjoint.com/c/EKtuERyQYuG
Merci d'avance
A voir également:
- Macro dynamique
- Tableau croisé dynamique - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Liste déroulante dynamique excel - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
2 réponses
Bonjour
Ceci peut-être
Ceci peut-être
Sub Insertion() Dim DerLi, DerCo As Integer DerLi = ThisWorkbook.Sheets("Donnees Excel").Range("A" & Rows.Count).End(xlUp).Row DerCo = ThisWorkbook.Sheets("Donnees Excel").Range("A2").End(xlToRight).Column sep = "," Champs1 = "" For i = 1 To DerCo If Cells(1, i + 1) = "" Then Exit For Champs1 = Champs1 & sep & Cells(1, i + 1) Next i Champs1 = Right(Champs1, Len(Champs1) - 1) Champs2 = "" For i = 1 To DerCo Champs2 = Champs2 & sep & Cells(2, i) Next i Champs2 = Right(Champs2, Len(Champs2) - 1) Valeurs = "" ReDim Valeur(DerLi, DerCo) As String For i = 3 To DerLi For j = 1 To DerCo Valeur(i, j) = Cells(i, j) Valeurs = Valeurs & sep & Valeur(i, j) Next j Valeurs = Right(Valeurs, Len(Valeurs) - 1) Sheets("Donnees sql").Cells(i, 1).Value = "INSERT INTO " & Champs1 & " (" & Champs2 & ")" & " VALUES" & " ('" & Valeurs & "');" Valeurs = "" Next i MsgBox ("Vos données ont été converties au format sql") Sheets("Donnees sql").Select End SubCdlt
Bonjour
Dans votre exemple, la dernière valeur ne devrait-elle pas être entourée d'apostrophe elle aussi?
A tester
Cdlt
Dans votre exemple, la dernière valeur ne devrait-elle pas être entourée d'apostrophe elle aussi?
Sub Insertion() Dim DerLi, DerCo As Integer DerLi = ThisWorkbook.Sheets("Donnees Excel").Range("A" & Rows.Count).End(xlUp).Row DerCo = ThisWorkbook.Sheets("Donnees Excel").Range("A2").End(xlToRight).Column sep = "," Champs1 = "" For i = 1 To DerCo If Cells(1, i + 1) = "" Then Exit For Champs1 = Champs1 & sep & Cells(1, i + 1) Next i Champs1 = Right(Champs1, Len(Champs1) - 1) Champs2 = "" For i = 1 To DerCo Champs2 = Champs2 & sep & Cells(2, i) Next i Champs2 = Right(Champs2, Len(Champs2) - 1) Valeurs = "" ReDim Valeur(DerLi, DerCo) As String For i = 3 To DerLi For j = 1 To DerCo Valeurs = Valeurs & sep & "'" & Replace(Cells(i, j), "'", """") & "'" Next j Valeurs = Right(Valeurs, Len(Valeurs) - 1) Sheets("Donnees sql").Cells(i, 1).Value = "INSERT INTO " & Champs1 & " (" & Champs2 & ")" & " VALUES" & " (" & Valeurs & ");" Valeurs = "" Next i MsgBox ("Vos données ont été converties au format sql") Sheets("Donnees sql").Select End Sub
A tester
Cdlt
Merci beaucoup, c'est exactement ce que je voulais.
Merci et bon fin de WE.
J'ai essayé d'insérer les données en base mais il reste quelques détails à ajouter dans la macro pour que les données puissent s'intégrer.
En effet deux choses sont à prendre en compte:
-Au niveau de la partie Value, les données doivent aussi être entourées par des ' '.
-Lorsqu'on a une apostrophe dans, on doit remplacer l'apostrophe par deux cotes ''.
Voici l'exemple de résultat attendu:
INSERT INTO PAYS (Pays,Capital,Population,Entrprise,CA) VALUES ('France','Paris','60000000','L''OREAL,20');
INSERT INTO ASSET (Pays,Capital,Population,Entrprise,CA) VALUES ('Allemagne','Berlin','70000000','L''ESCO,34');
Je vous joins également, le fichier avec la macro et l'exemple du résultat attendu.
https://www.cjoint.com/c/EKyuEqg1fuG
Je vous serais très reconnaissant si vous voulez bien m'aider à résoudre le problème.