Feuille variable dans un recherchev(vlookup)

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. Contributeur
    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
    1. Contributeur
      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
      1. 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
        1. 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
          1. Contributeur
            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
            1. 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
              1. Contributeur
                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
                1. 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
                  1. 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. Contributeur
                      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
                  2. 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