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 :

Impossible de récupérer une variable Public dans un UserForm


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 839
    Par défaut Impossible de récupérer une variable Public dans un UserForm
    Bonjour à tous,

    Je vous sollicite à nouveau pour une question toute bête concernant le passage d’une variable Public à un UserForm.
    Après avoir choisi un dossier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Public ChoixDossier
    Sub choix_dossier()
        Dim x As Long, ChoixDossier As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Show
            If .SelectedItems.Count > 0 Then
                ChoixDossier = .SelectedItems(1)
                MsgBox "Choix dossier : " & ChoixDossier
            End If
        End With
    End Sub
    Je veux récupérer la variable "ChoixDossier" dans mon UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
        Dim NomFich, ok As Boolean
        MsgBox "Choix dossier : " & ChoixDossier
        NomFich = Dir("" & ChoixDossier & "", vbNormal)
        Do While NomFich <> ""
            UserForm1.ListFich.AddItem Split(NomFich, ".")(1)
            UserForm1.ListBox2.AddItem LCase(NomFich)
            NomFich = Dir
        Loop
    End Sub
    La variable publique est bien déclarée au début de mon module.

    Là où ça coince c'est que cette variable n’est pas récupérée dans l’UserForm ce qui fait que je n'ai plus son contenu pour l’initialisation de celui-ci.

    Quelqu'un aurait-il une idée de la raison expliquant que la variable est vide, c’est certainement tout simple.

    Merci d’avance pour votre temps consacré et l'aide que vous pourrez m'apporter à résoudre ce petit problème.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour utiliser la variable publique, il faut évidemment que celle-ci reçoive une valeur avant d'invoquer le UserForm. Si vous lancez le formulaire sans passer par une procédure qui initialise la variable cela ne fonctionnera pas.
    Si c'est une valeur constante, vous pouvez toujours utiliser une constante publique et dans ce cas vous pourrez lancer le UserForm sans passer par une procédure.
    A mon avis c'est ce que vous avez omis de faire

    Code dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Option Explicit
    Public maVariable As String
    Sub t()
      maVariable = "Hello"
      UserForm1.Show
    End Sub
    Code du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Activate()
      Me.TextBox1.Value = maVariable
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut,
    Quand je mets la variable publique et la macro choix_dossier dans un module standard, je lance cette macro et le msgbox du userform_initialize affiche bien le dossier sélectionné.
    C'est ce que tu as fait ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 839
    Par défaut
    Bonjour M. Tulliez, ciao Franc,

    Merci pour vos réponses.

    Pour utiliser la variable publique, il faut évidemment que celle-ci reçoive une valeur avant d'invoquer le UserForm. Si vous lancez le formulaire sans passer par une procédure qui initialise la variable cela ne fonctionnera pas.
    C'est le cas dans le module standard "Sub choix_dossier()"

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 839
    Par défaut
    Bonjour Thumb down,

    Nos réponses se sont croisées.

    Mais encore ??

  6. #6
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    pourquoi une variable public?

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    je n'es pas compris pourquoi tu passe par une variable public, tu as bien une raison de travailler comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Function choix_dossier() As String
        Dim x As Long, ChoixDossier As String
        With Application.FileDialog(msoFileDialogFolderPicker)
            .Show
            If .SelectedItems.Count > 0 Then
                choix_dossier = .SelectedItems(1)
                MsgBox "Choix dossier : " & choix_dossier
            End If
        End With
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub UserForm_Initialize()
        Dim NomFich, ok As Boolean, ChoixDossier As String
        ChoixDossier = choix_dossier
        MsgBox "Choix dossier : " & ChoixDossier
        NomFich = Dir("" & ChoixDossier & "", vbNormal)
        Do While NomFich <> ""
            UserForm1.ListFich.AddItem Split(NomFich, ".")(1)
            UserForm1.ListBox2.AddItem LCase(NomFich)
            NomFich = Dir
        Loop
    End Sub

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 839
    Par défaut
    Bonsoir Thumb down,

    Tu as raison avec ta procédure ça fonctionne, mais je ne m’explique pas pourquoi cela ne fonctionne pas avec une variable "Public" ???

    Petite correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomFich = Dir("" & choix_dossier & "\", vbNormal)
    Dans la même veine comment récupérer la variable de l’item sélectionné dans la ListBox "ListFich" :
    Nom : Capture d'écran 2023-10-31 001257.jpg
Affichages : 232
Taille : 4,7 Ko
    Pour l’utiliser dans les procédures suivantes :
    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
    Public Sub Lister()
        Dim sRepPrinc As String
        Dim iDerLig As Integer
        Set moFSO = New FileSystemObject
        sRepPrinc = choix_dossier()
        If sRepPrinc = "" Then
            Exit Sub
        End If
        msRepPrinc = sRepPrinc
        'RAZ
        iDerLig = Range("A" & Rows.Count).End(xlUp).Row
        If iDerLig >= 2 Then
            Rows("2:" & iDerLig).Delete
        End If
        'liste récursive
        ListeFichiers sRepPrinc, 1
     
        MsgBox "Terminé !", vbExclamation
        Set moFSO = Nothing
        Columns("A:E").EntireColumn.AutoFit
        Range("A2").Activate
    End Sub
    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
    Private Sub ListeFichiers(psRep As String, piNiveau As Integer)
        Dim iLig As Integer
        Dim oFic As File
        Dim oRep As Folder
        'fichiers
        For Each oFic In moFSO.GetFolder(psRep).Files
            If Split(oFic, ".")(1) = "xlsm" Then 'ici pour filtrer tous les fichiers suivant choix "Liste extensions"
            iLig = Range("A" & Rows.Count).End(xlUp).Row + 1
            Range("A" & iLig).Value = psRep
            Range("B" & iLig).Value = oFic.Name
            Range("C" & iLig).Value = oFic.DateCreated
            Range("D" & iLig).Value = oFic.DateLastModified
            Range("E" & iLig).Value = oFic.Size
            End If
        Next oFic
        'sous-répertoires
        For Each oRep In moFSO.GetFolder(psRep).SubFolders
            ListeFichiers oRep.Path, piNiveau + 1
        Next oRep
    End Sub
    @+

Discussions similaires

  1. Réponses: 10
    Dernier message: 15/01/2016, 10h18
  2. Réponses: 9
    Dernier message: 23/06/2009, 10h54
  3. [PHP-JS] Récupérer une variable php dans un fichier javascript
    Par zoom61 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 03/11/2006, 11h00
  4. récupérer une variable php dans un vbscript
    Par el_butcho dans le forum VBScript
    Réponses: 3
    Dernier message: 14/09/2006, 11h39
  5. récupérer une variable javascript dans une variable java
    Par tx dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 06/07/2006, 17h55

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