Sub convertir()
Dim i As Integer, j As Integer, decalage As Integer, strMem As String, lineAdded As Boolean
'déclarer autant de tableau que de colonne contenant des valeurs concaténées
Dim tabColA() As String, tabColB() As String, tabColAL() As String, tabColAM() As String
'déclarer autant de variable que de colonne contenant des valeurs concaténées
Dim iA As Integer, iB As Integer, iAL As Integer, iAM As Integer
'masquer l'affichage
Application.ScreenUpdating = False
With ThisWorkbook.Sheets("Feuil1")
'ce "For" permet de boucler sur ligne de la feuille "Feuil1" (de 13 à 2 dans cet exemple)
For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
'récupérer dans les tableaux "tabColX" les items de la colonne "X" de la ligne i
'(c'est ici qu'on sépare les items séparés par un ";")
tabColA = Split(.Range("A" & i).Text, ";")
tabColB = Split(.Range("B" & i).Text, ";")
tabColAL = Split(.Range("A" & i).Text, ";")
tabColAM = Split(.Range("A" & i).Text, ";")
'INSERER LES NOUVELLES LIGNES
'cette bouclepermet de calculer le nombre de ligne à insérer en fonction des différentes combinaisons
For j = 1 To _
(UBound(tabColA) - LBound(tabColA) + 1) * _
(UBound(tabColB) - LBound(tabColB) + 1) * _
(UBound(tabColAL) - LBound(tabColAL) + 1) * _
(UBound(tabColAM) - LBound(tabColAM) + 1) - 1
'insérer une ligne après la ligne i
.Rows(i + 1).Insert
'copier les valeur de la ligne i (dans la ligne insérée)
.Rows(i).Copy .Rows(i + 1)
Next j
'MODIFIER LES COLONNES "A COMBINAISON"
'initialiser la variable "decalage"
decalage = 0
'boucler sur chaque combinaison posible
For iA = LBound(tabColA) To UBound(tabColA)
For iB = LBound(tabColB) To UBound(tabColB)
For iAL = LBound(tabColA) To UBound(tabColA)
For iAM = LBound(tabColB) To UBound(tabColB)
'inscrire les différentes combinaisons sur la ligne "i" + "decalage"
.Range("A" & i).Offset(decalage, 0).Value = tabColA(iA)
.Range("B" & i).Offset(decalage, 0).Value = tabColB(iB)
.Range("AL" & i).Offset(decalage, 0).Value = tabColAL(iB)
.Range("AM" & i).Offset(decalage, 0).Value = tabColAM(iB)
'incrémenter la variable "decalage"
decalage = decalage + 1
Next iAM
Next iAL
Next iB
Next iA
'passer à l'autre ligne (de la feuille ("Feuil1")
Next i
End With
'raffraichir l'affichage
Application.ScreenUpdating = True
End Sub