Bonjour Dany, bonjour le forum,
Peut-être comme ça (onglet O et colonne CR à adapter) :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CR As Integer 'déclare la variable CR (Colonne de Référence)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim NF As Byte 'déclare la variable NF (Nombre de Fois)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Byte 'déclare la variable J (incrément)
Dim TT As Variant 'déclare la variable TT (tableau des Tirets)
Dim P1 As String 'déclare la variable P1 (Partie 1)
Dim P2 As String 'déclare la variable P2 (Partie 2)
Set O = Worksheets("Feuil1") 'définit l'onglet O
CR = 1 'définit la colonne de référence CR (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, CR).End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne CR de l'onglet O
For NF = 1 To 5 'boucle 1 : 5 fois(augmente cette valeur s'il peut y avoir plus de 5 tirets consécutifs -----)
For I = 1 To DL 'boucle 2 : sur toutes les lignes I de 1 à DL
O.Cells(I, CR) = Replace(O.Cells(I, CR).Value, "--", "-") 'remplace deux tirets par un seul tiret
Next I 'prochaine ligne de la boucle 2
Next NF ''prochaine fois de la boucle 1
For I = 1 To DL 'boucle sur toutes les ligne I de 1 à DL
P1 = "": P2 = "" 'réinitialise les parties P1 et P2
TT = Split(O.Cells(I, CR), "-") 'définit le tableau des tirets TT de la cellule ligne I colonne CR
If UBound(TT, 1) > 0 Then 'condition 1 : si la cellule ligne I colonne CR contient au moins un tiret
P1 = Split(O.Cells(I, CR).Value, "-")(0) 'définit la partie P1 (partie avant le premier tiret)
For NF = 1 To UBound(TT) 'bouce 1 : sur tous les tirets du tableau TT
If Len(Split(O.Cells(I, CR).Value, "-")(NF)) = 4 Then 'condition 2 : si le texte entre deux tirets de la boucle contient 4 caractères
P2 = Split(O.Cells(I, CR).Value, "-")(NF) 'définit la partie P2 (texte entre deux tirets de 4caractères)
For J = 1 To 4 'boucle 2 : sur les 4 caratères de P2
If IsNumeric(Mid(P2, J, 1)) Then P2 = "": GoTo suite 'si le caractère de la boucle est numérique, vide P2, va à l'étiquette "suite"
Next J 'prochain caractère de la boucle 2
O.Cells(I, CR + 1).Value = P1 'renvoie P1 dans la cellule décalée d'une colonne
O.Cells(I, CR + 2).Value = P2 'renvoie P2 dans la cellule décalée de deux colonnes
Exit For 'sort de la boucle 2
End If 'fin de la condition 2
suite: 'étiquette
Next NF 'prochain tiret de la boucle 2
End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle 1
End Sub