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

Problème avec find et findnext

2 réponses
Avatar
Stef
Bonjour a tous.

Je viens ici vous présenter un problème avec lequel je me bat depuis ce
matin et qui risque d'ammener mon portable à apprendre à voler d'ici peu.

Voici le code

1 Set d = PM.Range("B:B").Find(Composant, lookat:=xlWhole) 'recherche
l'article
2 SecondAdress = d.Address

3 Do
4 If Not d Is Nothing And PM.Range("F" & d.Row) = N°OF Then
'si le N° d'OF et d'article parent correspondent :
5 PM.Range("D" & d.Row) =
Application.WorksheetFunction.RoundUp(Qté * Prorata, 0) 'Modifie la
quantité
6 PM.Range("G" & d.Row) = Now()
7 Fait = True 'Flag on
8 If SoldeOf Then 'si on solde l'OF
9 PM.Range("A" & d.Row & ":H" &
d.Row).Interior.ColorIndex = 15
10 End If
11 Else
12 Set d = PM.Range("B:B").FindNext(d) 'Si pas
trouvé, on passe au suivant
13 End If
14 Loop While Not d Is Nothing And SecondAdress <> d.Address And Not Fait

**********************************************
Et l'explication : (j'ai numéroté les lignes pour essayer d'être plus clair)

PM est un variant qui pointe vers une feuille xl
Ligne1 je cherche une valeur dans une plage

ligne 12, je recherche la valeur dans la suite de la plage (puisque celle
trouvée ne correspondait pas)

Le problème, c'est que après la ligne 12, d = nothing, alors que d'une part
il reste des valeurs à trouver dans le reste de la liste, et que d'autre
part, selon l'aide, lorsque xl arrive à la fin de la liste il devrait
recommencer au début.

La seule chose qui me met un doute, c'est que ce code est imbriqué dans une
macro qui contient déja un find et un findnext, mais bien sur ou d est
remplacé par une autre variable de type variant.

Si quelqu'un pouvait m'aider ça serait plutot super.

Merci d'avance.

Stef

2 réponses

Avatar
isabelle
bonjour Stef,

voici un exemple,

Sub recherche()
Dim valeur, vt
Dim Msg1, Style, Title, Response1
Msg1 = "Voulez vous continuez la recherche ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "RECHERCHE"
valeur = "Valeur_Rechercher" '<---- à adapter
Range("A1").Select
On Error Resume Next
ActiveSheet.Cells.Find(What:=valeur, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse) _
.Activate
vt = Application.Find(valeur, ActiveCell)
If vt = 2015 Then GoTo suite
Response1 = MsgBox(Msg1, Style, Title)
If Response1 = vbNo Then
Exit Sub
Else
Do While Response1 = vbYes
Cells.FindNext(After:¬tiveCell).Activate
Response1 = MsgBox(Msg1, Style, Title)
Loop
End If
suite:
If ActiveCell <> valeur Then MsgBox ("Le nom cherchée n'a pas été
trouver")
End Sub

isabelle




Bonjour a tous.

Je viens ici vous présenter un problème avec lequel je me bat depuis ce
matin et qui risque d'ammener mon portable à apprendre à voler d'ici peu.

Voici le code

1 Set d = PM.Range("B:B").Find(Composant, lookat:=xlWhole) 'recherche
l'article
2 SecondAdress = d.Address

3 Do
4 If Not d Is Nothing And PM.Range("F" & d.Row) = N°OF Then
'si le N° d'OF et d'article parent correspondent :
5 PM.Range("D" & d.Row) > Application.WorksheetFunction.RoundUp(Qté * Prorata, 0) 'Modifie la
quantité
6 PM.Range("G" & d.Row) = Now()
7 Fait = True 'Flag on
8 If SoldeOf Then 'si on solde l'OF
9 PM.Range("A" & d.Row & ":H" &
d.Row).Interior.ColorIndex = 15
10 End If
11 Else
12 Set d = PM.Range("B:B").FindNext(d) 'Si pas
trouvé, on passe au suivant
13 End If
14 Loop While Not d Is Nothing And SecondAdress <> d.Address And Not Fait

**********************************************
Et l'explication : (j'ai numéroté les lignes pour essayer d'être plus clair)

PM est un variant qui pointe vers une feuille xl
Ligne1 je cherche une valeur dans une plage

ligne 12, je recherche la valeur dans la suite de la plage (puisque celle
trouvée ne correspondait pas)

Le problème, c'est que après la ligne 12, d = nothing, alors que d'une part
il reste des valeurs à trouver dans le reste de la liste, et que d'autre
part, selon l'aide, lorsque xl arrive à la fin de la liste il devrait
recommencer au début.

La seule chose qui me met un doute, c'est que ce code est imbriqué dans une
macro qui contient déja un find et un findnext, mais bien sur ou d est
remplacé par une autre variable de type variant.

Si quelqu'un pouvait m'aider ça serait plutot super.

Merci d'avance.

Stef


Avatar
Stef
Merci pour la réponse.
J'ai souvent utilisé find et findnext sans problème.

Le cas qui se pose, c'est que je voulais en faire plusieurs imbriquées.
Exemple synthétique :

dans table1.range("A:A") : find(x)
Dans table 2 : find (table1.range("z" & x.row)
Dans table3 : find(table2.range(""w" & résultat2.row)
.......
.......
findnext until firstadress3
findnext until adress = firstadress2
findnext until adress = firstadress1

Je sais c'est pas du vba, mais on comprend mieux.
Dans ce cas, j'ai l'impression qu'excel se perd, ou alors ce n'est tout
simplement pas possible.

Finalement j'ai fait autrement.

Merci pour la réponse.


"isabelle" a écrit dans le message de
news:
bonjour Stef,

voici un exemple,

Sub recherche()
Dim valeur, vt
Dim Msg1, Style, Title, Response1
Msg1 = "Voulez vous continuez la recherche ?"
Style = vbYesNo + vbCritical + vbDefaultButton2
Title = "RECHERCHE"
valeur = "Valeur_Rechercher" '<---- à adapter
Range("A1").Select
On Error Resume Next
ActiveSheet.Cells.Find(What:=valeur, After:¬tiveCell,
LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
MatchCase:úlse) _
.Activate
vt = Application.Find(valeur, ActiveCell)
If vt = 2015 Then GoTo suite
Response1 = MsgBox(Msg1, Style, Title)
If Response1 = vbNo Then
Exit Sub
Else
Do While Response1 = vbYes
Cells.FindNext(After:¬tiveCell).Activate
Response1 = MsgBox(Msg1, Style, Title)
Loop
End If
suite:
If ActiveCell <> valeur Then MsgBox ("Le nom cherchée n'a pas été
trouver")
End Sub

isabelle




Bonjour a tous.

Je viens ici vous présenter un problème avec lequel je me bat depuis ce
matin et qui risque d'ammener mon portable à apprendre à voler d'ici
peu.



Voici le code

1 Set d = PM.Range("B:B").Find(Composant, lookat:=xlWhole) 'recherche
l'article
2 SecondAdress = d.Address

3 Do
4 If Not d Is Nothing And PM.Range("F" & d.Row) = N°OF
Then


'si le N° d'OF et d'article parent correspondent :
5 PM.Range("D" & d.Row) > > Application.WorksheetFunction.RoundUp(Qté * Prorata, 0) 'Modifie la
quantité
6 PM.Range("G" & d.Row) = Now()
7 Fait = True 'Flag on
8 If SoldeOf Then 'si on solde l'OF
9 PM.Range("A" & d.Row & ":H" &
d.Row).Interior.ColorIndex = 15
10 End If
11 Else
12 Set d = PM.Range("B:B").FindNext(d) 'Si pas
trouvé, on passe au suivant
13 End If
14 Loop While Not d Is Nothing And SecondAdress <> d.Address And Not
Fait



**********************************************
Et l'explication : (j'ai numéroté les lignes pour essayer d'être plus
clair)



PM est un variant qui pointe vers une feuille xl
Ligne1 je cherche une valeur dans une plage

ligne 12, je recherche la valeur dans la suite de la plage (puisque
celle


trouvée ne correspondait pas)

Le problème, c'est que après la ligne 12, d = nothing, alors que d'une
part


il reste des valeurs à trouver dans le reste de la liste, et que d'autre
part, selon l'aide, lorsque xl arrive à la fin de la liste il devrait
recommencer au début.

La seule chose qui me met un doute, c'est que ce code est imbriqué dans
une


macro qui contient déja un find et un findnext, mais bien sur ou d est
remplacé par une autre variable de type variant.

Si quelqu'un pouvait m'aider ça serait plutot super.

Merci d'avance.

Stef