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 :

Récupérer le nom fichier sélectionné par inputbox [XL-365]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut Récupérer le nom fichier sélectionné par inputbox
    Bonjour,

    Les administrateurs doivent ouvrir une liste de fichiers, par des liens hypertextes, à partir d'un fichier mère qui contient toutes les macros (un par un), les déverrouiller (toutes les feuilles) et faire leur traitement.

    Une fois ouvert, je voudrais automatiser le déverrouillage du classeur.
    J'ai écrits une macro qui fonctionne, j'ai mis un bouton dans le fichier mère, mais il me manque le lien entre le fichier mère et le fichier de destination.
    Je pensais utiliser un inputbox pour demander à l'administrateur de sélectionner une cellule dans le fichier de destination...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set DeV = Application.InputBox(prompt:="Cliquer sur le fichier de l'agence à déverrouiller", _ Type:=8)
    Mais après je ne sais pas comment récupérer le nom du fichier qui apparait dans l'inputbox au moment de la sélection, avant les références de la cellule ?

    Est-ce que qq'un peut m'aider, svp ?
    Merci

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Il existe quelque chose de bien plus simple pour l'ouverture d'un fichier, le "application.FileDialog.

    https://docs.microsoft.com/en-us/off...ion.filedialog

    Bàt

    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
    Sub UseFileDialogOpen()
     
        Dim lngCount As Long
     
        ' Open the file dialog
        With Application.FileDialog(msoFileDialogOpen)
            .AllowMultiSelect = True
            .Show
     
            ' Display paths of each file selected
            For lngCount = 1 To .SelectedItems.Count
                MsgBox .SelectedItems(lngCount)
            Next lngCount
     
        End With
     
    End Sub

  3. #3
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonsoir mfoxy,

    Merci pour ta réponse, mais le répertoire où se trouve les fichiers à ouvrir est un répertoire caché, donc les administrateurs ne peuvent pas le chercher et ce n'est pas plus simple

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par mouftie Voir le message
    Mais après je ne sais pas comment récupérer le nom du fichier qui apparait dans l'inputbox au moment de la sélection, avant les références de la cellule ?
    C'est très simple: c'est une référence de cellule. Elle doit donc être traité comme telle.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open("C:\MonChemin\" & DeV.Text)
    Cela dit, ne sachant pas exactement ce que contient ta cellule, je ne peux pas garantir que cette réponse est fiable.
    Teste-la pour confirmer.

  5. #5
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonsoir Menhir,
    Merci pour ta réponse.

    Voilà le code
    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
    Sub DeVerrAgc()
    'Déprotection de toutes les feuilles d'1 fichier 
    Dim NbFl As Integer, DeV As Range, WbDev As Variant
     
    Set DeV = Application.InputBox(prompt:="Cliquer sur le fichier de l'agence à déverrouiller", Type:=8)
        If DeV Is Nothing Then Exit Sub
    WbDev = DeV.Text
    NbFl = ActiveWorkbook.Sheets.Count
    WbDev.Activate
    For i = 1 To NbFl
        Worksheets(i).Unprotect Password:="MdPV"
        Worksheets(i).Range("A1").Interior.ColorIndex = 43   'Couleur verte
    Next i  '***** FIN Protection
    'Si nécessaire, on masque la feuille Données.
    If Sheets("Données").Visible = False Then Sheets("Données").Visible = True
    End Sub
    Quand l'administrateur clique sur une cellule du classeur à déverrouiller, il y a une info du genre
    '[Rd AGENCE 321.xlsm]SAISIES'!$M$2
    et moi, je voudrais récupérer Rd AGENCE 321.xlsm

    Avec WbDev = DeV.Text, j'ai récupéré Null...

    Merci pour ton aide

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par mouftie Voir le message
    Quand l'administrateur clique sur une cellule du classeur à déverrouiller, il y a une info du genre
    '[Rd AGENCE 321.xlsm]SAISIES'!$M$2

    et moi, je voudrais récupérer Rd AGENCE 321.xlsm

    Avec WbDev = DeV.Text, j'ai récupéré Null...
    A force de donner tes infos au goute-à-goute, tu fais perdre du temps à tout le monde et tu vas finir par lasser...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbDev = Mid(Dev.Address(External:=True), 2, Instr(Dev.Address(External:=true),"]") - 2)

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut

    But du jeu: Récupérer les positions des crochets, puis extraire ce qu'il y a entre les deux...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      Dim Value As String
      Dim Pos1 As Long, Pos2 As Long
     
      Value = "'[Rd AGENCE 321.xlsm]SAISIES'!$M$2 "
      Pos1 = InStr(1, Value, "[")
      Pos2 = InStr(1, Value, "]")
      Value = Mid(Value, Pos1 + 1, Pos2 - Pos1 - 1)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour M Fauconnier,

    Merci pour votre réponse, mais mon problème c'est de récupérer le nom de l'agence qui est inscrit dans la fenêtre de l'InputBox, avec les coordonnées de la cellule qui a été sélectionnée.

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je t'ai donné une réponse générique, avec la chaîne que tu as donnée en exemple. Tu dois bien entendu remplacer la valeur de la chaine par la valeur de l'inputbox puis utiliser le code que j'ai donné pour récupérer la position des crochets et extraire ce qu'il y a entre.
    Si ce n'est pas ce que tu souhaites, c'est que je n'ai pas compris ta question => pourras-tu alors la reformuler?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre éclairé
    Femme Profil pro
    reconversion en cours
    Inscrit en
    Juillet 2009
    Messages
    633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : reconversion en cours
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2009
    Messages : 633
    Par défaut
    Bonjour à vous et merci pour vos réponses.

    Menhir, je croyais avoir expliquer ce que je voulais dans mon premier post, mais je n'ai pas été suffisamment claire, à vous lire. Je vous prie de m'en excuser. ce qui me manquait, c'était effectivement :
    Address(External:=True)
    Mais après je ne sais pas comment récupérer le nom du fichier qui apparait dans l'inputbox au moment de la sélection, avant les références de la cellule ?
    peut-être aurais-je du préciser la fenêtre de l'InputBox...

    Du coup, voici le code complet, si ça peut servir à qq'1
    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
    Sub DeVerrAgc()
    'Déprotection de toutes les feuilles d'1 fichier agence
    Dim NbFl As Integer, DeV As Range, WbDev As String
     
     Set DeV = Application.InputBox(prompt:="Cliquer sur le fichier de l'agence à déverrouiller", Type:=8)
        If DeV Is Nothing Then Exit Sub
    WbDev = DeV.Address(External:=True)
     
    'WbDev = Mid(DeV.Address(External:=True), 2, InStr(DeV.Address(External:=True), "]") - 2)
    WbDev = Mid(DeV.Address(External:=True), 3, InStr(DeV.Address(External:=True), "]") - 3)
    With Workbooks(WbDev)
        NbFl = .Sheets.Count
        .Activate
        For i = 1 To NbFl
            Worksheets(i).Unprotect Password:="SuperA"
            Worksheets(i).Range("A1").Interior.ColorIndex = 43   'Couleur verte
        Next i  '***** FIN Protection
        'Si nécessaire, on affiche la feuille Données.
        If .Sheets("Données").Visible = False Then .Sheets("Données").Visible = True
    End With
    End Sub
    Merci à tous pour le temps passé

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

Discussions similaires

  1. Afficher fichier sélectionné par un select
    Par laurentSc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/09/2016, 19h01
  2. [Python 3.X] Accès à un nom de fichier sélectionné par askopenfile
    Par P.G dans le forum Général Python
    Réponses: 2
    Dernier message: 19/06/2015, 23h48
  3. [XL-2010] Récupérer nom fichier sélectionné
    Par Blaiz58 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 05/11/2014, 02h10
  4. Réponses: 3
    Dernier message: 08/11/2011, 16h32
  5. Réponses: 19
    Dernier message: 05/11/2007, 12h11

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