Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Isaros

XLDnaute Nouveau
Bonjour tout le monde,

Pour simplifier, je reformulerais ma question comme suit:

La fonction vlookup (recherchev) ne renvoyant qu'une seule valeur, existe-t-il un moyen pour renvoyer une plage de valeurs?

Ou éventuellement, est-il possible déterminer la position (numéro de ligne) de la cellule dans laquelle la fonction vlookup est allé chercher le résultat?
Cette info me permettrait d'aller chercher les 11 autres valeurs d'un coup.

Mon problème est le suivant:
J'ai 2 fichiers excel, l'un contenant plusieurs champs dont "code article"
Le deuxième fichier contient aussi le champs "code article" mais il contient en plus 12 champs correspondant aux 12 dernières consomations mensuelles réalisées "CMR-12", "CMR-11", ..., "CMR-1".

Tout cela n'étant pas dans le même ordre et les données n'étant pas forcément disponibles, j'utilise actuellement le code suivant pour tout rassembler dans un seul et même tableau:


Code:
      [COLOR="Green"]'lig est la taille  du premier tableau et lig2 celle du deuxième[/COLOR]
      For i = 1 To 12
        Cells(4, 22 + i).Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC3,'consumption'!R4C3:R" & lig2 & "C16,2+" & i & ",FALSE)"
        Selection.Copy
        ActiveCell.Resize(lig - 3, 1).Select
        ActiveSheet.Paste
      Next i

Mais le nombre d'article étant très grand, je me demande si il n'y a pas moyen de faire plus rapide. En effet, la recherche est effectuée 12 fois pour chaque article alors que les 12 valeurs dont j'ai besoin se trouvent bien évidemment sur la même ligne du tableau dans lequel je fais la recherche. Est il possible de récupérer les 12 valeurs en une seule opération?

Si vous connaissez une astuce qui permetrait de faire cela plus efficacement je suis preneur car cela prend plus de 15 minutes actuellement...

Ci-joint un petit fichier pour mieux visualiser

Merci beaucoup
 

Pièces jointes

  • essai.xls
    36.5 KB · Affichages: 166
  • essai.xls
    36.5 KB · Affichages: 170
  • essai.xls
    36.5 KB · Affichages: 167
Dernière édition:

CBernardT

XLDnaute Barbatruc
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Bonjour Isaros et le forum,

Je te suggère de mettre une seconde boucle afin de sélectionner les cellules successives.

Cela est du style :

For i = 1 To 12
For j = 4 to X
Cells(j, 22 + i).Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC3,'consumption'!R4C3:R" & lig2 & "C16,2+" & i & ",FALSE)"
Selection.Copy
ActiveCell.Resize(lig - 3, 1).Select
ActiveSheet.Paste
Next j
Next i

Cordialement

Bernard
 

skoobi

XLDnaute Barbatruc
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Bonjour Isaros, bienvenue sur XLD,

un fichier serait bien venu pour mieux comprendre ce qui se passe.

Edit: ouppsss, pas rafraichi, bonjour CBernardT
 

Isaros

XLDnaute Nouveau
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Bonjour CBernardT et skoobi

Est ce que cela ne revient-il pas au même d'ecrire la formule dans la première case de la colonne et d'ensuite copier coller sur toute la colonne? C'est à ça que sert:

Selection.Copy
ActiveCell.Resize(lig - 3, 1).Select
ActiveSheet.Paste

mais si je peux gagner du temps en insérant une nouvelle boucle pourquoi pas.

Cela dit, ma question n'est pas exactement sur ce point. Je me demande si il n'y a pas un autre moyen que de faire un vlookup pour chaque cellule. Car une fois la première valeur trouvée, il suffirait de copier les 11 suivantes se trouvant sur la même ligne. Au lieu de ça, pour un article donné, l'opération vlookup s'effectue 12 fois.

Ci-joint un exemple (mes tableaux comportent parfois plusieurs dizaines de miller d'articles, d'ou la recherche de gain de temps...)

Merci de votre aide

Isaros
 

Pièces jointes

  • essai.xls
    36.5 KB · Affichages: 142
  • essai.xls
    36.5 KB · Affichages: 154
  • essai.xls
    36.5 KB · Affichages: 156

Isaros

XLDnaute Nouveau
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Je me permet un petit UP avant de tomber définitivement aux oubliettes:D

Pour simplifier, je reformulerais ma question comme suit:

La fonction vlookup (recherchev) ne renvoyant qu'une seule valeur, existe-t-il un moyen pour renvoyer une plage de valeurs?

Ou éventuellement, est-il possible déterminer la position (numéro de ligne) de la cellule dans laquelle la fonction vlookup est allé chercher le résultat?
Cette info me permettrait d'aller chercher les 11 autres valeurs d'un coup.

Merci
 

skoobi

XLDnaute Barbatruc
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

Re,

Si vous connaissez une astuce qui permetrait de faire cela plus efficacement je suis preneur car cela prend plus de 15 minutes actuellement...
Revoilà ce fameux "Select" qui empoisonne tout code VBA.
Un exemple parfait qui montre son inefficacité.
Je te propose un autre code ci-joint sans l'utilisation du "Select" et "Copy" + "Paste" ("merci" l'enregistreur de macro, sic :eek:).
Tu devrais voir une différence de temps d'exécution......:cool:
 

Pièces jointes

  • Isaros valeur V1.zip
    13.2 KB · Affichages: 166

dixit

XLDnaute Impliqué
Re : Renvoyer plusieurs valeurs d'un coup avec la fonction vlookup

bonjour,
voici une proposition avec l'instruction FIND (jusqu'à ligne 65536 : je ne peux pas faire mieux avec ma version Excel 2000)
à tester sur fichier d'essai
cela m'intéresse de connaître si le temps de traitement est supportable sur grosses quantités.
bye
 

Pièces jointes

  • ED94485Isaros.zip
    18.7 KB · Affichages: 204

Discussions similaires

Statistiques des forums

Discussions
312 214
Messages
2 086 311
Membres
103 175
dernier inscrit
abcc