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

Problème avec la fonction Find()

5 réponses
Avatar
TeZ
Bonjour à toutes et tous,

Je rencontre un problème qui me laisse perplexe et dont je n'ai pas trouvé
la solution.

J'ai dans une feuille Excel des données 1,2,3,4,5,6,7,8,9,10 dans les cases
A1 à A9

Si je fais une recherche de ligne telle que :
LigneA = Feuil1.Range("A1:A9").Find(1, LookAt:=xlWhole).Row

Il me renvoit bien 1 dans la variable LigneA qui correspond bien à la ligne
contenant ma valeur cherchée. Jusque là tout va bien...

Par contre si dans mon tableau Excel, j'ai deux fois (ou plus) la valeur 1,
et que la première est dans la ligne 1, il ne trouve pas la première
occurence en ligne 1, mais celle en ligne 3...
J'explique : Dans ma feuille, j'ai maintenant 1,2,1,4,5,6,7,8,9,10 dans les
cases A1 à A9 (La valeur 1 est présente dans les lignes 1 et 3)
Lorsque je fais la même recherche : LigneA = Feuil1.Range("A1:A9").Find(1,
LookAt:=xlWhole).Row

Le résultat retourné est 3 !!!! Pourtant la première occurence qu'il devrait
trouver est bien toujours la première ligne :o(

Quelqu'un aurait une solution (et une explication) s'il vous plait ?

TeZ

5 réponses

Avatar
AV
Pour trouver la 1° occurrence
Comme ça :
LigneA = Feuil1.Range("A1:A9").Find(1, [A9], LookAt:=xlWhole).Row
ou encore mieux
LigneA = Application.Match(1, [Feuil1!A1:A10], 0)

AV
Avatar
michdenis
Bonjour Tez,

Je t'invite à lire dans l'aide d'excel, l'information qui est disponible.

La méthode find possède d'autres paramêtres

Exemple :

After Argument de type Variant facultatif. Cellule après laquelle vous souhaitez commencer la recherche. Cela correspond à la
position de la cellule active lorsqu'une recherche est effectuée à partir de l'interface utilisateur. Notez que l'argument After
doit correspondre à une seule cellule dans la plage. Rappelez-vous que la recherche commence après cette cellule ; la cellule
spécifiée n'est pas recherchée jusqu'à ce que la méthode reviennent à cette cellule. Si vous ne spécifiez pas cet argument, la
recherche commence après la cellule située dans le coin supérieur gauche de la plage.

Il y a aussi l'ordre avec lequel la méthode recherche l'info demandée :
SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByRows ou
xlByColumns.

Il faut tenter de comprendre la différence entre xlnext et xlprevious
SearchDirection Argument de type XlSearchDirection facultatif. Direction de la recherche.
XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

Notes : à lire...
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont enregistrés chaque fois que vous utilisez cette méthode.
Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain appel de la méthode, les paramètres enregistrés sont
utilisés. Le fait de définir les paramètres de ces arguments modifie les paramètres de la boîte de dialogue Rechercher, ce qui a
pour effet de changer les paramètres enregistrés qui sont utilisés lorsque vous ne spécifiez pas les arguments. Pour éviter toute
ambiguïté, définissez ces arguments de façon explicite chaque fois que vous utilisez cette méthode.


Salutations!



"TeZ" <thierry.euzenot_Arobase_kasios.com> a écrit dans le message de news:
Bonjour à toutes et tous,

Je rencontre un problème qui me laisse perplexe et dont je n'ai pas trouvé
la solution.

J'ai dans une feuille Excel des données 1,2,3,4,5,6,7,8,9,10 dans les cases
A1 à A9

Si je fais une recherche de ligne telle que :
LigneA = Feuil1.Range("A1:A9").Find(1, LookAt:=xlWhole).Row

Il me renvoit bien 1 dans la variable LigneA qui correspond bien à la ligne
contenant ma valeur cherchée. Jusque là tout va bien...

Par contre si dans mon tableau Excel, j'ai deux fois (ou plus) la valeur 1,
et que la première est dans la ligne 1, il ne trouve pas la première
occurence en ligne 1, mais celle en ligne 3...
J'explique : Dans ma feuille, j'ai maintenant 1,2,1,4,5,6,7,8,9,10 dans les
cases A1 à A9 (La valeur 1 est présente dans les lignes 1 et 3)
Lorsque je fais la même recherche : LigneA = Feuil1.Range("A1:A9").Find(1,
LookAt:=xlWhole).Row

Le résultat retourné est 3 !!!! Pourtant la première occurence qu'il devrait
trouver est bien toujours la première ligne :o(

Quelqu'un aurait une solution (et une explication) s'il vous plait ?

TeZ
Avatar
TeZ
Merci pour ta réponse :o)

TeZ

"AV" a écrit dans le message de news:

Pour trouver la 1° occurrence
Comme ça :
LigneA = Feuil1.Range("A1:A9").Find(1, [A9], LookAt:=xlWhole).Row
ou encore mieux
LigneA = Application.Match(1, [Feuil1!A1:A10], 0)

AV




Avatar
TeZ
Merci pour ta réponse, mais l'aide d'Excel (que j'avais lu) sur ce point en
tout cas est loin d'être claire en tout cas pour l'amateur que je suis...
J'avais bien vu l'argument "After" et me doutait qu'il allait résoudre le
problème, sauf que nulle part il n'est indiqué la façon dont il fallait
noter la cellule. Et sans AV, je ne saurais toujours pas qu'il fallait la
noter [A9].

D'autre part c'est bizarre que pour trouver une réponse en A1, il faille
commencer la recherche en A9 ! Apparemment c'est le cas puisque ça marche,
mais la logique m'est incompréhensible...

Bref, l'aide d'Excel sur cette fonction est loin d'être claire pour un
amateur tel que moi, et c'était pour cela que j'ai fait appel à vos bonnes
volontés.
Encore une fois, merci.

TeZ

"michdenis" a écrit dans le message de news:
%
Bonjour Tez,

Je t'invite à lire dans l'aide d'excel, l'information qui est disponible.

La méthode find possède d'autres paramêtres

Exemple :

After Argument de type Variant facultatif. Cellule après laquelle
vous souhaitez commencer la recherche. Cela correspond à la
position de la cellule active lorsqu'une recherche est effectuée à partir
de l'interface utilisateur. Notez que l'argument After
doit correspondre à une seule cellule dans la plage. Rappelez-vous que la
recherche commence après cette cellule ; la cellule
spécifiée n'est pas recherchée jusqu'à ce que la méthode reviennent à
cette cellule. Si vous ne spécifiez pas cet argument, la
recherche commence après la cellule située dans le coin supérieur gauche
de la plage.

Il y a aussi l'ordre avec lequel la méthode recherche l'info demandée :
SearchOrder Argument de type Variant facultatif. Il peut s'agir de
l'une des constantes XlSearchOrder suivantes : xlByRows ou
xlByColumns.

Il faut tenter de comprendre la différence entre xlnext et xlprevious
SearchDirection Argument de type XlSearchDirection facultatif.
Direction de la recherche.
XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

Notes : à lire...
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont
enregistrés chaque fois que vous utilisez cette méthode.
Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain
appel de la méthode, les paramètres enregistrés sont
utilisés. Le fait de définir les paramètres de ces arguments modifie les
paramètres de la boîte de dialogue Rechercher, ce qui a
pour effet de changer les paramètres enregistrés qui sont utilisés lorsque
vous ne spécifiez pas les arguments. Pour éviter toute
ambiguïté, définissez ces arguments de façon explicite chaque fois que
vous utilisez cette méthode.


Salutations!



"TeZ" <thierry.euzenot_Arobase_kasios.com> a écrit dans le message de
news:
Bonjour à toutes et tous,

Je rencontre un problème qui me laisse perplexe et dont je n'ai pas trouvé
la solution.

J'ai dans une feuille Excel des données 1,2,3,4,5,6,7,8,9,10 dans les
cases
A1 à A9

Si je fais une recherche de ligne telle que :
LigneA = Feuil1.Range("A1:A9").Find(1, LookAt:=xlWhole).Row

Il me renvoit bien 1 dans la variable LigneA qui correspond bien à la
ligne
contenant ma valeur cherchée. Jusque là tout va bien...

Par contre si dans mon tableau Excel, j'ai deux fois (ou plus) la valeur
1,
et que la première est dans la ligne 1, il ne trouve pas la première
occurence en ligne 1, mais celle en ligne 3...
J'explique : Dans ma feuille, j'ai maintenant 1,2,1,4,5,6,7,8,9,10 dans
les
cases A1 à A9 (La valeur 1 est présente dans les lignes 1 et 3)
Lorsque je fais la même recherche : LigneA = Feuil1.Range("A1:A9").Find(1,
LookAt:=xlWhole).Row

Le résultat retourné est 3 !!!! Pourtant la première occurence qu'il
devrait
trouver est bien toujours la première ligne :o(

Quelqu'un aurait une solution (et une explication) s'il vous plait ?

TeZ




Avatar
michdenis
Bonjour Tez,

| D'autre part c'est bizarre que pour trouver une réponse en A1, il faille
| commencer la recherche en A9 !

L'aide dit ceci :" Si vous ne spécifiez pas cet argument, la
recherche commence après la cellule située dans le coin supérieur
gauche de la plage."

Autrement dit, si tu ne renseignes pas le paramètre "After" de la méthode
"Find", si tu fais une recherche sur la plage A1:A9, la recherche débute en A2
sois la cellule suivante de la cellule située dans le coin supérieur gauche de la plage.
Si tu lui indiques la dernière cellule de la plage, la méthode Find débutera donc
sa recherche à la première cellule de la plage. Pourquoi, parce que la méthde "find"
boucle sur toutes les cellules de la plage dans l'ordre que tu auras renseigné par
un autre paramêtre "SearchOrder:=xlByRows ou xlByColumns" (par ligne ou par colonne)


Salutations!





"TeZ" <thierry.euzenot_Arobase_kasios.com> a écrit dans le message de news: %
Merci pour ta réponse, mais l'aide d'Excel (que j'avais lu) sur ce point en
tout cas est loin d'être claire en tout cas pour l'amateur que je suis...
J'avais bien vu l'argument "After" et me doutait qu'il allait résoudre le
problème, sauf que nulle part il n'est indiqué la façon dont il fallait
noter la cellule. Et sans AV, je ne saurais toujours pas qu'il fallait la
noter [A9].

D'autre part c'est bizarre que pour trouver une réponse en A1, il faille
commencer la recherche en A9 ! Apparemment c'est le cas puisque ça marche,
mais la logique m'est incompréhensible...

Bref, l'aide d'Excel sur cette fonction est loin d'être claire pour un
amateur tel que moi, et c'était pour cela que j'ai fait appel à vos bonnes
volontés.
Encore une fois, merci.

TeZ

"michdenis" a écrit dans le message de news:
%
Bonjour Tez,

Je t'invite à lire dans l'aide d'excel, l'information qui est disponible.

La méthode find possède d'autres paramêtres

Exemple :

After Argument de type Variant facultatif. Cellule après laquelle
vous souhaitez commencer la recherche. Cela correspond à la
position de la cellule active lorsqu'une recherche est effectuée à partir
de l'interface utilisateur. Notez que l'argument After
doit correspondre à une seule cellule dans la plage. Rappelez-vous que la
recherche commence après cette cellule ; la cellule
spécifiée n'est pas recherchée jusqu'à ce que la méthode reviennent à
cette cellule. Si vous ne spécifiez pas cet argument, la
recherche commence après la cellule située dans le coin supérieur gauche
de la plage.

Il y a aussi l'ordre avec lequel la méthode recherche l'info demandée :
SearchOrder Argument de type Variant facultatif. Il peut s'agir de
l'une des constantes XlSearchOrder suivantes : xlByRows ou
xlByColumns.

Il faut tenter de comprendre la différence entre xlnext et xlprevious
SearchDirection Argument de type XlSearchDirection facultatif.
Direction de la recherche.
XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

Notes : à lire...
Les paramètres des arguments LookIn, LookAt, SearchOrder et MatchByte sont
enregistrés chaque fois que vous utilisez cette méthode.
Si vous ne spécifiez aucun paramètre pour ces arguments lors du prochain
appel de la méthode, les paramètres enregistrés sont
utilisés. Le fait de définir les paramètres de ces arguments modifie les
paramètres de la boîte de dialogue Rechercher, ce qui a
pour effet de changer les paramètres enregistrés qui sont utilisés lorsque
vous ne spécifiez pas les arguments. Pour éviter toute
ambiguïté, définissez ces arguments de façon explicite chaque fois que
vous utilisez cette méthode.


Salutations!



"TeZ" <thierry.euzenot_Arobase_kasios.com> a écrit dans le message de
news:
Bonjour à toutes et tous,

Je rencontre un problème qui me laisse perplexe et dont je n'ai pas trouvé
la solution.

J'ai dans une feuille Excel des données 1,2,3,4,5,6,7,8,9,10 dans les
cases
A1 à A9

Si je fais une recherche de ligne telle que :
LigneA = Feuil1.Range("A1:A9").Find(1, LookAt:=xlWhole).Row

Il me renvoit bien 1 dans la variable LigneA qui correspond bien à la
ligne
contenant ma valeur cherchée. Jusque là tout va bien...

Par contre si dans mon tableau Excel, j'ai deux fois (ou plus) la valeur
1,
et que la première est dans la ligne 1, il ne trouve pas la première
occurence en ligne 1, mais celle en ligne 3...
J'explique : Dans ma feuille, j'ai maintenant 1,2,1,4,5,6,7,8,9,10 dans
les
cases A1 à A9 (La valeur 1 est présente dans les lignes 1 et 3)
Lorsque je fais la même recherche : LigneA = Feuil1.Range("A1:A9").Find(1,
LookAt:=xlWhole).Row

Le résultat retourné est 3 !!!! Pourtant la première occurence qu'il
devrait
trouver est bien toujours la première ligne :o(

Quelqu'un aurait une solution (et une explication) s'il vous plait ?

TeZ