Macro dynamique
Résolu
senecartour
Messages postés
391
Statut
Membre
-
senecartour Messages postés 391 Statut Membre -
senecartour Messages postés 391 Statut Membre -
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
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Tableau croisé dynamique - Guide
- Exemple tableau croisé dynamique télécharger - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- 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.