rechercherV avec 2 valeurs correspondante

  • Initiateur de la discussion Initiateur de la discussion Sophie11
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Sophie11

XLDnaute Occasionnel
Bonjour, 😉 🙂

J'ai effectué un RECHERCHEV à partir d'une reference exemple A1=111
mais mon probleme c'est que j'ai dans mon tableau 2 valeurs avec 111 et je voudrais donc recuperer ces 2 valeurs comment je dois faire?? mercid'avance 😛 😛 😛

exemple:
=recherchev(A1;K10:Z50;2)
ci-dessous un exemple xls
 
Dernière édition:
Re : rechercherV avec 2 valeurs correspondante

Suite...
En relisant votre message, je m'aperçois que vous parler d'une quatrième colonne dans la plage nommée TABLEAU. Le code devra effectivement modifié si les colonnes sont modifiées en nombre et en position relative. Le plus simple serait de poser le véritable problème plutôt que de poser des problèmes qui, en réalité, ne sont pas ceux à résoudre : chercher dans la troisième colonne n'est pas chercher dans la quatrième, et réciproquement.
Le code répond aux conditions suivantes :
- retrouver les valeurs de la troisième colonne d'un tableau, associées à une valeur données de la première colonne du dit tableau (celui que j'ai nommé TABLEAU) ;
- les valeurs de référence à rechercher dans la première colonne du tableau sont en nombre variable, et disposée dans une plage unicolonne (celle que j'ai nommé REF).​

Ceci dit, je joins un nouveau classeur pour votre nouveau problème. Il y a une plage nommée supplémentaire, et cette solution vous permettra d'adapter la position des deux colonnes utiles à votre convenance.
ROGER2327
#3294
 

Pièces jointes

Dernière édition:
Re : rechercherV avec 2 valeurs correspondante

Yes, j'aurais du poster un exemple plus representatif... mais je pensais que j'étais assez bonne pour pouvoir adapter dans n'importe quel cas, puis ca me fais travailler et pas recopier betement un code.
Sinon Roger MERCI ca marche trop trop bien 😱)
Par contre dans mon exemple le resultat actuel s'affiche dans les colonnes I:J et j'aurais voulu décaler la colonne J de 9 colonnes vers la droite c'est à dire à R.
Je sais pas comment faire. Je sais je sais, je suis embetante.. c'est ma derniere question.. je vous embetterais plus... Merci encore!! 😛 😛 😛
 
Re : rechercherV avec 2 valeurs correspondante

Re...
Yes, j'aurais du poster un exemple plus representatif... mais je pensais que j'étais assez bonne pour pouvoir adapter dans n'importe quel cas, puis ca me fais travailler et pas recopier betement un code.
Sinon Roger MERCI ca marche trop trop bien 😱)
Par contre dans mon exemple le resultat actuel s'affiche dans les colonnes I:J et j'aurais voulu décaler la colonne J de 9 colonnes vers la droite c'est à dire à R.
Je sais pas comment faire. Je sais je sais, je suis embetante.. c'est ma derniere question.. je vous embetterais plus... Merci encore!! 😛 😛 😛
Pas grave, juste un peu agaçant de travailler en aveugle... Mais si je le fais, c'est que ça m'amuse, personne ne m'y oblige...
Et tant mieux si le résultat vous convient.
Pour ce qui est de la sortie des résultats, j'ai également prévu une plage nommée RES qu'il suffit de modifier, sans toucher au code. Dans le dernier classeur que j'ai déposé, elle est définie par
=DECALER(Sheet1!$I$1;;;1+NBVAL(Sheet1!$I$1:$I$19);2)
Vous pouvez la modifier comme suit :
=DECALER(Sheet1!$R$1;;;1+NBVAL(Sheet1!$R$1:$R$19);2)
Le 19 qui figure dans cette formule n'est pas critique : vous pouvez l'augmenter pour étendre la plage de sortie.
Enfin, vous ne m'embêtez pas. Votre problème est intéressant et cette discussion servira peut-être à d'autre.
Bonne soirée,
ROGER2327
#3298
 
Dernière édition:
Re : rechercherV avec 2 valeurs correspondante

Suite... (et fin, peut-être)
Code commenté :
Code:
[COLOR="DarkSlateGray"][B]Private Sub toto()
Dim i&, j&, nVal&
Dim oRef, oDat1, oDat2, oVal
   On Error Resume Next
   Range("RES").ClearContents [COLOR="SeaGreen"]'Vidange de la plage de sortie. La ligne _
      précédente est nécessaire pour les cas où la plage est déjà vide.[/COLOR]
   On Error GoTo E
   oRef = Range("REF").Resize(Range("REF").Rows.Count, 2).Value [COLOR="SeaGreen"]'Saisie _
      des références à chercher dans le tableau oRef. Le paramètre 2 _
      est nécessaire pour forcer oRef à être un tableau dans le cas où _
      il n'y a qu'une seule valeur à saisir. La ligne précédente  est _
      nécessaire pour le cas où la plage est vide.[/COLOR]
   On Error GoTo 0
   ReDim Preserve oRef(1 To UBound(oRef, 1), 1 To 1) [COLOR="SeaGreen"]'Rétablissement _
      de la dimension du tableau en tableau unicolonne.[/COLOR]
   oDat1 = Range("TABLE_1").Value [COLOR="SeaGreen"]'Saisie des valeurs à comparer à _
      celles du tableau oRef.[/COLOR]
   oDat2 = Range("TABLE_2").Value [COLOR="SeaGreen"]'Saisie des valeurs associées à _
      celles du tableau oDat1.[/COLOR]
   ReDim oVal(1 To 2, 1 To 1) [COLOR="SeaGreen"]'Formatage du tableau de sortie destiné _
      à recueillir les valeurs qu'on va sélectionner dans la suite.[/COLOR]
   For i = 1 To UBound(oRef, 1)
      For j = 1 To UBound(oDat1, 1)
         If oRef(i, 1) = oDat1(j, 1) Then [COLOR="SeaGreen"]'Si une valeur de oRef _
            correspond à une valeur de oDat1 alors...[/COLOR]
            nVal = nVal + 1 [COLOR="SeaGreen"]'...incrémentation du compteur de valeurs _
               selectionnées.[/COLOR]
            ReDim Preserve oVal(1 To 2, 1 To nVal) [COLOR="SeaGreen"]'Redimensionnement _
               du tableau de sortie pour accueillir un nouveau couple _
               de valeurs.[/COLOR]
            oVal(1, nVal) = oDat1(j, 1)
            oVal(2, nVal) = oDat2(j, 1)
         End If
      Next j
   Next i
   [COLOR="SeaGreen"]'Dépot des valeurs du tableau de sortie transposé dans une plage ayant _
   le coin supérieur gauche de la plage RES comme origine.[/COLOR]
   Range("RES").Resize(WorksheetFunction.Max(1, nVal), 2).Value = WorksheetFunction.Transpose(oVal)
E:
End Sub[/B][/COLOR]
ROGER2327
#3301
 
Re : rechercherV avec 2 valeurs correspondante

merci beaucoup de ta gentillesse et patience.. Ton code est trés clair merci pour tes explications et commentaires.
Mais pour mon dernier soucis, on s'est pas compris.

>>>Par contre dans mon exemple le resultat actuel s'affiche dans les colonnes I:J et j'aurais voulu décaler la colonne J de 9 colonnes vers la droite c'est à dire à R.

En fai ma requete concerne qu'une seule colonne de la plage RES (la colonne J)
Je voudrais conservé la colonne I et deplacer la colonne J en R.

Je joints un fichier excel, les valeurs en rouges seraient le resultat à obtenir. Merci encore 🙂🙂 Je pense qu'il faudrait modifier le code VBA.
 

Pièces jointes

Re : rechercherV avec 2 valeurs correspondante

Re...
Il s'agit exactement de la même transformation qu'il a fallu faire sur le tableau TABLEAU ! 42 (ou peut-être 43...) secondes d'observation des modifications faites précédemment donnent la solution.
De même qu'on a scindé la plage nommée TABLEAU en deux plages nommées TABLE_1 et TABLE_2 et scindé le tableau oDat en deux tableaux oDat1 et oDat2 pour les alimenter, on va scinder la plage nommée RES (=DECALER(Sheet1!$I$1;;;1+NBVAL(Sheet1!$I$1:$I$19);2)) en deux plages nommées RES_1 (=DECALER(Sheet1!$I$1;;;1+NBVAL(Sheet1!$I$1:$I$19);1)) et RES_2 (=DECALER(Sheet1!$I$1;0;9;1+NBVAL(Sheet1!$I$1:$I$19);1)) qu'on va alimenter en scindant le tableau oVal en deux tableaux oVal1 et oVal2 :
Code:
[COLOR="DarkSlateGray"][B]Private Sub toto()
Dim i&, j&, nVal&
Dim oRef, [COLOR="SeaGreen"]oDat1[/COLOR], [COLOR="SeaGreen"]oDat2[/COLOR], [COLOR="Red"]oVal1[/COLOR], [COLOR="Red"]oVal2[/COLOR]
   On Error Resume Next
   [COLOR="Red"]Range("RES_2").ClearContents
   Range("RES_1").ClearContents[/COLOR]
   On Error GoTo E
   oRef = Range("REF").Resize(Range("REF").Rows.Count, 2).Value
   On Error GoTo 0
   ReDim Preserve oRef(1 To UBound(oRef, 1), 1 To 1)
   [COLOR="SeaGreen"]oDat1 = Range("TABLE_1").Value
   oDat2 = Range("TABLE_2").Value[/COLOR]
   [COLOR="Red"]ReDim oVal1(1 To 1, 1 To 1)
   ReDim oVal2(1 To 1, 1 To 1)[/COLOR]
   For i = 1 To UBound(oRef, 1)
      For j = 1 To UBound(oDat1, 1)
         If oRef(i, 1) = oDat1(j, 1) Then
            nVal = nVal + 1
            [COLOR="Red"]ReDim Preserve oVal1(1 To 1, 1 To nVal)
            ReDim Preserve oVal2(1 To 1, 1 To nVal)
            oVal1(1, nVal) = [COLOR="SeaGreen"]oDat1(j, 1)[/COLOR]
            oVal2(1, nVal) = [COLOR="SeaGreen"]oDat2(j, 1)[/COLOR][/COLOR]
         End If
      Next j
   Next i
   [COLOR="Red"]Range("RES_2").Resize(WorksheetFunction.Max(1, nVal), 1).Value = WorksheetFunction.Transpose(oVal2)
   Range("RES_1").Resize(WorksheetFunction.Max(1, nVal), 1).Value = WorksheetFunction.Transpose(oVal1)[/COLOR]
E:
End Sub[/B][/COLOR]
ROGER2327
#3306
 

Pièces jointes

Re : rechercherV avec 2 valeurs correspondante

génial merci, j'ai tout compris 😱)
Je l'ai modifier pour ajouter d'autres colonnes. Fantastique je serais jamais arrivée sans toi. Merci infinement!! Je te souhaite un excellent week end.
😛 😛
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour