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