Public Type tyvariable
nom As String
formuleelem As String
End Type
Sub eclater()
Dim Chaine_init As String
Dim tablogene() As tyvariable
Dim tablo() As tyvariable
ReDim tablo(0)
ReDim tablogene(0)
With ActiveSheet
Chaine_init = .Range("A9")
Oldchaine = ""
nomvar = Split(Chaine_init, "=")(0)
formule = Split(Chaine_init, "=")(1)
ReDim Preserve tablogene(UBound(tablogene) + 1)
tablogene(UBound(tablogene)).nom = nomvar
tablogene(UBound(tablogene)).formuleelem = formule
ReDim Preserve tablo(UBound(tablo) + 1)
i = 1
.Range("G:J").ClearContents
Chaine_init = Split(Chaine_init, "=")(1)
While InStr(1, Chaine_init, "(") <> 0
chainesousvar = Split(Chaine_init, ")")(0)
tabope = Split(chainesousvar, "(") 'on split selon "("
operateur = tabope(UBound(tabope) - 1) 'et on récupère l'opérateur
chainesousvar = Split(chainesousvar, "(")(UBound(Split(chainesousvar, "("))) 'on ne garde que les deux éléments simpls
Oldchaine = operateur & "(" & chainesousvar & ")" 'on reconstruit l'ancienne chaine qu'il va falloir substituer
newform = Split(chainesousvar, ",")(0) & " " & operateur & " " & Split(chainesousvar, ",")(1) 'on créé la formule élémentaire associée à la SousVar
ReDim Preserve tablo(UBound(tablo) + 1)
tablo(UBound(tablo)).nom = nomvar & "_" & i
tablo(UBound(tablo)).formuleelem = newform
Chaine_init = Replace(Chaine_init, Oldchaine, tablo(UBound(tablo)).nom)
i = i + 1
Wend
tablo(UBound(tablo)).nom = nomvar 'on remet le nom de la variable initiale
'on place le contenu des tablo pour visualisation
For i = LBound(tablogene) To UBound(tablogene)
.Range("G" & .Rows.Count).End(xlUp).Offset(1, 0) = tablogene(i).nom
.Range("H" & .Rows.Count).End(xlUp).Offset(1, 0) = tablogene(i).formuleelem
Next i
For i = LBound(tablo) To UBound(tablo)
.Range("I" & .Rows.Count).End(xlUp).Offset(1, 0) = tablo(i).nom
.Range("J" & .Rows.Count).End(xlUp).Offset(1, 0) = tablo(i).formuleelem
Next i
End With
End Sub