XL 2010 [RESOLU] Supprimer nombre de caractères variable d'une chaine

cp4

XLDnaute Barbatruc
Bonjour,

Un peu perdu, je fais appel à votre aide.
Je voudrai parcourir par exemple la colonne A pour supprimer les signes > et < et ce qui s'y trouve entre les 2 signes.
exemple:
INITIAL------------------------------------------------------------ESCOMPTE
1. What is an array<#L_1>--------------------------------------> 1. What is an array
5.3.4 Declare the content<#L5.3.4> ---------------------------> 5.3.4 Declare the content

J'ai commencé ainsi mon code mais je bloque à cause du nombre variable de caractères à supprimer.
VB:
Sub supprimer_finChaine()
    With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
         .Cells(i,1)=?
        Next i
    End With
End Sub
Avec mes remerciements anticipés.
 

cp4

XLDnaute Barbatruc
Bonjour à tous,

La fonction gauche ne suffit pas?
VB:
=GAUCHE(A1;CHERCHE("<";A1)-1)

JHA
Bonjour JHA,

Merci beaucoup pour la formule. C'est déjà un bon début pour moi.
En fait, j'aurais préféré un code vba.

En tout cas encore merci.

edit: J'ai trouvé une solution
VB:
Sub supprimer_finChaine()
    With ActiveSheet
        For i = 9 To .UsedRange.Rows.Count
If .Cells(i, 1) <> "" And InStr(.Cells(i, 1), "<") <> 0 Then .Cells(i, 9) = Left(.Cells(i, 1), InStr(.Cells(i, 1), "<") - 1)
        Next i
    End With
    MsgBox "terminé!"
End Sub
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour @cp4

VB:
Sub supprimer_finChaine()
    With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
            .Cells(i, 1) = Split(.Cells(i, 1), "<")(0)
        Next i
    End With
End Sub
Bonsoir Laurent950;),

Content de te croiser. Je connais la fonction split mais je t'avoue que je ne me doutais pas que ça ferait l'affaire.
Merci infiniment. J'ai apporté une modification car il y des cellules vides.
VB:
Sub supprimer_finChaine()
    With ActiveSheet
        For i = 1 To .UsedRange.Rows.Count
            If .Cells(i, 1) <> "" Then .Cells(i, 1) = Split(.Cells(i, 1), "<")(0)
        Next i
    End With
End Sub
Toute ma gratitude.

Bonne soirée.
 

laurent950

XLDnaute Accro
Bonsoir @cp4

Content aussi de vous croiser ici, l'astuce c'est que cela transforme en Tableau un split.

Vous pouvez regarder cela @cp4 c'est intéressant
Poste #3

Laurent
 

job75

XLDnaute Barbatruc
Cela dit avec un tableau VBA c'est toujours plus rapide :
VB:
Sub Sup()
Dim tablo, i&, x$
With ActiveSheet.UsedRange.Columns(1)
    tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(tablo)
        x = tablo(i, 1) & "<"
        tablo(i, 1) = Left(x, InStr(x, "<") - 1)
    Next
    .Value = tablo
End With
End Sub
=> 0,17 seconde sur 100 000 cellules.
 

cp4

XLDnaute Barbatruc
Bonjour cp4, le forum,

Avec Replace c'est plus simple et plus rapide :
VB:
Sub Sup()
ActiveSheet.UsedRange.Columns(1).Replace "<*", "", xlPart
End Sub
Testé sur 100 000 cellules, chez moi sur Excel 2019 :

- macro du post #4 => 3,8 secondes

- cette macro => 1,3 seconde.

A+
Bonjour Job75;),

Très efficace ton code. Fonctionne parfaitement bien et rapide.

Merci beaucoup.
 

cp4

XLDnaute Barbatruc
Cela dit avec un tableau VBA c'est toujours plus rapide :
VB:
Sub Sup()
Dim tablo, i&, x$
With ActiveSheet.UsedRange.Columns(1)
    tablo = .Resize(, 2) 'matrice, plus rapide, au moins 2 éléments
    For i = 1 To UBound(tablo)
        x = tablo(i, 1) & "<"
        tablo(i, 1) = Left(x, InStr(x, "<") - 1)
    Next
    .Value = tablo
End With
End Sub
=> 0,17 seconde sur 100 000 cellules.
Rebonjour,

Merci beaucoup. Le code plante car il y a des cellules vides. Mais en adaptant le code, je sais que ton code sera aussi efficace que le précédent.
En fait j'ai enregistré une page web (tuto Array) au format txt que j'ai ensuite ouvert avec Excel. D'où le présence des cellules vides.
SupCaractères.gif

En tout merci beaucoup. Tes codes sont au top.

Bonne journée
 

cp4

XLDnaute Barbatruc
Non pas d'accord car j'utilise x = tablo(i, 1) & "<" qui va bien sur toute cellule, vide ou non vide.

Sauf bien sûr celles qui contiennent une valeur d'erreur, ce sont celles-là qui font planter.
Bonsoir Job75,

:eek:o_O, confus. En effet, tu as raison le code ne plante pas sur les cellules vides.
Il y avait en fait dans une cellule une formule avec #NOM.
Désolé, pour ma réponse tardive et ma précipitation dans la conclusion.

1000 Mercis.
 

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 989
Membres
101 856
dernier inscrit
Marina40