Boucle vba qui ouvre fichier nom variable [Résolu/Fermé]

Signaler
-
Messages postés
8193
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
30 septembre 2020
-
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

6 réponses

Messages postés
8193
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
30 septembre 2020
1 475
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
8193
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
30 septembre 2020
1 475
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
8193
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
30 septembre 2020
1 475
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

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

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
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
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
++
Messages postés
8193
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
30 septembre 2020
1 475
De rien, au plaisir de te relire sur le forum

Cordialement
Patrice