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