Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Remplacement de chaine

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

siocnarf

XLDnaute Occasionnel
Bonjour,

J'ai un tableau de 30 000 lignes. Je souhaite programmer en VBA de remplacer toutes les chaines de caractères qui débute par 23 en 23XXX.

Attention seulement celle commençant par 23 ainsi 123 demeurerait intouché mais 2312 serait remplacé par 23xxx.

Quelle est la meilleure façon de le faire? Je sais qu'il y a la fonction replace mais je ne vois pas comment me limiter au 2 premiers caractères... Est-il possible de l'automatiser afin que ce soit rapide car il faut que je refasse la liste plus d'une fois?

Merci,
 
Dernière édition:
Re : Remplacement de chaine

tu en es tout retourné francois !

selectionne la premiere cellule et lance cette macro

Code:
Sub test()
x = Selection.Row
y = Selection.Column
While Cells(x, y) <> ""
 If Left(CStr(Cells(x, y)), 2) = "23" Then
    Cells(x, y) = "23xxx"
 End If
 x = x + 1
Wend
End Sub
 
Re : Remplacement de chaine

Bonjour siocnarf, pierrejean

Une autre proposition, quasi instantané:
Code:
Sub XXX_23()
Dim Tablo, k As Long
Tablo = Sheets("Feuil1").Range("A1:A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row)
  For k = LBound(Tablo) To UBound(Tablo)
    If Left(Tablo(k, 1), 2) = "23" Then Tablo(k, 1) = "23XXX" 
  Next
Sheets("Feuil1").Range("A1:A" & Sheets("Feuil1").Range("A65536").End(xlUp).Row) = Tablo
End Sub

A+
 
Dernière édition:
Re : Remplacement de chaine

Bonjour,

Je remarque que tu charge ton range dans une variable mémoire. Cela créé donc un array. Nous utilisons Excel 2003. Est-ce que cela supportera un chiffrier de 40 000 lignes voire 60 000 lignes??

Merci,
 
Re : Remplacement de chaine

Bonsoir à tous



Une autre façon (issue de enregistreur de macro)

Code:
Sub Macro1()
Selection.Replace What:="23?*", Replacement:="23XXX", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True
End Sub
EDITION: une version "améliorée"
Code:
Sub Macro1_b()
Dim a$, b$, r As Range
a = InputBox("Chaine recherchée?", "Choix", 23)
b = a & "XXX"
Set r = Range([A1], [A65536].End(xlUp))
r.Replace a & "?*", b, xlWhole, xlByRows, True
Set r = Nothing
End Sub

edition: bonsoir bqtr
 
Dernière édition:
Re : Remplacement de chaine

Re, Bonsoir staple1600

Sans aucun problème tant que tu ne dépasses la limite du nombre de ligne.
J'ai fait le code avec Excel2002 et testé sur 35000 lignes.

L'avantage de passer par un tableau c'est la rapidité d'exécution, la mise en tableau d'une plage et son inverse (retour des données sur la feuille) se fait quasiment instantanément.
Le bouclage sur le tableau se fait aussi en mémoire (hyper rapide)

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
479
Réponses
9
Affichages
701
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…