Bonjour à tous,
J'ai dans une cellule des chaines de caractère avec un schéma homogène, juxtaposées avec un séparateur "|". J'aimerais aboutir à un programme permettant de modifier le contenu de mes groupes de chaines entre les séparateurs (InStr / Mid / Left / Right / Split / Trim), sans avoir à fragmenter, délimiter et recomposer les chaines mises bout à bout.
Plus précisément, je veux juste supprimer 3 blocs de caractères systématiquement avant chaque séparateur "|" (donc les 3 blocs à gauche du séparateur et, (objectif secondaire), remplacer en définitive le | par un ;.
Je trouve des tas de fonction comme celle-ci :
=SI(CHERCHE("|",C2)>0,GAUCHE(C2,CHERCHE("|",C2)-1))
Mais elles ne font que garder le 1er élément de la cellule avant le séparateur. Or, ce que je souhaiterais c'est appliquer cela pour chaque groupe entre séparateur et non seulement le 1er groupe.
Si jamais quelqu'un a le temps pour ce nouveau défi..
Merci,
En attendant je m'y recolle.
G.
Note : voici quelques programmes déjà aboutis pour tronçonner des chaines avec le repère spatial du séparateur, mais avec aucune je n'arrive à retoucher chaque groupe de la même façon.
Avec celle-ci jarrive à nettoyer uniquement 1 groupe à gauche du séparateur, mais mon nouveau fichier de départ n'a pas la même forme. C'est celle de Sebastien.
Sub nettoyage()
Dim Sh As Worksheet
For Each Sh In Worksheets
For i = 2 To Sh.Range("B" & Rows.Count).End(xlUp).Row
Sh.Cells(i, 2) = CleanText(Sh.Cells(i, 2))
Sh.Cells(i, 2) = Left(Sh.Cells(i, 2).Value, Len(Sh.Cells(i, 2).Value) - 1)
Next i
Next
End Sub
Public Function CleanText(sText As String) As String
Dim tbl As Variant, i As Long, x As String
tbl = Split(Trim(sText), " ")
For i = 0 To UBound(tbl) Step 2
x = x & tbl(i) & ";"
Next i
CleanText = x
End Function
La même chose mais différemment
Sub test()
Dim Sh As Worksheet
For Each Sh In Worksheets
For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
Cells(i, 2) = CleanText(Cells(i, 2))
Next i
Next
End Sub
Public Function CleanText(sText As String) As String
Dim tbl As Variant, i As Long, x As String
tbl = Split(Trim(sText), " ")
For i = 0 To UBound(tbl) Step 2
x = x & tbl(i) & ";"
Next i
CleanText = x
End Function
Fonction personnalisée de Jean-Eric ciblant un un nettoyage selon repère.
For i = 2 to x
cells(i,2)=CleanText(cells(i,2))
Next i
@ Sebastien
Sub nettoyage()
For l = 2 To 2 'A modifier pour parcourir les autres lignes
t = Split(Range("B" & l), " ")
For i = 0 To UBound(t)
If UBound(Split(t(i), ";")) > 0 Then t(i) = ";"
Next
Range("C" & l) = Join(t, "")
Next
End Sub