Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim deli As String 'déclare la variable deli (DELImitor)
Dim c As Integer 'déclare la variable c (Colonne)
Dim dc As Integer 'déclare la variable dc (Dernière Colonne)With Sheets("Sheet2") 'pren cn compte l'onglet "Sheet2"
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'd;efinit la dernière ligne éditée dl de la colonne A
Set pl = .Range("A2:A" & dl) 'définit la plage pl
For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plage pl
If cel.Value Like "*&*" = True Then deli = "&" 'si la cellule contient le caractère "&" , definit deli avec ce caractère
If cel.Value Like "*,*" = True Then deli = "," 'si la cellule contient le caractère "," , definit deli avec ce caractère
If cel.Value Like "*;*" = True Then deli = ";" 'si la cellule contient le caractère ";" , definit deli avec ce caractère
If cel.Value Like "*:*" = True Then deli = ";" 'si la cellule contient le caractère ":" , definit deli avec ce caractère
For x = 0 To UBound(Split(cel.Value, deli)) 'boucle 2 : sur le nombre de fois que le caractère apparaît dans la cellule
'décompose la cellule en autant de fois qu'il a le caractère et en supprimant les espaces avant et après
cel.Offset(0, x + 1).Value = Trim(Split(cel.Value, deli)(x))
Next x 'prochaien fois de la boucle 2
Next cel 'prochaine cellule de la boucle 1
'insère des colonnes
For c = .Cells(2, Application.Columns.Count).End(xlToLeft).Column To 2 Step -1 'boucle inversée de l'avant dernère colonne éditée de la ligne 2 à la colonne 2
.Cells(1, c).Value = "Prénom"
.Columns(c + 1).Insert Shift:=xlToRight 'insère une colonne à droite
.Cells(1, c + 1).Value = "Nom"
Next c 'prochaine colonne de la boucle
dc = .Cells(2, Application.Columns.Count).End(xlToLeft).Column 'définit la dernière colonn eéditée de la ligne 2
For Each cel In .Range(.Cells(2, 2), Cells(dl, dc)) 'boucle sur toute les cellules de la plage B2:cellule(dl,dc)
If cel.Value <> "" Then 'condition 1 : si la celluole n'est pas vide
If cel.Value Like "*(*" = True Or cel.Value Like "*-*" Then 'condition 2 : si la cellule contient ou une parenthèse "(" ou un tiret "-"
cel.Interior.ColorIndex = 3 'colore la cellule en rouge (signifie non traitée)
Else 'sinon
If UBound(Split(cel.Value, " ")) = 1 Then 'condition 3 "si un seul espace entre nom et prénom
cel.Offset(0, 1).Value = Trim(Split(cel.Value, " ")(1)) 'récupère le nom dans la cellule à coté
cel.Value = Trim(Split(cel.Value, " ")(0)) 'récupère le prénom dans la cellule
Else 'sinon
If 2 Mod cel.Column = 0 Then cel.Interior.ColorIndex = 3 'colore la cellule en rouge (signifie non traitée)uniquement si la colonne est paire
End If 'fin de la condition 3
End If 'fin de la condition 2
End If 'fin de la condition 1
Next cel 'prochaine cellule de la boulce
End With 'fin de la pros en compte de l'onglet "Sheet2"
End Sub