Imaginons un fichier excel composé de lignes du type :
Col1 | Col2 | Col3 | … | Col10 |
Maison | Adresse 1 | Adresse 2 | … | Chambre, Salon, Cuisine |
Appart | Adresse 3 | Adresse 4 | … | |
Bateau | Adresse 5 | Adresse 6 | … | Salle des machines, Plage |
Cet exemple est complètement inutile, mais c’est le principe qui compte : imaginons que nous souhaitons construire des requêtes d’insertion en base, qui permettent d’insérer dans notre exemple, 6 lignes :
Maison | Adresse 1 | Adresse 2 | … | Chambre |
Maison | Adresse 1 | Adresse 2 | … | Salon |
Maison | Adresse 1 | Adresse 2 | … | Cuisine |
Appart | Adresse 3 | Adresse 4 | … | |
Bateau | Adresse 5 | Adresse 6 | … | Salle des machines |
Bateau | Adresse 5 | Adresse 6 | … | Plage |
Voici la macro magique qui va permettre de générer le tableau 2 à partir du tableau 1. Attention, on suppose que les lignes à dupliquer sont celles qui contiennent en colonne 10, des valeurs séparées par des virgules.
Sub gogoJonyGo()
Dim iligne As Integer
iligne = 2
While Cells(iligne, 1).Value <> "" And iligne < 1000
If InStr(1, Cells(iligne, 10).Value, ",") > 0 Then
ichar = InStr(1, Cells(iligne, 10).Value, ",")
sgauche = Trim(Left(Cells(iligne, 10).Value, ichar - 1))
sdroite = Trim(Right(Cells(iligne, 10).Value, Len(Cells(iligne, 10).Value) - ichar))
Rows(iligne + 1).Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Rows(iligne).Select
Selection.Copy
Rows(iligne + 1).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Cells(iligne, 10) = sgauche
Cells(iligne + 1, 10) = sdroite
End If
iligne = iligne + 1
Wend
End Sub
C'est exactement le type de macro dont j'ai besoin, malheureusement je l'ai testé et ça ne marche pas.
RépondreSupprimerBonjour,
Supprimerje viens de l'utiliser à nouveau et cette macro fonctionne parfaitement. Il faut très probablement l'adapter à votre propre fichier.
La boucle While Cells(iligne, 1).Value <> "" And iligne < 1000
indique que la macro va parcourir toutes les lignes à partir de la 2ème (iligne=2 au dessus), tant que la première colonne n'est pas vide et que l'on est à moins de 1000 lignes.
Le If InStr(1, Cells(iligne, 10).Value, ",") > 0 Then
indique que les opérations vont être effectuées uniquement si on trouve une virgule dans la colonne 10.
Donc s'il y a des endroits à adapter, ce sont ces deux lignes, ainsi que toutes les lignes contenant "10" pour changer la colonne concernée par la duplication.
Cordialement
Bonjour et si on une autre colonnes comme le colonne 10 et on vas faire le meme choses
RépondreSupprimerBonjour, si je bien compris la sens de votre question, il suffit de remplacer "10" par le numéro de la colonne concernée.
RépondreSupprimer