Sub convertir()
Dim i As Integer, j As Integer, k 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
'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, ";")
'compter le nombre max de valeurs concaténées sur les différentes colonnes
j = 0
j = IIf(j < UBound(tabColA), UBound(tabColA), j)
j = IIf(j < UBound(tabColB), UBound(tabColB), j)
j = IIf(j < UBound(tabColAL), UBound(tabColAL), j)
j = IIf(j < UBound(tabColAM), UBound(tabColAM), j)
'compléter les tableaux qui n'ont pas la taille maxi
While UBound(tabColA) < j
ReDim Preserve tabColA(LBound(tabColA) To UBound(tabColA) + 1)
tabColA(UBound(tabColA)) = tabColA(LBound(tabColA))
Wend
While UBound(tabColB) < j
ReDim Preserve tabColB(LBound(tabColB) To UBound(tabColB) + 1)
tabColB(UBound(tabColB)) = tabColB(LBound(tabColB))
Wend
While UBound(tabColAL) < j
ReDim Preserve tabColAL(LBound(tabColAL) To UBound(tabColAL) + 1)
tabColAL(UBound(tabColAL)) = tabColAL(LBound(tabColAL))
Wend
While UBound(tabColAM) < j
ReDim Preserve tabColAM(LBound(tabColAM) To UBound(tabColAM) + 1)
tabColAM(UBound(tabColAM)) = tabColAM(LBound(tabColAM))
Wend
'INSERER LES NOUVELLES LIGNES
For j = LBound(tabColA) To UBound(tabColA) - 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"
'boucler sur chaque combinaison
For j = LBound(tabColA) To UBound(tabColA)
'inscrire les différentes combinaisons sur la ligne concernée
.Range("A" & i).Offset(j, 0).Value = tabColA(j)
.Range("B" & i).Offset(j, 0).Value = tabColB(j)
.Range("AL" & i).Offset(j, 0).Value = tabColAL(j)
.Range("AM" & i).Offset(j, 0).Value = tabColAM(j)
Next j
'passer à l'autre ligne (de la feuille ("Feuil1")
Next i
End With
'raffraichir l'affichage
Application.ScreenUpdating = True
End Sub