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

Remplacement conditionnel de texte dans une plage de cellules

7 réponses
Avatar
Gillou
Bonjour,

Je suis novice en VBA, la réponse à ma question est donc peut-être triviale...

Je dois effectuer une opération sur toute une plage de cellules, opération
qui consiste, en simplifiant beaucoup, en un remplacement de texte si la
cellule considérée contient un texte donné.

En gros, je cherche à traduire en VBA quelque chose comme ça :

* Pour toute cellule de la plage A1 à AC5000, faire :
- si la cellule contient "Texte_A", alors mettre "Conséquence_A" dans la
cellule
- si la cellule contient "Texte_B", alors mettre "Conséquence_B" dans la
cellule
- si la cellule contient "Texte_C", alors mettre "Conséquence_C" dans la
cellule
- ... etc ...

* Recommencer pour la cellule suivante jusqu'à la fin de la plage donnée.

C'est sûrement facile mais je ne connais pas les fonctions à utiliser. Si
quelqu'un pouvait me donner un coup de main, quelques pistes... :-D

Merci d'avance !

7 réponses

Avatar
papou
Bonjour
1 - Tu déclenches l'enregistreur de macro
2 - Tu sélectionnes ta plage
3 - Edition Remplacer, dans la zone Rechercher tu mets "Texte_A", dans la
zone Remplacer par tu mets "Conséquence_A"
5 - Tu cliques sur Remplacer Tout
6 - Tu répètes les op de 3 à 4 en adaptant avec ton deuxième critière
7 - Tu arrêtes l'enregistreur de macro

8 - Tu es content ta macro est faite :-))

Cordialement
Pascal

"Gillou" a écrit dans le message de
news:
Bonjour,

Je suis novice en VBA, la réponse à ma question est donc peut-être
triviale...


Je dois effectuer une opération sur toute une plage de cellules, opération
qui consiste, en simplifiant beaucoup, en un remplacement de texte si la
cellule considérée contient un texte donné.

En gros, je cherche à traduire en VBA quelque chose comme ça :

* Pour toute cellule de la plage A1 à AC5000, faire :
- si la cellule contient "Texte_A", alors mettre "Conséquence_A" dans
la

cellule
- si la cellule contient "Texte_B", alors mettre "Conséquence_B" dans
la

cellule
- si la cellule contient "Texte_C", alors mettre "Conséquence_C" dans
la

cellule
- ... etc ...

* Recommencer pour la cellule suivante jusqu'à la fin de la plage donnée.

C'est sûrement facile mais je ne connais pas les fonctions à utiliser. Si
quelqu'un pouvait me donner un coup de main, quelques pistes... :-D

Merci d'avance !


Avatar
Yvan
Bonjour Gillou

Si tu poses la question, c'est que ce n'est pas si évident, au moins pour toi (et
pour l'instant bien sûr).


Sub Essai()
Dim c As Range

For Each c In ActiveSheet.Range("A1:AC5000")
If InStr(1, c, "Texte_A") Then c = "Consequence_A"
If InStr(1, c, "Texte_B") Then c = "Consequence_B"
If InStr(1, c, "Texte_C") Then c = "Consequence_C"
Next c
End Sub

C'est la solution la plus simple.
Attention, la casse (différence entre minuscules et majuscules) a son importance.

Bonne journée

@+

Yvan


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

| Bonjour,
|
| Je suis novice en VBA, la réponse à ma question est donc peut-être triviale...
|
| Je dois effectuer une opération sur toute une plage de cellules, opération
| qui consiste, en simplifiant beaucoup, en un remplacement de texte si la
| cellule considérée contient un texte donné.
|
| En gros, je cherche à traduire en VBA quelque chose comme ça :
|
| * Pour toute cellule de la plage A1 à AC5000, faire :
| - si la cellule contient "Texte_A", alors mettre "Conséquence_A" dans la
| cellule
| - si la cellule contient "Texte_B", alors mettre "Conséquence_B" dans la
| cellule
| - si la cellule contient "Texte_C", alors mettre "Conséquence_C" dans la
| cellule
| - ... etc ...
|
| * Recommencer pour la cellule suivante jusqu'à la fin de la plage donnée.
|
| C'est sûrement facile mais je ne connais pas les fonctions à utiliser. Si
| quelqu'un pouvait me donner un coup de main, quelques pistes... :-D
|
| Merci d'avance !
Avatar
Gillou

Bonjour
1 - Tu déclenches l'enregistreur de macro
2 - Tu sélectionnes ta plage
3 - Edition Remplacer, dans la zone Rechercher tu mets "Texte_A", dans la
zone Remplacer par tu mets "Conséquence_A"
5 - Tu cliques sur Remplacer Tout
6 - Tu répètes les op de 3 à 4 en adaptant avec ton deuxième critière
7 - Tu arrêtes l'enregistreur de macro

8 - Tu es content ta macro est faite :-))


Pas encore tout à fait content car en fait la situation n'est vraiment pas
si simple...!

Il peut y avoir Texte_A et Texte_B dans la même cellule, c'est (par exemple)
Texte_B qui l'emporte donc je dois définir les tests dans l'ordre avec des IF
imbriqués j'imagine.

De plus, si la cellule contient Texte_A, c'est toute la cellule que je veux
remplacer par Conséquence_A et pas seulement Texte_A donc ce n'est pas un
simple Rechercher/Remplacer.

J'espère avoir été suffisamment clair, la situation n'est pas simple à
expliquer sans rentrer dans des détails qui me feraient écrire un roman sur
ce forum !

Avatar
Gillou
Sub Essai()
Dim c As Range

For Each c In ActiveSheet.Range("A1:AC5000")
If InStr(1, c, "Texte_A") Then c = "Consequence_A"
If InStr(1, c, "Texte_B") Then c = "Consequence_B"
If InStr(1, c, "Texte_C") Then c = "Consequence_C"
Next c
End Sub


Merci, c'est ce que je cherchais. ça reste à adapter un peu en fonction de
mes besoins mais c'est une excellente base de travail.

Je dois faire un test préalable aux conditions A, B et C énoncées plus haut :
- si le texte commence par "PDM :", je dois supprimer les 25 1ers caractères
en partant de la gauche puis faire les tests A, B et C
- sinon, je dois garder le texte de la cellule sans y toucher.

Peux-tu m'aider ? Merci encore !

Avatar
Yvan
Avec plaisir, Gillou!

| - si le texte commence par "PDM :", je dois supprimer les 25 1ers caractères
| en partant de la gauche puis faire les tests A, B et C
| - sinon, je dois garder le texte de la cellule sans y toucher.


Sub Essai()
dim c as Range
For Each c In ActiveSheet.Range("A1:AC5000")
If Left(c,3) = "PDM" then
if len(c)>25 then c = Right(c, len(c)-25) else c=""
If InStr(1, c, "Texte_A") Then c = "Consequence_A"
If InStr(1, c, "Texte_B") Then c = "Consequence_B"
If InStr(1, c, "Texte_C") Then c = "Consequence_C"
End If
Next c
End Sub

Attention à l'ordre des tests A, B et C. Dépend de ton besoin.

OK?

@+. Bon courage.

Yvan
Avatar
Gillou
Sub Essai()
dim c as Range
For Each c In ActiveSheet.Range("A1:AC5000")
If Left(c,3) = "PDM" then
if len(c)>25 then c = Right(c, len(c)-25) else c=""
If InStr(1, c, "Texte_A") Then c = "Consequence_A"
If InStr(1, c, "Texte_B") Then c = "Consequence_B"
If InStr(1, c, "Texte_C") Then c = "Consequence_C"
End If
Next c
End Sub



C'est nickel, j'ai adapté les tests pour mon utilisation et ça marche
très bien.
Merci beaucoup pour ton aide

A+
Gillou

Avatar
Yvan
Salut Gillou.

Super! Bravo!

Au plaisir et félicitations!

Yvan


"Gillou" a écrit dans le message de news:
42f90a17$0$2521$
| > Sub Essai()
| > dim c as Range
| > For Each c In ActiveSheet.Range("A1:AC5000")
| > If Left(c,3) = "PDM" then
| > if len(c)>25 then c = Right(c, len(c)-25) else c=""
| > If InStr(1, c, "Texte_A") Then c = "Consequence_A"
| > If InStr(1, c, "Texte_B") Then c = "Consequence_B"
| > If InStr(1, c, "Texte_C") Then c = "Consequence_C"
| > End If
| > Next c
| > End Sub
|
|
| C'est nickel, j'ai adapté les tests pour mon utilisation et ça marche
| très bien.
| Merci beaucoup pour ton aide
|
| A+
| Gillou