Salut Nicolippy,
Salut Saboh et tous les as,
Une solution VBA (installé nativement dans Excel depuis 1993)
Plus court, je ne peux pas!
- passe les lignes vides
- garde l'info intacte pour les lignes non vides (ligne Pierre) mais sans saut de ligne ni de ":"
- si pas de saut de ligne (ligne Guillaume) mais des ":", garde le string suivant le ":" mais en splittant un éventuel espace
Un double clic démarre la macro avec résultats en [A10].
Si convaincu, remplacer ...
Range("A10").Resize(UBound(tTab, 1), UBound(tTab, 2)).Value = tData
par...
Range("A2").Resize(UBound(tTab, 1), UBound(tTab, 2)).Value = tData
Dim tTab, tData, tSplit, sFlag$
'
Cancel = True
tTab = Range("A2").Resize(Range("A" & Rows.Count).End(xlUp).Row - 1, Cells(1, Columns.Count).End(xlToLeft).Column).Value
tData = tTab
'
For x = 1 To UBound(tTab, 1)
If tTab(x, 2) <> "" Then
sFlag = IIf(InStr(tTab(x, 2), Chr(10)) > 0, Chr(10), ":")
tSplit = Split(tTab(x, 2), sFlag)
For y = LBound(tSplit) To UBound(tSplit)
If sFlag = Chr(10) And InStr(tTab(x, 2), ":") > 0 Then tData(x, y + 2) = Trim(Split(tSplit(y), ":")(1))
If sFlag = ":" And InStr(tTab(x, 2), ":") > 0 And y > 0 Then tData(x, y + 1) = Split(Trim(tSplit(y)), " ")(0)
Next
End If
Next
Range("A10").Resize(UBound(tTab, 1), UBound(tTab, 2)).Value = tData
Il nous faudrait un fichier réaliste (sans données confidentielles) mais avec les erreurs fréquemment rencontrées pour tester valablement.
Pas tirer sur le pianiste, siouplaît!
A+