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

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

5 réponses
Avatar
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

5 réponses

Avatar
MichDenis
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" <aucune_at_aucune.fr> a écrit dans le message de groupe de 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
Avatar
Caetera
"Thierry.E" <aucune_at_aucune.fr> a écrit dans le message de news:
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
Avatar
Thierry.E
Merci beaucoup Michel, ta solution fonctionne parfaitement !

Thierry

"MichDenis" a écrit dans le message de news:
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" <aucune_at_aucune.fr> a écrit dans le message de groupe de
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



Avatar
Thierry.E
Bonjour Caetera,

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

Merci en tout cas,
Thierry

"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:
uTm%23FTZ%
"Thierry.E" <aucune_at_aucune.fr> a écrit dans le message de news:
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



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

Thierry

"Thierry.E" <aucune_at_aucune.fr> a écrit dans le message de news:
%23rzuuVZ%
Merci beaucoup Michel, ta solution fonctionne parfaitement !

Thierry

"MichDenis" a écrit dans le message de news:
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" <aucune_at_aucune.fr> a écrit dans le message de groupe de
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