Option Explicit
Private Sub CommandButton1_Click()
Dim strTableauMot() As String
Dim lngCells As Long
Application.ScreenUpdating = False
On ErrorResumeNext
For lngCells = 5 To Cells(65536, 1).End(xlUp).Row
' le With ici pointe sur la cellule qui est traité et l'on va pouvoir l'utiliser:
' pour pointer tout au long de cette boucle sur
' ça valeur (.Value)
' ça Ligne (.Row)
' ça colonne(.Column)
' à titre de référence pour inscrire les résultats
With Cells(lngCells, 1)
' Instr: Renvoie une valeur de type Variant (Long) indiquant la position de la première occurrence d'une chaîne à l'intérieur d'une autre chaîne.
' Split: Renvoie un tableau de base zéro à une dimension contenant le nombre spécifié de sous-chaînes
' Mid: Renvoie une valeur de type Variant (String) contenant un nombre indiqué de caractères extraits d'une chaîne de caractères.
' Dans ce cas-ci, j'ai décidé de vérifier en premier si il y a occurence de
' la présence du caractère '/' en double. Parce que si je cherche en premier
' la présence simple du caractère '/' , rien ne me dit si on n'est pas en présence de la double.
' Il faut donc éliminer en premier cette possibilité. Donc si instr retourne(trouve) une valeur plus
' grande que 0, cela veut dire que l'on est en présence du de '//'
If InStr(1, .Value2, '//') > 0 Then
' La logique que j'ai emprunté en regardant tes données, c'est que lorsque l'on
' est en présence de '//', on retrouve une espace dans la string avant ces caractères.
' Ex: 925 T900//R3 RC
' Cet espace va servir de point de repère pour la commande Split(veut dire séparer en français).
' La valeur 2 dans la commande, donne comme instruction de ne pas séparer la String de plus que
' 2 séparations. Pourquoi, parce qu'il y a plus de 1 espaces dans ta String. Alors sans la condition,
' on verrait la String séparer en 3 donc pas a la bonne place
' Une fois la commande lancé, les 2 résultats vont s'inscrire dans la variable tableau: strTableauMot()
strTableauMot() = Split(.Value, ' ', 2)
' Ici, ont écrit dans la colonne C, la valeur de l'index 0(premier index commance a zéro) de la variable strTableauMot
Cells(.Row, .Column + 2) = strTableauMot(0)
Else
' D'après tes données, si on est pas en présence de '//', c'est qu'on est forcément en présence de '/'
' Étand données qu'il n'y a que '/' ceci qui doit séparer la sting, il n'y a donc pas d'instruction supplémentaire
' pour la commande Split
strTableauMot() = Split(.Value, '/')
' J'ai observé qu'il y a deux patron losque l'on a à faire à '/'. Soit qu'on à
' (0697)/7LA031 ou
' 925 2516/DEST:RM ou 936362D/R10
' Ce qui est important, et qui distingue les uns des autres, c'est ce caractères '(' Et basé sur ton exemple,
' tu ne désire pas les conserver.
' Donc, si ce caractère est présent
If InStr(1, strTableauMot(0), '(') > 0 Then
' On élimine le '(' en partant du 2 ième caractére de la string et on compte ne nombre de caractère
' compris dans la string à l'aide de la commande Len et on soustrait 2 pour éliminer les 2 caractères '()'
' (06910) --> Mid((06910),2,7-2) = 06910
Cells(.Row, .Column + 2) = Mid(strTableauMot(0), 2, Len(strTableauMot(0)) - 2)
Else
Cells(.Row, .Column + 2) = strTableauMot(0)
End If
End If
' Finalement, ont inscrit les reste de la string qui est dans l'index 1 de la variable dans la colonne D
Cells(.Row, .Column + 3) = strTableauMot(1)
End With
If Err Then Err.Clear
Next lngCells
On ErrorGoTo 0
Application.ScreenUpdating = True
End Sub
PrivateSub CommandButton2_Click()
Dim lngCells As Long
Application.ScreenUpdating = False
For lngCells = 5 To Cells(65536, 7).End(xlUp).Row
With Cells(lngCells, 7)
' Ici, je n'ai repris que ta logique pour séparer la String
Cells(.Row, .Column + 2) = Mid(.Value2, 1, 3) ' Partir a 1 et 3 caractères de long
Cells(.Row, .Column + 3) = Mid(.Value2, 4, 4) ' Partir a 4 et 4 caractères de long
Cells(.Row, .Column + 4) = Mid(.Value2, 8) ' Partir a 8 et le reste
End With
Next lngCells
Application.ScreenUpdating = True
End Sub