La prochaine fois, merci de faire une présentation exhaustive … Et dire que j'avais prévu le cas où il y aurait plus de colonnes !
Deux solutions :
- soit réduire la plage destination dans la procédure, juste modifier la ligne n°24 ainsi :
If IsArray(EX) Then Cells(R, 2).Resize(, Application.Min(UBound(EX) + 1, 2)).Value = EX …
- soit compléter la fonction par un argument optionnel limitant le nombre de colonnes (voir les lignes n°1, 11 & 24) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| Function Extrait(TXT$, DEB$, FIN$, Optional SEP$, Optional MAX%)
D& = InStr(TXT, DEB)
If D Then
ReDim E$(0)
F& = InStr(D + Len(DEB), TXT, FIN)
If F Then E(0) = Mid$(TXT, D, F - D) Else E(0) = Mid$(TXT, D)
If SEP > "" Then
E = Split(E(0), SEP)
If MAX And UBound(E) > MAX - 1 Then ReDim Preserve E(MAX - 1)
For F = 0 To UBound(E): E(F) = Trim$(E(F)): Next
End If
Extrait = E
End If
End Function
Sub DemoExtraction()
Application.ScreenUpdating = False
For R& = 2 To Cells(Rows.Count, 1).End(xlUp).Row
EX = Extrait(Cells(R, 1).Value, "TC", "\", "-", 2)
If IsArray(EX) Then Cells(R, 2).Resize(, UBound(EX) + 1).Value = EX
Next R
Application.ScreenUpdating = True
End Sub |
__________________________________________________________________________________________
Merci de cliquer sur
pour chaque message ayant aidé puis sur
pour clore cette discussion …
__________________________________________________________________________________________
Un scientifique lira des centaines de livres au cours de sa vie, mais sera toujours persuadé qu'il lui reste beaucoup à apprendre.
Un religieux n'en lira qu'un et sera persuadé d'avoir tout compris …
Partager