Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

range.replace

22 réponses
Avatar
Misange
Hello
Je bute sur un truc qui m'agace...
Ecrivez en A4 = moyenne(A1:A3). Tirez cette formule vers la droite, en
B4 et C4.
Sélectionnez B4:C4
Lancez l'enregistreur de macro et faites un rechercher moyenne et
remplacer par ecartype en cochant de regarder dans les formules.

Ca marche très bien
Le code généré donne ça
Selection.Replace What:="moyenne", Replacement:="ecartype",
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False,
SearchFormat:=False, ReplaceFormat:=False

Vous noterez qu'à aucun moment le code généré ne précise qu'il faut
regarder dans les formules...
Et si vous essayez de rejouer cette macro, elle trouve le mot moyenne
dans les valeurs mais jamais dans les formules.

Ma question : comment faire EN VBA un recherche /remplacer dans une
formule (pas dans les valeurs de la cellule ?)

Ma gratitude à celui qui trouve ;-)

Misange

2 réponses

1 2 3
Avatar
MichDenis
Si tu veux... mais les fautes d'orthographe en moins
;-))


| "Misange" a écrit dans le message de news:
%23SFRY%
| pffft !
| superbe démo, j'archive Denis
| merci ;-)
| Misange

| Le paramètre LookIn:=xlformulas n'existe pas dans la méthode "Replace"
| car il est le paramètre par défaut, le seul disponible.

Pourquoi cet effet de chose ?

Habituellement, le paramètre : "LookIn:=xlformulas ou xlValues" fait référence à
la propriété "Formula" ou "Value" de l'objet "Range" selon la constante retenue
pour définir le paramètre LookIn. Ce dernier indique à la fonction, s'il doit regarder dans
la chaîne de caractères que retourne l'une ou l'autre des propriétés "Value" ou "Formula".

Lorsque l'on a des data dans une cellule, la propriété "Value" ou "Formula" d'un objet
"Range" retourne exactement la même chaîne de caractère
x = Range("A1").Formula = Range("A1").Value
(j'exclus les cellules contenant des dates naturellement)


Si la cellule contient une formule,
Range("A1").Formula retourne la chaîne de caractère de la formule.
Il ne ferait aucun sens de vouloir remplacer le résultat en tout ou en partie de la formule
(c'est ce que retourne la propriété "Value") qu'affiche la cellule en voulant utiliser
la méthode "Replace". Conséquence, lorsqu'une cellule contient une formule,
le paramètre à appliquer doit être "xlformulas"

Conclusion : La constante XlFormulas couvre tous les cas de figure, que la cellule
contienne des data ou des formules... en conséquence pas besoin de donner le choix
à l'usager de le définir ce paramètre ...ce choix n'existe pas... d'où l'absence du
paramètre dans cette méthode.



"MichDenis" a écrit dans le message de news:

Si tu veux utiliser ce que tu présentes, fait comme ceci .. ça devrait aller !

Range("A1:C1").Replace What:="AVERAGE", Replacement:="STDEV", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse, _
SearchFormat:úlse, ReplaceFormat:úlse

Le paramètre LookIn:=xlformulas n'existe pas dans la méthode "Replace"
car il est le paramètre par défaut, le seul disponible.




"Modeste" a écrit dans le message de news:

Bonsour® LSteph avec ferveur ;o))) vous nous disiez :

Oui et le pire c'est que si on essaie de mettre en +
LookIn:=xlFormulas ça bugue.
c'est effectivement agaçant.

Voilà un truc à creuser...


;o)))
il me semble que la syntaxe pour la recherche VBA dans les formules utilise les
tokens VBA
donc utilise les nom de fonctions US

Selection.Replace What:="AVERAGE", Replacement:="STDEV",LookIn:=xlformulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse,
SearchFormat:úlse, ReplaceFormat:úlse

@+
;o)))







Avatar
Misange
;-)

Si tu veux... mais les fautes d'orthographe en moins
;-))


| "Misange" a écrit dans le message de news:
%23SFRY%
| pffft !
| superbe démo, j'archive Denis
| merci ;-)
| Misange

| Le paramètre LookIn:=xlformulas n'existe pas dans la méthode "Replace"
| car il est le paramètre par défaut, le seul disponible.

Pourquoi cet effet de chose ?

Habituellement, le paramètre : "LookIn:=xlformulas ou xlValues" fait référence à
la propriété "Formula" ou "Value" de l'objet "Range" selon la constante retenue
pour définir le paramètre LookIn. Ce dernier indique à la fonction, s'il doit regarder dans
la chaîne de caractères que retourne l'une ou l'autre des propriétés "Value" ou "Formula".

Lorsque l'on a des data dans une cellule, la propriété "Value" ou "Formula" d'un objet
"Range" retourne exactement la même chaîne de caractère
x = Range("A1").Formula = Range("A1").Value
(j'exclus les cellules contenant des dates naturellement)


Si la cellule contient une formule,
Range("A1").Formula retourne la chaîne de caractère de la formule.
Il ne ferait aucun sens de vouloir remplacer le résultat en tout ou en partie de la formule
(c'est ce que retourne la propriété "Value") qu'affiche la cellule en voulant utiliser
la méthode "Replace". Conséquence, lorsqu'une cellule contient une formule,
le paramètre à appliquer doit être "xlformulas"

Conclusion : La constante XlFormulas couvre tous les cas de figure, que la cellule
contienne des data ou des formules... en conséquence pas besoin de donner le choix
à l'usager de le définir ce paramètre ...ce choix n'existe pas... d'où l'absence du
paramètre dans cette méthode.



"MichDenis" a écrit dans le message de news:

Si tu veux utiliser ce que tu présentes, fait comme ceci .. ça devrait aller !

Range("A1:C1").Replace What:="AVERAGE", Replacement:="STDEV", _
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse, _
SearchFormat:úlse, ReplaceFormat:úlse

Le paramètre LookIn:=xlformulas n'existe pas dans la méthode "Replace"
car il est le paramètre par défaut, le seul disponible.




"Modeste" a écrit dans le message de news:

Bonsour® LSteph avec ferveur ;o))) vous nous disiez :

Oui et le pire c'est que si on essaie de mettre en +
LookIn:=xlFormulas ça bugue.
c'est effectivement agaçant.

Voilà un truc à creuser...
;o)))

il me semble que la syntaxe pour la recherche VBA dans les formules utilise les
tokens VBA
donc utilise les nom de fonctions US

Selection.Replace What:="AVERAGE", Replacement:="STDEV",LookIn:=xlformulas,
LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:úlse,
SearchFormat:úlse, ReplaceFormat:úlse

@+
;o)))











1 2 3