Boucle vba qui ouvre fichier nom variable

Résolu
Gui750 -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  4. Gui750
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Gui750
     
    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
  7. Gui750
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      De rien, au plaisir de te relire sur le forum

      Cordialement
      Patrice
      0