Feuille variable dans un recherchev(vlookup)

guiM -  
 guiM -
Bonjour tout le monde,

J'ai un problème de syntaxe dans du code vba et je m'en remets à l'aide du forum.

Je travaille sur un classeur (classeur_de_synthése) qui synthétise plusieurs infos d'un autre classeur ayant plusieurs page (classeur_source).
J'ai une boucle qui tourne donc sur toutes les pages du classeur_source, car la procédure de prélevement d'information est la meme pour toutes les pages.

Je souhaiterai mettre dans ma boucle un recherchev (vlookup) qui fait référence à la page sur laquelle tourne la boucle. En gros je souhaiterai mettre un variable "feuille" dans mon vlookup

concrétement :

sub()
dim feuille as worksheet

Workbooks("classeur_source.xls").Activate
for each feuille in Workbook
...
Workbooks("classeur_de_synthése.xls").Activate
Range("C4").Select
'ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-2],""[classeur_source.xls]"" & feuille.name &""!R9C2:R1000C13"",11,FALSE)"
...
End

En fait c'est la syntaxe avec les " / ' / & qui me pose problème et que je n'arrive pas à rédiger.
Merci d'avance
Configuration: Windows XP Internet Explorer 6.0

11 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Je viens de tester chez moi, effectivement.

    Par contre
        feuille = "[Classeur2]Feuil 1"
        ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],'" & feuille & "'!R10C2:R18C3,2,FALSE)"
    passe bien lui...
    eric
    1
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

    Pourquoi écrire une formule ? tu cherches bien à écrire une valeur dans ta synthèse ?
    et tu écris cette formule dans la m^me cellule (C4") autant de fois qu'il y a de feuille ?

    je t'avoue que... précise clairement ce que tu veux
    0
  3. guiM
     
    Oui , je me suis mal exprimé.

    d'une part la formule que j'écris en C4 est retraitée sur plusieurs pages de mon classeur_de_synthése (une fois qu'elles est importée) et ensuite supprimée avant de passer à une autre feuille , donc en fait ; de trouver cette valeur me permets de centraliser son importation.
    d'autre part , je ne peux pas me permettre de l'importer manuellement pcq aprés j'ai un autofill sur 150 lignes. et cette manip' se retraite sur 40 pages.

    donc j'utilise une formule (un vlookup) pour rechercher automatiquement ma valeur .

    tu vois à peu prés ce que je veux dire ?
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Non
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. guiM
     
    bonjour michel,

    désolé pour ce petit we de silence,

    En ce qui concerne le cadre de la macro, à la limite c'est peu important .
    L'idée c'est que j'ai une boucle qui passe sur plusieurs feuille du classeur de base, et que je veux importer plusieurs infos de toutes ces feuilles via un vlookup sur mon classeur de synthese

    Workbooks("classeur_de_base.xls").Activate

    for each feuille in Workbook
    Workbooks("classeur_de_synthése.xls").Activate
    Range("C4").Select
    'ActiveCell.FormulaR1C1 = _
    "=VLOOKUP(RC[-2],""[classeur_source.xls]"" & feuille.name &""!R9C2:R1000C13"",11,FALSE)"
    Next

    en fait c'est que je n'arrive pas à faire , c'est écrire un la syntaxe d'un feuille variable dans mon vlookup.
    Je suis plus clair ?

    Merci d'avance
    0
  7. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir tout le monde,

    essaie avec ça :
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],'" & feuille.name & "'!R9C2:R39C13,11,FALSE)"

    lire :
    ' " & feuille.name & " '
    (avec les espaces en moins...)

    eric
    0
  8. guiM
     
    bonjour Eric,
    Merci pour ta solution,

    je pense qu'il faut que je préçise aussi le classeur ou chercher, car la cellule contenant cette formule, est dans le classeur qui synthétise les données (classeur_de_synthèse) et pas dans celui ou les feuilles doivent défiler (classeur_source.xls).

    Le chemin vers ce classeur n'est pas nécessaire car il est ouvert plus haut dans la procédure, mais le nom me semble indispensable et c'est là ma difficulté de syntaxe en fait : cumuler un nom en dur et une variable page.

    Une idée ?

    Merci d'avance.
    0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Je n'avais pas fait attention au nom du classeur...
    Comme ça ?
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],'[classeur_source.xls]" & feuille.name & "'!R9C2:R39C13,11,FALSE)"
    lire " ' !
    eric
    0
  10. guiM
     
    Re,

    Non ça ne marche pas
    Avant meme de tester la macro, quand je tape le code, j'ai un message "Errreur de compilation . Attendu :fin d'instruction".

    Je bloque , je pense que je vais passer par un select case, ac toute les pages (une trentaine quand même), c'est plus lourd mais ça fonctionne.

    Merci pour ton aide en tt cas
    Si tu as une autre idée je suis quand même preneur.
    0
  11. guiM
     
    Merci beaucoup,

    Je vais essayer d'utiliser ce système mais un peu différement pcq mon but est d'éviter d'écrire le nom de la feuille. Je ne veux travailler qu'avec la variable "feuille", sinon tôt ou tard je vais devoir écrire le nom des 35 feuilles...

    Du coup je vais tenter un truc du style :

    for each feuille in worksheets
    ...
    CLfeuille="[classeur_source.xls]feuille"
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],'" & CLfeuille & "'!R10C2:R18C3,2,FALSE)"
    Next

    Je teste dés ce soir et je t'en donne des nouvelles.

    Merci encore
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Je suppose que tu voulais dire CLfeuille="[classeur_source.xls]" & feuille.name
      C'est bien ce qui était sous-entendu dans ma réponse
      eric
      0
  12. guiM
     
    eric,

    tu cartonnes, ça marche trés bien et la macro est bien plus rapide qu'avec un select case.

    Merci beaucoup pour ton aide.
    guillaume
    0