Remplacement conditionnel de texte dans une plage de cellules
7 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 !
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" <Gillou@discussions.microsoft.com> a écrit dans le message de
news:12B4A65D-393A-43F5-A1FB-F32DED5C9D05@microsoft.com...
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
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 !
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 !
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" <Gillou@discussions.microsoft.com> a écrit dans le message de news:
12B4A65D-393A-43F5-A1FB-F32DED5C9D05@microsoft.com...
| 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 !
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 !
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 !
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 !
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 !
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 !
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.
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 !
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
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.
| - 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
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
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
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
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
Salut Gillou.
Super! Bravo!
Au plaisir et félicitations!
Yvan
"Gillou" <gillou@moukate.com> a écrit dans le message de news:
42f90a17$0$2521$a3f2974a@nnrp1.numericable.fr...
| > 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
"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