Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Selection.Replace

24 views
Skip to first unread message

Bruno-Dominique ROBERT

unread,
Aug 21, 2001, 5:27:42 AM8/21/01
to
Bonjour,
Toujours débutant...en VBA et il semblerait que cela risque de durer un
temps certain !

Je dois effectuer une qualification d'adresses à l'aide de la macro
ci-dessous.
Qui peut me dire comment faire pour que la macro continue quand il n'y a pas
d'occurence d'une chaîne recherchée et passe à la recherche suivante,
quelque soit le nombre de recherche total à faire.

Ne serait-il pas préférable d'ajouter une instruction FindNext, mais les
boucles Do Loop While ce n'est pas mon fort !
FindNext, méthode - Exemple : Cet exemple montre comment rechercher toutes
les cellules de la plage A1:A500 qui contiennent la valeur 2, puis grise ces
cellules.
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues) ' je ne somprends pas <.Find>
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50 ' pourrais-t-on remplacer
ici par <Selection.Replace>
Set c = .FindNext(c) ' je ne somprends pas <.FindNext>
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With

Merci pour votre aide
BDR

Sub Qualif_ADR()
' Touche de raccourci du clavier: Ctrl+a
ActiveCell.Columns("A:A").EntireColumn.Select
' Rue
Selection.Replace What:=", r ", Replacement:=" rue ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:=" r ", Replacement:=" rue ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
' Place
Selection.Replace What:=", pl ", Replacement:=" place ",
LookAt:=xlPart,_
SearchOrder:=xlByRows, MatchCase:=False
' Avenue
Selection.Replace What:=", av ", Replacement:=" avenue ",
LookAt:=xlPart_
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="av ", Replacement:="Avenue ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
End Sub


rural thierry

unread,
Aug 21, 2001, 6:07:28 AM8/21/01
to
salut,
je ne suis pas sur d'avoir tout suivi mais est-ce que tu veux quelqhe chose
comme cela

Sub test2()
For Each c In Range("a1:h500")
If c.Value Like "*2*" Then c.Interior.Pattern = xlPatternGray50
If c.Value = ",r " Or c.Value = "r " Then c.Value = "rue"
If c.Value = ",pl " Or c.Value = "pl " Then c.Value = "avenue"
Next c
End Sub

là, j'ai supposé que tes r et pl sont dans une cellule, sinon essaye avec le
like (mais en cas le 8, r du ravin devient le 8, rue du rueavin !)
a+
rural thierry

Bruno-Dominique ROBERT <b...@rvh.fr> a écrit dans le message :
u45llQiKBHA.2060@tkmsftngp02...

Denis Michon

unread,
Aug 21, 2001, 10:10:20 AM8/21/01
to
bonjour Bruno-Dominique,

a) Si ce que tu veux , est de remplacer dans la
première colonne ("A:A") la chaîne "R" par la chaîne
"Rue" Voici ce que tu pourrais écrire:

Worksheets("NomFeuille").range("A:A").replace "R","Rue

Dans la plage de cellules nommées, à chaque occurence
de la lettre R , cette dernière va être remplacé par Rue que
la cellule contienne seulement la valeur R ou plusieurs R
à chaque fois, elle va substituer R pour Rue.

Ce type d'approche est très rapide lorsqu'il convient...


B) À partir de cet exemple provenant de l'aide d'Excel,

With Worksheets(1).Range("a1:a500")

Dans la ligne qui suit C est une variable de type Range
qu'on aurait pu définir en début de procédure
dim C as range
donc C hérite de tous les méthodes et propriétés de
l'objet Range

La syntaxe .Find est une saisi abrégée de la ligne de commande
Worksheets(1).Range("a1:a500").find...

C'est ce que permet l'approche With ...end with et c'est applicable
à tous les méthodes de l'objet Range dans notre cas, Si cela avait
été une Feuille , on aurait pu référencé les méthodes de la feuille
de la même manière.

Set c = .Find(2, lookin:=xlValues) ' je ne somprends pas
<.Find>
If Not c Is Nothing Then
firstAddress = c.Address
Do

Si tu voulais remplacer seulement les cellules contenant la valeur
"R"
par la valeur "Rue" tu pourrais ajouter:
if c.value="R" then c.value="Rue"
la méthode replace n'est pas la meilleure façon puisque tu dois
tester d'abord la valeur que contient la cellule.

c.Interior.Pattern = xlPatternGray50 ' pourrais-t-on remplacer
ici par <Selection.Replace>

la syntaxe de .findnext est identique à celle définie précédemment.
La ligne .findNext si elle n'était pas là, après la première occurence,
la boucle s'arrêterait.


Set c = .FindNext(c) ' je ne somprends pas <.FindNext>
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With


J'espère que c'est plus clair....

Salutations!


"Bruno-Dominique ROBERT" <b...@rvh.fr> a écrit dans le message news:
u45llQiKBHA.2060@tkmsftngp02...

Bruno-Dominique ROBERT

unread,
Aug 21, 2001, 10:18:48 AM8/21/01
to
Bonjour Denis,
Encore une fois merci pour la qualité de tes explications.
Je vais travailler avec tes indications
A bientôt
Meilleures salutations
BDR
"Denis Michon" <deni...@ntic.qc.ca> a écrit dans le message news:
ODH0KqkKBHA.1308@tkmsftngp04...
0 new messages