Bonjour quelqu'un pourrait-il m'expliquer comment utiliser la fonction rechercher remplacer avec une macro??
Merci
Bonjour quelqu'un pourrait-il m'expliquer comment utiliser la fonction rechercher remplacer avec une macro??
Merci
Oups,appui sur la mauvaise touche.
Donc, je disais rempli quelques cellules de la colonne A avec du texte et des espaces puis teste. Tu place le curseur sur le mot "Replace" puis F1 et tu aura toute l'aide dont tu as besoin :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub Test() Dim I As Integer 'parcour les cellules de la colonne A et remplace 'tous les espaces par des tirets bas For I = 1 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & I) = Replace(Range("A" & I), " ", "_") Next I End Sub
Ca marche, mais le problème c'est que ca remplace tout et pas juste une partie.
En fait le but de ma demande c'est de corriger des formule fausse via une macro.
ex: j'ai une formule : =si(A1=B1;B2)
et que je veux qu'il me remplace B2 par B3
si je fait
et bien il me remplace tout. une idée?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub Test() Dim I As Integer 'parcour les cellules de la colonne A et remplace 'tous les espaces par des tirets bas For I = 1 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & I) = Replace(Range("A" & I), "A1=B1;B2", "A1=B1;B3") Next I End Sub
Re,
Dans ce cas, il faut que tu fasse la recherche dans la formule :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub Test() Dim I As Integer 'parcour les cellules de la colonne A et remplace 'tous les espaces par des tirets bas For I = 1 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3") Next I End Sub
En fait plus que de me remplacer tout par exemple si le resultat de ma formule
si(A1=A2;B1) est 10 ben la macro eleve la formule et il ne reste que 10
Bonjour à tou(te)s,
je reprends la formule de theze
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Test() Dim I As Integer For I = 1 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3") Range("A" & I).Copy Range("A" & I).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next I End Sub
Merci ca fonctionne par contre si je laisse le copier coller il effectue l'opération et ne garde pas la formule.
Comme ceci il garde la formule.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub Test() Dim I As Integer For I = 1 To Range("D" & Rows.Count).End(xlUp).Row Range("D" & I).Formula = Replace(Range("D" & I).Formula, "B1", "B2") Next I End Sub
Merci à vous !!
J'essaye de réaliser cette méthode pour toute ma feuille mais il n'y as rien a faire pourriez vous me dire ce qu'il ne va pas
Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 For Each cell In ActiveWorkbook.Sheets("Feuil1").Range("A1:O50") cell.Formula = Replace(cell.Formula, "A1", "A2") Next
Bonjour bakman,
Ceci convient ? Adapte la référence dans la proc Replace (ici B1 et B2) :
Hervé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 Sub Test() Dim Plage As Range Dim Cel As Range Set Plage = Worksheets("Feuil1").[A1:O50] For Each Cel In Plage Cel.Formula = Replace(Cel.Formula, "B1", "B2") Next Cel End Sub
j'ai remarque qu'il faut que je mette .formulaLocal pour que ca fonctionne mais par contre sur un grand nombe de cellules c'est très lourd comme méthode.
j'ai alors décidé d'enregistré une marco voila ce que ca donne
si je lui deande le me remplace A1 par A2 ca marche impek mais par contre pour remplacer ");31)>" par ")+1;0)>" il ne fait rien je soupçonne le même problème qu'avec le formulaLocal mais ou le placer dans la macro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Cells.Replace What:=");31)>", Replacement:=")+1;0)>", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False
Bonjour,
Je ne suis pas sûr qu'un FormulaLocal soir nécessaire, il faudrait que tu montre une des formules à modifier pour voir comment elle est construite. J'ai fait un test de remplacement et ça fonction, le remplacement a bien été fait.
Hervé.
Bonsoir bakman,
Effectivement, ça ne marche pas sur une formule aussi complexe, il va falloir te résoudre à utiliser ce que je t'ai posté en remplaçant "Cel.Formula" par "Cel.FormulaLocal". C'est plus lent mais ça marche et je pense que tu ne fait pas des modifs en permanence sur tes formules ?
Hervé.
Bonsoir la Forum,
Pour casefayere,
Je me permets de proposer cette simplification
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Test() Dim I As Integer For I = 1 To Range("A" & Rows.Count).End(xlUp).Row Range("A" & I).Formula = Replace(Range("A" & I).Formula, "B2", "B3") Range("A" & I).Copy Range("A" & I).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Next I End Sub
Outre l'instruction with qui n'apporte pas grand chose, on peut noter que le collage special valeur d'une cellule avec formule sur elle-même, peut se coder
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub Test2() Dim I As Integer For I = 1 To Range("A" & Rows.Count).End(xlUp).Row With Range("A" & I) .Formula = Replace(.Formula, "B2", "B3") .Value = .Value End With Next I End Sub
C'est une astuce de silkyroad ou mercatog, je crois.
Code : Sélectionner tout - Visualiser dans une fenêtre à part .Value = .Value
Court et pratique.
Non effectivement je ne vais pas changé mes formules très souvent! mais le pourquoi de ma requette c'est que je développe un utilitaire de mise à jour et correction de bug d'une appli excel, cette appli est utilisé par une bonne cinquantaine de personne. A raison en moyenne de 3 fichiers par personnes ca fait beaucoup de modif . Et c'est vraiment un problème car il faut que je modifie des formule sur plusieurs feuille et le fichiers et très lourd si je lance cette macro juste pour changer les formules de la colonne N 10min après la macro n'a pas fini alors qu'il faut que je corrige le problème de N à HX
Je suis plus trop comment faire là
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 For Each cell In ActiveWorkbook.Sheets("Feuil1").Range("N:N") cell.FormulaLocal = Replace(cell.FormulaLocal , ");31)>", ")+1;0)>" Next
MERCI
Bonjour Darkman, Bonjour le Forum,
A mon avis, ta macro connaît un temps d'exécution ssez long du fait qu'elle balaye toute ta colonne N.
Il te faut définir d'abord ton champ d'intervention.
Je te propose
Cela dit,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Sub ESSAI() Dim celform As Range, c As Range 'Recherche de la dernière ligne informée derlign = Range("N" & Rows.Count).End(xlUp).Row Set celform = Sheets("Feuil1").Range("N2:N" & derlign) 'Balayage des Formules et remplacement For Each c In celform c.FormulaLocal = Replace(c.FormulaLocal, ");31)>", ")+1;0)>") Next c Set celform = Nothing End Sub
Personnellement, je n'apprécie pas le balayage de chaque cellule d'un objet Range.
En utilisant la référence L1C1, il te audrait regarder si l'emploi de la méthode(forme matricielle) ne serait pas plus performante, vu la dimension du champ concerné. Je pense que oui.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Formula Array
L'aide en ligne te donnera un exemple.
bonjour,
pour gagner du temps
tu peux faire comme ceci simplement
en prenant le code de MarcelG comme référence
sinon, il recalcule à chaque fois que tu change une cellule
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Public Sub ESSAI() Dim celform As Range, c As Range, derlign Application.Calculation = xlCalculationManual 'Recherche de la dernière ligne informée derlign = Range("N" & Rows.Count).End(xlUp).Row Set celform = Sheets("Feuil1").Range("N2:N" & derlign) 'Balayage des Formules et remplacement For Each c In celform c.FormulaLocal = Replace(c.FormulaLocal, ";4", ";3") Next c Set celform = Nothing Application.Calculation = xlCalculationAutomatic End Sub
Merci beaucoup par contre comment puis-je intégrer la référence L1C1 pour effectuer les changement dans toute ma feuille?
Bonsoir
et ainsi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Sub ESSAI() Dim c As Range Application.Calculation = xlCalculationManual For Each c In Sheets("Feuil1").Cells.SpecialCells(xlCellTypeFormulas) c.Replace What:=");31)>", Replacement:=")+1;0)>" Next Application.Calculation = xlCalculationAutomatic End Sub
Je vous remercie tous pour votre contribution! à bientot
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager