[VBA] Problème recherches concaténées

Le
Thierry.E
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant à
un critère, je fais donc une recherche (PlageA) avec la fonction "find" puis
parcoure la suite avec la fonction "findnext". Jusque là tout va bien.
Le problème se pose lorsque au sein de cette boucle de recherche, j'insère
une seconde recherche unique (PlageR) avec la fonction "find".
Il semble que cette seconde recherche fasse bugger la fonction findnext
suivante. En effet lorsque l'instruction Findnext s'exécute, le résultat est
"Nothing" alors qu'il existe d'autres occurences.
A noter que si je supprime la seconde recherche (PlageR) la routine
fonctionne parfaitement et toutes les occurences répondant au critère de la
première recherche sont parcourues

Sub test()
Dim PlageA As Range
Dim PlageR As Range

Set PlageA = Feuil4.Range("A:A").Find(IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address

'Boucle tant qu'il trouve des lignes correspondant
Do
///ACTIONS DIVERSES///

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then
///ACTIONS DIVERSES///
End If

'Cherche l'occurence suivante
Set PlageA = Feuil4.Range("A:A").FindNext(PlageA)
'Boucle tant qu'il y a une occurence différente de la première trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If


End Sub

Merci par avance pour votre aide,
Thierry
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichDenis
Le #19670001
Bonjour Thierry,

Je modifierais ta procédure comme ceci :

'-------------------------------------------
Sub test()
Dim PlageA As Range
Dim PlageR As Range
Dim Adr As String

With Feuil4.Range("A:A")
Set PlageA = .Find(what:=IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address
Adr = FirstAddress
'Boucle tant qu'il trouve des lignes correspondant
Do

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then

End If

'Cherche l'occurence suivante
Set PlageA = .Range("A:A").Find(what:=IDSem, _
After:=.Range(Adr), LookAt:=xlWhole)
Adr = PlageA.Address
'Boucle tant qu'il y a une occurence différente de la première trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If
End With
End Sub
'-------------------------------------------





"Thierry.E" OGjjw4Y#
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant à
un critère, je fais donc une recherche (PlageA) avec la fonction "find" puis
parcoure la suite avec la fonction "findnext". Jusque là tout va bien.
Le problème se pose lorsque au sein de cette boucle de recherche, j'insère
une seconde recherche unique (PlageR) avec la fonction "find".
Il semble que cette seconde recherche fasse bugger la fonction findnext
suivante. En effet lorsque l'instruction Findnext s'exécute, le résultat est
"Nothing" alors qu'il existe d'autres occurences.
A noter que si je supprime la seconde recherche (PlageR) la routine
fonctionne parfaitement et toutes les occurences répondant au critère de la
première recherche sont parcourues...

Sub test()
Dim PlageA As Range
Dim PlageR As Range

Set PlageA = Feuil4.Range("A:A").Find(IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address

'Boucle tant qu'il trouve des lignes correspondant
Do
///ACTIONS DIVERSES///

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then
///ACTIONS DIVERSES///
End If

'Cherche l'occurence suivante
Set PlageA = Feuil4.Range("A:A").FindNext(PlageA)
'Boucle tant qu'il y a une occurence différente de la première trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If


End Sub

Merci par avance pour votre aide,
Thierry
Caetera
Le #19669991
"Thierry.E" OGjjw4Y%
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant à un
critère, je fais donc une recherche (PlageA) avec la fonction "find" puis
parcoure la suite avec la fonction "findnext". Jusque là tout va bien.
Le problème se pose lorsque au sein de cette boucle de recherche, j'insère une
seconde recherche unique (PlageR) avec la fonction "find".



Il serait beaucoup plus judicieux de filtrer et de ne parcourir que les cellules
visibles...

Etc
Thierry.E
Le #19669981
Merci beaucoup Michel, ta solution fonctionne parfaitement !

Thierry

"MichDenis" ujYvvLZ%
Bonjour Thierry,

Je modifierais ta procédure comme ceci :

'-------------------------------------------
Sub test()
Dim PlageA As Range
Dim PlageR As Range
Dim Adr As String

With Feuil4.Range("A:A")
Set PlageA = .Find(what:=IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address
Adr = FirstAddress
'Boucle tant qu'il trouve des lignes correspondant
Do

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then

End If

'Cherche l'occurence suivante
Set PlageA = .Range("A:A").Find(what:=IDSem, _
After:=.Range(Adr), LookAt:=xlWhole)
Adr = PlageA.Address
'Boucle tant qu'il y a une occurence différente de la première
trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If
End With
End Sub
'-------------------------------------------





"Thierry.E" discussion :
OGjjw4Y#
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant à
un critère, je fais donc une recherche (PlageA) avec la fonction "find"
puis
parcoure la suite avec la fonction "findnext". Jusque là tout va bien.
Le problème se pose lorsque au sein de cette boucle de recherche, j'insère
une seconde recherche unique (PlageR) avec la fonction "find".
Il semble que cette seconde recherche fasse bugger la fonction findnext
suivante. En effet lorsque l'instruction Findnext s'exécute, le résultat
est
"Nothing" alors qu'il existe d'autres occurences.
A noter que si je supprime la seconde recherche (PlageR) la routine
fonctionne parfaitement et toutes les occurences répondant au critère de
la
première recherche sont parcourues...

Sub test()
Dim PlageA As Range
Dim PlageR As Range

Set PlageA = Feuil4.Range("A:A").Find(IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address

'Boucle tant qu'il trouve des lignes correspondant
Do
///ACTIONS DIVERSES///

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then
///ACTIONS DIVERSES///
End If

'Cherche l'occurence suivante
Set PlageA = Feuil4.Range("A:A").FindNext(PlageA)
'Boucle tant qu'il y a une occurence différente de la première trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If


End Sub

Merci par avance pour votre aide,
Thierry



Thierry.E
Le #19669971
Bonjour Caetera,

Effectivement cette solution doit aussi fonctionner. Trop tard, j'ai
appliqué la solution de MichDenis.

Merci en tout cas,
Thierry

"Caetera" uTm%23FTZ%
"Thierry.E" OGjjw4Y%
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant
à un critère, je fais donc une recherche (PlageA) avec la fonction "find"
puis parcoure la suite avec la fonction "findnext". Jusque là tout va
bien.
Le problème se pose lorsque au sein de cette boucle de recherche,
j'insère une seconde recherche unique (PlageR) avec la fonction "find".



Il serait beaucoup plus judicieux de filtrer et de ne parcourir que les
cellules visibles...

Etc



Thierry.E
Le #19669951
Hum, j'ai peut-être présompté du prénom... désolé MichDenis !

Thierry

"Thierry.E" %23rzuuVZ%
Merci beaucoup Michel, ta solution fonctionne parfaitement !

Thierry

"MichDenis" ujYvvLZ%
Bonjour Thierry,

Je modifierais ta procédure comme ceci :

'-------------------------------------------
Sub test()
Dim PlageA As Range
Dim PlageR As Range
Dim Adr As String

With Feuil4.Range("A:A")
Set PlageA = .Find(what:=IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address
Adr = FirstAddress
'Boucle tant qu'il trouve des lignes correspondant
Do

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then

End If

'Cherche l'occurence suivante
Set PlageA = .Range("A:A").Find(what:=IDSem, _
After:=.Range(Adr), LookAt:=xlWhole)
Adr = PlageA.Address
'Boucle tant qu'il y a une occurence différente de la première
trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <>
FirstAddress
End If
End With
End Sub
'-------------------------------------------





"Thierry.E" discussion :
OGjjw4Y#
Bonjour,

Dans une procédure, je dois chercher toutes les occurences correspondant
à
un critère, je fais donc une recherche (PlageA) avec la fonction "find"
puis
parcoure la suite avec la fonction "findnext". Jusque là tout va bien.
Le problème se pose lorsque au sein de cette boucle de recherche,
j'insère
une seconde recherche unique (PlageR) avec la fonction "find".
Il semble que cette seconde recherche fasse bugger la fonction findnext
suivante. En effet lorsque l'instruction Findnext s'exécute, le résultat
est
"Nothing" alors qu'il existe d'autres occurences.
A noter que si je supprime la seconde recherche (PlageR) la routine
fonctionne parfaitement et toutes les occurences répondant au critère de
la
première recherche sont parcourues...

Sub test()
Dim PlageA As Range
Dim PlageR As Range

Set PlageA = Feuil4.Range("A:A").Find(IDSem, LookAt:=xlWhole)
If Not PlageA Is Nothing Then
FirstAddress = PlageA.Address

'Boucle tant qu'il trouve des lignes correspondant
Do
///ACTIONS DIVERSES///

Set PlageR = Feuil2.Range("A:A").Find(FamArt, LookAt:=xlWhole)
If Not PlageR Is Nothing Then
///ACTIONS DIVERSES///
End If

'Cherche l'occurence suivante
Set PlageA = Feuil4.Range("A:A").FindNext(PlageA)
'Boucle tant qu'il y a une occurence différente de la première trouvée
Loop While Not PlageA Is Nothing And PlageA.Address <> FirstAddress
End If


End Sub

Merci par avance pour votre aide,
Thierry







Publicité
Poster une réponse
Anonyme