Boucle vba qui ouvre fichier nom variable

Résolu/Fermé
Gui750 - 28 mars 2011 à 11:35
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 29 mars 2011 à 16:04
Bonjour,

J'ai un fichier qui doit prélever des informations dans plusieurs autres fichiers excel, et les mettre dans plusieurs page (une par fichier).

Mon fichier "mère" est composé de 15 onglets, et doit ouvrir 15 fichiers qui sont tous dans un même répertoire.
Pour chaque onglet, il doit prélever des informations dans le fichier portant le nom de la cellule A1 du-dit onglet.


J'imagine que le code devrait ressembler à ça :



Sub_boucle()

Windows("Classeur mère.xls").Activate

For Each feuille In Worksheets
feuille.Activate
Range("A1").Select

Workbooks.Open Filename:= "Z:\"&selection.value".xls"
[..manip de recherche de valeur.]
Next feuille
C'est sur cette partie variable du nom que porte ma question



Merci beaucoup,
Guillaume
A voir également:

6 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 28/03/2011 à 17:38
Ce serait plutôt quelque chose comme :

For Each feuille In Worksheets 

  Workbooks.Open Filename:= "Z:\" & Feuille.Range("A1").value & ".xls" 

Next feuille  

A condition que la fichier soit dans la racine de Z: (car il faut le nom complet pour ouvrir le fichier)
Cordialement
Patrice
1
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
Modifié par Patrice33740 le 29/03/2011 à 10:58
Bonjour,

1) Je ne t'ai pas proposé d'utiliser selection.value car il n'est pas nécessaire de sélectionner quoi que ce soit pour faire ce que tu veux, par contre cela pourrait être une cause d'erreur.

2) «je souhaiterai fermer la feuille», on ne peut pas fermer une feuille, je suppose que tu veux fermer le classeur qui contient la macro sans l'enregistrer :

ThisWorkbook.Saved = True
ThisWorkbook.Close


Cordialement
Patrice
1
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
29 mars 2011 à 12:03
Re,

Je ne vois pas trop ce que tu veux.
En VBA, il faut utiliser select avec parcimonie, une bonne méthode consiste à utiliser des objets.
Tant que je suis dans les conseils, une excellente habitude consiste à commencer chaque module par Option Explicit, ce qui oblige à déclarer chaque variable utilisée.

Si tu veux travailler sur le fichier qui contient la macro, c'est l'objet ThisWorkbook.

Pour travailler sur le classeur que tu viens d'ouvrir :

Au début de la procédure, déclare :
Dim wbk As Workbook
Puis affecte le classeur ouvert à l'objet wbk avec :
Set wbk = Workbooks.Open(Filename:=NomCompletDuFichier)
tu pourras ensuite utiliser l'objet wbk pour travailler dessus, par exemple :
wbk.Worksheets(1).Range("A1").Value = "Test"
(pas besoin d'utiliser select)
1
Merci Patrice !

Je me suis rendu compte que

Workbooks.Open Filename:= "Z:\" & selection.value & ".xls"
fonctionne aussi.

Par contre j'ai une deuxième question dans la foulée.
A la fin de ma boucle je souhaiterai fermer la feuille en question et la procédure :
Range'("A1" ).select
Windows(" & Selection.Value & " ).Close
ne fonctionne pas.

tu aurais une idée par hasard ?
Merci
Guillaume
0

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

Posez votre question
Merci bcp,

Oui effectivement select n'est pas indispensable, je l'ai enlevé. J'avais bricollé ça pour que ça fonctionne mais je n'ai pas un gros niveau en vba.

En ce qui concerne ma seconde question, je m'exprime mal. en effet c'est le classeur que je veux fermer.
La ou je bloque en fait, c'est pour le selectionner. Dans le cadre de ma boucle, je passe sur un autre classeur.

Windows("Classeur mère.xls").Activate
et je souhaiterai "repasser" sur le classeur avec nom variable pour pouvoir utiliser la commande pour pouvoir ensuite mettre le code que tu me proposes.

Tu vois ce que je veux dire ?

Merci
0
OK,

merci beaucoup,

j'ai utilisé le Set wbk pour résoudre mon petit problème.

Merci pour ton aide en tout cas, tu es particulièrement pédagogue.

thx
++
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
29 mars 2011 à 16:04
De rien, au plaisir de te relire sur le forum

Cordialement
Patrice
0