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

11 réponses

eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
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
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Non
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
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
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
eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 282
 
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
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