RECHERCHEV sur 2 colonnes

Résolu/Fermé
Signaler
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021
-
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021
-
Bonjour,
Après pas mal de recherche sur le forum, j'ai réussi à trouver un peu mon bonheur.
En choisissant un nom dans ma liste de validation, et à partir de mes séries en feuille stock
je retrouve le nom qui l'accompagne que se soit de la colonne de gauche ou de droite
Mais mon problème c'est que j'ai 2 fois le même nom dans une même colonne.
et bien sur il m'affiche que le 1er résultats.

Je vous joint un fichier pour plus d'explication.

https://www.cjoint.com/?0Cmknt5rTZN

Si vous avez une solution à mon problème pour afficher les 2 résultats.
Je vous en remercie d'avance


--

9 réponses

Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
Bonjour,

utilise .find()

Exemple de l'aide excel :
Méthode Find telle qu'elle s'applique à l'objet Range.

Cette méthode recherche une information spécifique dans une plage et renvoie un objet Range qui représente la première cellule où cette information apparaît. Cette méthode renvoie la valeur Nothing si l'information n'est pas trouvée. N'affecte ni la sélection ni la cellule active.

Pour plus d'informations sur la fonction de feuille de calcul Find de Visual Basic, consultez Utilisation des fonctions de feuille de calcul dans Visual Basic.

expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
expression Obligatoire. Expression qui renvoie un objet Range.

What Argument de type Variant obligatoire. Données à rechercher. Il peut s'agir d'une chaîne de caractères ou de tout autre type de données Microsoft Excel.

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.

LookIn Argument de type Variant facultatif. Type d'informations.

LookAt Argument de type Variant facultatif. Il peut s'agir de l'une des constantesXlLookAt suivantes : xlWhole ou xlPart.

SearchOrder Argument de type Variant facultatif. Il peut s'agir de l'une des constantes XlSearchOrder suivantes : xlByRows ou xlByColumns.

SearchDirection Argument de type XlSearchDirection facultatif. Direction de la recherche.

XlSearchDirection peut être l'une de ces constantes XlSearchDirection.
xlNext par défaut
xlPrevious

MatchCase Argument de type Variant facultatif. Affectez-lui la valeur True pour que la recherche respecte la casse. La valeur par défaut est False.

MatchByte Argument de type Variant facultatif. Cet argument est utilisé uniquement si vous avez sélectionné ou installé la prise en charge des langues codées sur deux octets. Affectez-lui la valeur True pour que les caractères codés sur deux octets ne correspondent qu'aux caractères codés sur deux octets. Affectez-lui la valeur False pour que les caractères codés sur deux octets correspondent à leurs équivalents codés sur un octet.

SearchFormat Argument de type Variant facultatif. Format de la recherche.

Notes
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.

Les méthodes FindNext et FindPrevious permettent de répéter la recherche.

Lorsque la recherche atteint la fin de la plage de recherche spécifiée, elle revient au début de cette plage. Pour arrêter une recherche lorsqu'elle revient au point de départ, enregistrez l'adresse de la première cellule trouvée, puis comparez l'adresse de chaque cellule ultérieurement trouvée avec l'adresse enregistrée.

Pour effectuer des recherches plus complexes, utilisez une instruction For Each...Next avec l'opérateur Like. Par exemple, le code suivant effectue une recherche dans toutes les cellules contenues dans la plage A1:C5 qui utilise une police dont le nom commence par les lettres Cour. Lorsque Microsoft Excel trouve une cellule correspondante, il lui affecte la police Times New Roman.

For Each c In [A1:C5]
If c.Font.Name Like "Cour*" Then
c.Font.Name = "Times New Roman"
End If
Next

Exemple
Cet exemple montre comment rechercher toutes les cellules de la plage A1:A500 dans la feuille de calcul Worksheet 1 contenant la valeur 2 et comment la remplacer par la valeur 5.

With Worksheets(1).Range("a1:a500")
    Set c = .Find(2, lookin:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
            c.Value = 5
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With


Je te conseille d'ajouter lookin:=xlwhole en paramètre.

eric

Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Bonjour Eric,

Je suis désolé mais je ne comprend rien du tout à votre réponse.

Faite moi un exemple avec mon fichier SVP

A+

--
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
Tu as l'exemple de code en bas du post.
Tu as juste à mettre la bonne plage de recherche, et remplacer c.Value = 5 par ton traitement.

eric
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Je n'arrive pas du tout à faire fonctionner votre code pour arrivé à trouver mes 2 résultats de mes séries.



--
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
En choisissant un nom dans ma liste de validation
Je ne vois pas de liste de validation dans ta feuille.

je retrouve le nom
Je ne vois pas de liste de noms avec les infos à retourner

Tu es sur le forum vba, aucun code dans ton classeur pour guider.
Fais un classeur de travail correct avec toutes les infos.
Quoi ? Avec quoi ? Où ? etc.

eric
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Vous avez raison je crois que je me suis tromper de forum.
Merci quand même de votre aide

marcelio

--
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
Tu peux rester là, on sera sans doute obligés de faire en vba.
Mais il faut toutes les infos. Ton classeur et les explications sont insuffisantes.

eric
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Dans ma feuille stock j'ai plusieurs série de nom (3 pour l'exemple mais j'en ai 40)
Dans chaque colonne D ou F ou les 2, je peux avoir 2 fois le même nom.

Dans la feuille accueil en G5 j'ai une liste de validation.
Les recherches commence à partir de la cellule G11 et I11
En choisissant un nom dans cette liste je doit retrouver ce nom dans chaque séries que ce soit la colonne D ou F ou les 2 en même temps,
Exemple:
Si je choisi JEUDI dans ma liste et pour la série 1 cela donne
SEPTEMBRE JEUDI
JEUDI MARDI

toujours avec la série 1 avec JANVIER
Voila ce que cela me donne
DIMANCHE JANVIER
mais comme j'ai 2 fois le nom de JANVIER dans la colonne F
j'aimerais que cela me donne
DIMANCHE JANVIER
JUILLET JANVIER

j'espère avoir été un peu plus clair sur ma demande.
Je vous remet mon fichier

https://www.cjoint.com/?0Cmnal4latO

Merci
--
Messages postés
1953
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 août 2021
151
Bonjour,

Je n'aime pas les fonctions matricielles.
Avec une fonction personnalisée : https://www.cjoint.com/?DCmpxQcuU7b

A+
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
Bon, ben tu auras 2 solutions, je n'avais pas vu la proposition de zoul67.
Une autre par macro : https://www.cjoint.com/?DCmq5wqoAqz
Tu as une alerte si plus de 2 noms trouvés dans une série.
Si ça peut arriver, on peut ressortir la position de ces anomalies dans la feuille 'stock'
Plus le droit de modifier la position des données (ligne, colonne).
De plus, pour simplifier, j'ai besoin que G9:I9 restent libres

eric

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu lorsque c'est le cas (en haut vers votre titre).
Merci
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Bonsoir Le Forum, Eric et Zoul67,

Bravo à tous les 2 pour vos formules qui fonctionnent à merveilles.
Mais j'aurais aimer avoir des explications:
Zoul67
J'ai testé ta fonction "RechPart" sur mon fichier original mais celle ci ne fonctionne pas. Cela me dit :
Impossible de traiter votre question.Soit Microsoft Excel ne trouve pas de fonction équivalente, soit l'aide n'est pas installée.
Que faut t'il faire ?

Eric
Je suis désolé mais j'ai fait une erreur, dans ma feuille stock il n'y à pas de séparation entre chaque série.
que faut modifier dans le code VBA pour que cela fonctionne.

Encore merci à tous les 2 et bonne soirée à vous.

Marcelio
--
Messages postés
1953
Date d'inscription
lundi 3 mai 2010
Statut
Membre
Dernière intervention
12 août 2021
151
La fonction RechPart (pour "recherche particulière") est une fonction personnalisée. J'ai inclus le code VBA dans le Module1.
Messages postés
24222
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
29 novembre 2021
6 980
Je suis désolé mais j'ai fait une erreur, dans ma feuille stock il n'y à pas de séparation entre chaque série.
Il faudrait connaitre la longueur de chaque série alors.
Mais tu peux continuer avec la fonction personnalisée de zoul, c'est une bonne idée aussi.
eric
Messages postés
57
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
10 mars 2021

Bonjour Le Forum, Eric et Zoul67,

Merci à tous les 2 de votre aide.
Je garde la formule de Zoul67, que j'ai réussi à faire fonctionner sur mon fichier original.
Encore merci et bonne fin de journée à vous et au forum.

Marcelio
--