Importer plusieurs colonnes à partir d'un seul vlookup

  • Initiateur de la discussion Initiateur de la discussion ter
  • 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 !

ter

XLDnaute Nouveau
Bonjour tout le monde !

J'ai créé un programme qui va chercher plus d'une valeur correspondante à ma recherche à partir du vlookup.
Par exemple, pour le prénom "toto", je veux importer sa couleur de cheveux ("blond") et sa taille (1m50).

Mon programme utilise 2 vlookups pour aller importer ces deux informations. Mon problème est que les vlookup sont des applications plutôt longues (et je dois bien traiter 100 000 lignes à chaque fois que je lance le programme). Etant donné que le programme ait déjà allé cherché à quelles lignes correspondaient le prénom "toto" avec un premier vlookup (qui sera allé chercher sa couleur de cheveux), ne puis-je pas optimiser mon programme en utilisant cette ligne déjà trouvée pour récupérer les autres informations dessus (taille, poids, couleurs des yeux...) ?

En d'autres terme, dois-je vraiment faire plusieurs vlookup, ou peut-on récupérer plusieurs informations à partir d'un seul vlookup ? (ça me paraitrait absurde qu'on ne puisse pas, étant donné que l'ordinateur doit de nouveau rechercher la valeur "toto" parmi 100 000 lignes pour récupérer une info qui se trouve sur la colonne à côté !)

Merci d'avance
Ter
 
Re : Importer plusieurs colonnes à partir d'un seul vlookup

Bonjour 🙂
Tu utilises EQUIV() pour ramener le n° de ligne, puis avec INDEX(), tu vas chercher toutes tes informations 🙂
MATCH() et INDEX() si tu es en anglais 🙂
Bonne suite 🙂
 
Re : Importer plusieurs colonnes à partir d'un seul vlookup

Bonjour,

As-tu testé avec la méthode Find ? Un petit exemple :
Code:
Sub Test()

    Dim Tbl() As String
    Dim Texte As String
    Dim I As Integer
    
    'recherche en colonne A de la feuille active
    Tbl = Recherche("Le Nom", ActiveSheet, 1)
    
    For I = 1 To UBound(Tbl)
    
        Texte = Texte & Tbl(I) & vbCrLf
        
    Next I
    
    MsgBox Texte
    
End Sub

Function Recherche(Nom As String, _
                   Fe As Worksheet, _
                   NumCol As Integer) As String()

    Dim Tbl() As String
    Dim Plage As Range
    Dim Cel As Range
    Dim Ligne As Range
    Dim I As Integer
    
    With Fe
        
        'défini la plage
        Set Plage = .Range(.Cells(1, NumCol), .Cells(.Rows.Count, NumCol).End(xlUp))
        
        'effectue la recherche
        Set Cel = Plage.Find(Nom, , xlValues, xlWhole)
        
        'si trouvé :
        If Not Cel Is Nothing Then
            
            'défini la plage sur la ligne
            Set Ligne = .Range(.Cells(Cel.Row, 1), .Cells(Cel.Row, .Columns.Count).End(xlToLeft))
            
            'dimensionne le tableau afin de retourner toutes les valeurs
            ReDim Tbl(1 To Ligne.Columns.Count)
            
            For I = 1 To Ligne.Columns.Count
            
                Tbl(I) = Ligne(I)
                
            Next I
             
        'si pas trouvé :
        Else
            
            ReDim Tbl(1 To 1)
            Tbl(1) = "Le nom '" & Nom & "' n'a pas été trouvé dans la base de données !"
            
        End If
    
    End With
    
    'passe le tableau à la fonction
    Recherche = Tbl

End Function

Hervé.
 
Re : Importer plusieurs colonnes à partir d'un seul vlookup

Bonjour JNP,

Je ne connaissais pas ces deux fonctions, merci de me les avoir suggéré.

Peux-tu me confirmer si j'ai bien compris ?
Au lieu du code :
Code:
For i = NbLigneavant + 3 To NbLignemnt + 3 'les valeurs commencent en ligne 4

            Cells(i, 1) = Application.VLookup(Cells(i, 54), Worksheets("feuil3").Range("BN:BN"), 1, False) 'info1
            Cells(i, 2) = Application.VLookup(Cells(i, 54), Worksheets("feuil3").Range("BN:BO"), 2, False) 'info2
            Cells(i, 3) = Application.VLookup(Cells(i, 54), Worksheets("feuil3").Range("BN:BP"), 3, False) 'info3
            Cells(i, 4) = Application.VLookup(Cells(i, 54), Worksheets("feuil3").Range("BN:BQ"), 4, False) 'info4

Next i

J'ai plutôt intérêt en gain de temps à mettre :
Code:
For i = NbLigneavant + 3 To NbLignemnt + 3
lignes = application.match(Cells(i,54),Worksheets("feuil3").Range("BN:BN"), 0)
Cells(i, 1) =application.worksheetfunction.index(Worksheets("feuil3").Range("BN:BQ"), 3 + lignes, 1)
Cells(i, 2) =application.worksheetfunction.index(Worksheets("feuil3").Range("BN:BQ"), 3 + lignes, 1)
Cells(i, 3) =application.worksheetfunction.index(Worksheets("feuil3").Range("BN:BQ"), 3 + lignes, 1)
Cells(i, 4) =application.worksheetfunction.index(Worksheets("feuil3").Range("BN:BQ"), 3 + lignes, 1)

Next i

C'est cela ? (ou finalement, le code est plus long à s'exécuter... ou ne marche pas) ?


Edit : je n'avais pas vu ton message Theze, je la regarderai demain.
Merci !
 
Dernière édition:
Re : Importer plusieurs colonnes à partir d'un seul vlookup

Re,
Désolé, j'était pas dans le coin...
Non, si j'ai compris ce que tu faisais, c'est plutôt ceci :
Code:
Application.ScreenUpdating = False
For i = NbLigneavant + 3 To NbLignemnt + 3
lignes = Application.Match(Cells(i, 54), Worksheets("feuil3").Range("BN:BN"), 0)
Cells(i, 1) = Application.WorksheetFunction.Index(Worksheets("feuil3").Range("BN:BN"), lignes)
Cells(i, 2) = Application.WorksheetFunction.Index(Worksheets("feuil3").Range("BO:BO"), lignes)
Cells(i, 3) = Application.WorksheetFunction.Index(Worksheets("feuil3").Range("BP:BP"), lignes)
Cells(i, 4) = Application.WorksheetFunction.Index(Worksheets("feuil3").Range("BQ:BQ"), lignes)
Next i
Application.ScreenUpdating = True
Bon courage 🙂
 
Re : Importer plusieurs colonnes à partir d'un seul vlookup

Bonjour ter, salut Jean-Noël et Theze,

Pas d'objection à ce que vous passiez votre temps à poser des questions sur XLD.

Mais la moindre des choses est de donner une suite aux réponses qu'on vous donne :

Lien supprimé

A+
 
- 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
Retour