En milieu de chaine : supprimer caractère selon repère

Bonjour,

Je suis face à une cellule contenant des chaines de caractères séparées par " ; " et avec des caractères génants juste avant le " ; ".

Exemple :

TG34567543 A1 ; U6765434667 B2 ; YG4576543 D2 ;

Je cherche une fonction permettant de me conserver sous cette forme, séparée par ";" et sans espace : TG34567543;U6765434667;YG4576543

Et donc en supprimant " A1 " " B2 " " D2 ".

Merci par avance, en PJ un fichier de test.

Très Cdt,

G.

15test-2.xlsx (9.26 Ko)

Bonjour,

Formule suivante en C2 et à copier vers le bas :

=SUBSTITUE(B2;" ";"")

Bonjour, merci pour cette réponse rapide.

Savez-vous s'il existe un équivalent en VBA car je dois traiter une douzaine de feuilles de plusieurs centaines de lignes chacune, et j'aurais souhaité pouvoir éviter de tirer une formule =SUBSTITUE sur ces plages.

Merci par avance!

Cdt.

G.

Bonjour,

un essai mais bon c'est une usine à gaz à voir si ça peut te convenir.

Cordialement.

11test-282-29.xlsx (9.64 Ko)

Ca marche très bien vos 2 solutions, merci.

Je buche sur un code VBA pour automatiser ça car à la main ca prends 15-20 minutes de tout tirer, j'aurais souhaité éviter cela.

En attend, j'essaye le dictionnaire et Split pour recomposer ensuite, mais je crois qu'il ya beaucoup + simple...

Merci,

Cdt,

G.

Bonjour,

A tester.

Cdlt.

7pwetzou.xlsm (17.22 Ko)
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

Bonjour à tous,

Voila un code VBA pour nettoyer tes données :

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

Pour TG56543576[color=#BF0000] A1; [/color]TG787543[color=#BF0000] B2; [/color]TD346754324[color=#BF0000] C3;[/color], il renvoie TG56543576;TG787543;TD346754324;.

Cordialement,

Pwetzou a écrit :

Ca marche très bien vos 2 solutions, merci.

car à la main ca prends 15-20 minutes de tout tirer,

Merci,

Cdt,

G.

Non, on ecrit la formule, on selectionne la cellule et on doubleclic sur la petite croix. La formule se recopie jusqu'a la derniere ligne du tableau

Re,

J'ai donné une fonction personnalisée de feuille de calcul, mais elle peut être utilisée dans une macro comme l'a présenté Sébastien.

Soit, par exemple :

For i = 2 to x 
cells(i,2)=CleanText(cells(i,2))
Next i

Cdlt.

Quelle puissance...

Vos deux solutions sont fonctionnelles.

La version de Sébastien produit le résultat en colonne C.

La version de Jean-Eric, adaptée ici me donnait le résultat mais produisant 5 ";" à la fin.

J'ai ajustée le code de façon à supprimer les ";" à la fin.

Merci à vous tous !

Sub nettoyage()
Dim Sh As Worksheet
For Each Sh In Worksheets
        For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
        resultat = Cells(i, 2)
        Cells(i, 2) = CleanText(Cells(i, 2))
        Cells(i, 2) = Left(resultat, Len(resultat) - 5)
        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
End Sub

Une autre façon, autant de feuilles que le classeur contient

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
Rechercher des sujets similaires à "milieu chaine supprimer caractere repere"