IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir plusieurs fichiers ayant des variables en un seul clic [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Ouvrir plusieurs fichiers ayant des variables en un seul clic
    Bonjour,

    Depuis des mois, je galère à trouver une solution à mon problème. Je précise tout de suite, c'est Excel 2012 à mon boulot donc impossible d'installer des modules complémentaires.

    Voilà l'histoire

    Mon fichier va chercher des données dans différents fichiers sources. Le chemin d'accès de ces fichiers sources changent tous les mois.
    Pour rendre mon fichier final dynamique, j'utilise :
    • la formule LIEN_HYPERTEXTE avec des variables (une cellule pour le mois U1 et une autre pour l'année T2)
    Exemple : =LIEN_HYPERTEXTE("\\serveur\secteurs\Daf\40_Filiales\Reporting Mensuel\8 pages\Réel FY"&T2&"\"&TEXTE(U1;"00")&" FY"&T2&"\Reporting package SNR IBERICA "&TEXTE(U1;"00")&".FY"&T2&".xlsm";"RP Espagne")• la formule INDIRECT également avec des variables
    Exemple : =INDIRECT("'\\serveur\secteurs\Daf\Dcb\BASE FIN\Consolidation\FY"&$T$2&"\"&TEXTE($U$1;"00")&" FY"&$T$2&"\Livrables\P&L\[P&L réél brut FY "&$T$2&" "&TEXTE($U$1;"00")&".xls]"&TEXTE($U$1;"00")&"'!$"&B$1&"$"&$S4&"";VRAI)B1 étant une référence pour la colonne et S4 pour la ligne dans les fichiers source

    Sans module complémentaire, je n'ai pas d'autre choix que d'ouvrir chaque fichier source (LIEN_HYPERTEXTE) pour que mes formules INDIRECT fonctionnent. Dans le cas contraire, j'obtiens un beau #REF!

    Ayant une bonne dizaine de fichiers source à ouvrir, je voudrais rassembler tous les LIEN_HYPERTEXTE dans un seul bouton/macro/code. Un clic et toutes les sources s'ouvrent.

    J'espère avoir été clair, j'ajoute un fichier joint pour l'exemple.
    Un grand merci par avance !
    Fichiers attachés Fichiers attachés
    Dernière modification par LittleWhite ; 19/02/2017 à 18h14. Motif: Balise CODE

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 70
    Par défaut Proposition
    Bonjour primokorn.

    Je cherche mais en attendant, en imaginant que tous les fichiers soient dans le même dossier, je peux proposer cette alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim fd as FileDialog, chemin as Variant, fichier as string
    Set fd = Application.FileDialog(msoFileDialogFolderPicker) 'Crée un objet boite de dialogue (choix de dossier)
    With fd
        If .Show = -1 Then 'Affiche la boite de dialogue et retourne l'action de l'utilisateur
        chemin = fd.SelectedItems(1) & "\" 'La variable chemin prend pour valeur le chemin d'accès avec le nom du dossier sélectionné
        End If
    End With
    Set fd = Nothing 
    fichier = Dir(chemin & "*") 'définit le fichier (ici tous les fichiers du dossier sélectionné)
    Do While fichier <> "" ' Boucle while qui s'exécute tant qu'il y a des fichiers dans le répertoire
        Set wb = Workbooks.Open(chemin & fichier)
        Set wb = Nothing
        fichier = Dir
    Loop
    Dans ce cas, le chemin d'accès est récupéré par la boite de dialogue mais on peut très bien imaginer utiliser directement les valeurs en U1 et T2 pour alimenter la variable chemin.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Tout d'abord, merci pour ton aide.
    Je maîtrise pas trop mal les formules mais je suis une bille avec VBA, alors quelques questions :

    • Je le mets où le code ?
    • Le chemin d'accès du dossier qui contient les fichiers, je le mentionne entre les deux guillemets ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = fd.SelectedItems(1) & "\"
    • Ça me fera un test mais mes fichiers sources ne sont pas forcément tous dans les mêmes dossiers.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 70
    Par défaut
    Pour le code, il faut faire ALT + F11, insérer un nouveau module et coller tout ça dedans.
    le code permet d'ouvrir une fenêtre qui demande de sélectionner le dossier contenant les fichiers, c'est cette information que l'on récupère par "fd.SelectedItems(1)"
    Avec fichier = Dir(chemin & "*") on obtient le chemin d'accès complet "*" remplaçant n'importe quel fichier.
    Pour spécifier un chemin d'accès, il faudrait passer outre la boite de dialogue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim fd as FileDialog, chemin as Variant, fichier as string, mois as string, annee as string
    mois = Format(cells(1,21),"00") ' Cellule U1
    annee = cells(2,20) ' Cellule T2
    chemin = "\\serveur\secteurs\Daf\40_Filiales\Reporting Mensuel\8 pages\Réel FY" & annee & "\" & mois & " FY" & annee & "\Reporting package SNR IBERICA " & mois & ".FY" & annee & ".xlsm"
    Set wb = Workbooks.Open(chemin)
    Set wb = Nothing
    Avec ce code, on ouvre un seul fichier, il faut donc répéter l'opération pour tous les fichiers mais dans le principe ça devrait ressembler à ça.
    J'ai pas testé, il y a probablement des erreurs.

  5. #5
    Invité
    Invité(e)
    Par défaut
    J'ai fini par réussir mais partiellement. Ce code VBA me permet d'ouvrir tous mes fichiers en une seule fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub open_links()
    '
    ' open_links Macro
    '
     
    '
    ' Ouverture P&L brut
        Range("A1").Select
        Workbooks.Open Filename:= _
            "\\serveur\Daf\Dcb\BASE FIN\Consolidation\FY" & Right(Range("T2"), 2) & "\" & Right(Range("U1"), 2) & " FY" & Right(Range("T2"), 2) & "\Livrables\P&L\P&L réél brut FY " & Right(Range("T2"), 2) & " " & Right(Range("U1"), 2) & ".xls" _
            , UpdateLinks:=0
        ActiveWindow.Visible = False
        Windows("P&L réél brut FY " & Right(Range("T2"), 2) & " " & Right(Range("U1"), 2) & ".xls").Visible = True
        Windows("Septembre.xlsm").Activate
    ' Ouverture RP Y
        Workbooks.Open Filename:= _
            "\\serveur\Daf\40_Filiales\Reporting Mensuel\8 pages\Réel FY" & Right(Range("T2"), 2) & "\" & Right(Range("U1"), 2) & " FY" & Right(Range("T2"), 2) & "\Reporting package filialeX " & Right(Range("U1"), 2) & ".FY" & Right(Range("T2"), 2) & ".xls" _
            , UpdateLinks:=0
        ActiveWindow.Visible = False
        Windows("Reporting package filialeX " & Right(Range("U1"), 2) & ".FY" & Right(Range("T2"), 2) & ".xls").Visible = True
        Windows("Septembre.xlsm").Activate
    ' etc avec les autres fichiers
    ' T2 c'est l'année et U1 le mois
    End Sub
    Ce code ouvre les fichiers et les laisse ouverts. On peut les ouvrir tout en les masquant en supprimant les 2 dernières lignes de chaque partie soit Windows("..........").Visible = True et Windows ("......").Activate

    En gardant ce code, je voudrais que la ligne Windows(".........").Activate soit dynamique.
    Actuellement, mon fichier de travail c'est September.xlsm mais ça sera Octobre.xlsm le mois prochain.
    Si les fichiers que j'ouvre en automatique sont visibles, alors la macro doit repasser obligatoirement par mon fichier de travail pour pouvoir ouvrir les fichiers restants.

    Merci.

  6. #6
    Membre éprouvé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Septembre 2016
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2016
    Messages : 70
    Par défaut
    Tu peux utiliser la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonFichier = ActiveWorkbook.Name
    et pour y revenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(MonFichier).Activate

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] Ouvrir plusieurs fichiers et les mettres en variables
    Par Gaaetan dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/07/2012, 11h33
  2. [HTML] Ouvrir plusieurs fichiers pdf dans une page
    Par PrinceMaster77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 05/05/2006, 09h34
  3. [VBA-E]Ouvrir un fichier ayant un mot de passe
    Par Friko dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/04/2006, 08h45
  4. Extraire d'un fichier.h des variables static ?
    Par Battosaiii dans le forum C
    Réponses: 1
    Dernier message: 14/03/2006, 15h43
  5. [VB6] [Fichier] Enregistrer des variables de structure
    Par de.bo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 07/10/2002, 11h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo