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

VBA Discussion :

Utiliser la valeur d'une variable issue d'un userform dans la procédure d'un module


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé de projet
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Chargé de projet

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Utiliser la valeur d'une variable issue d'un userform dans la procédure d'un module
    Bonjour,

    J’ai créé un userform dans ma macro et une variable. Cette variable va être alimentée lors du déroulement de la procédure du userform. Je voulais savoir si je pouvais stocker cette valeur dans le code, et l’utiliser dans une autre procédure d’un module du même fichier. Quand la procédure de mon userform s’arrête, la valeur n’est plus définie. Comment faire ? Merci par avance pour votre aide.

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Il faut déclarer dans un de tes modules des variables "globales" (publiques) dans la partie [general] : tu pourras les utiliser dans tous tes modules de l'application
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Option Explicit
    Public g_mon_entier As Integer, g_ma_chaine As String
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je n'aime pas les variables globales... Avoir besoin de variables globales dans son code relève presqu'à coup sûr d'un défaut de conception/architecture. Les variables globales rendent les procédures/fonctions de l'appli dépendantes de ce que le code a réalisé avant qu'elles soient appelées. On comprend vite que les tests sont très difficiles à réaliser avec des variables globales et que le moindre arrêt de code sur débogage, par exemple, vide les variables globales, rendant obligatoire le fait de relancer tout le code alors que les manipulations effectuées rendent probablement un "run global" impossible. Il faut fuir les variables globales.

    Voici comment procéder pour récupérer une valeur de userform:

    Imaginons un userform usfTest muni d'un textbox tboName et d'un bouton btnValidate. En plus il dispose d'une propriété Choice qui permettra de savoir si on a fermé le usf par clic sur le bouton. Ce userform va être appelé par une procédure qui initialise la valeur du textbox. Après fermeture du userform, s'il a été fermé par clic sur le bouton btnValidate la valeur du textbox est récupérée dans une variable avant le déchargement du userform. Ta procédure continue alors en utilisant la valeur récupérée. Le code que j'expose ici montre donc deux techniques: la récupération d'une propriété publique du userform (Choice) et la récupération de la valeur d'un contrôle du userform que l'on passe à une variable. Lorsque la valeur a été affectée à la variable, le userform peut être déchargé puisque ce dont on avait besoin a été stocké ailleurs.

    Voici le code du userform
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Explicit
     
    Public Choice As String
     
    Private Sub btnValidate_Click()
      Choice = "Validate"
      Me.Hide
    End Sub

    Et voici le code de la procédure appelante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Test()
      Dim Name As String
      Dim Choice As String
     
      With usfTest
        .tboName.Value = "Pierre"
        .Show
        If .Choice = "Validate" Then Name = .tboName.Value
      End With
      Unload usfTest
      MsgBox "Vous avez saisi le nom: " & Name
    End Sub
    "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...
    ---------------

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Je ne comprends pas pourquoi Choice est déclaré dans l'UF en public et dans le module en normal. Quelle est l'utilité de ce dernier ?

  5. #5
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    En fait la ligne Dim Choice As String dans le module standard est de trop, puisque pas utilisée par la suite. On utilise juste la propriété Choice du userform. Il faut noter au passage que la ligne Public Choice As String dans le module du userform n'en fait pas une variable publique (ou globale), mais une propriété (publique, autoimplémentée en lecture/écriture) du userform.
    "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...
    ---------------

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aube (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Service public

    Informations forums :
    Inscription : Août 2017
    Messages : 22
    Points : 14
    Points
    14
    Par défaut
    Je ne suis pas sûr de comprendre pourquoi c'est une propriété et non une variable mais ça m'a permis de comprendre ce que tu expliquais précédemment et m'incite à modifier mon code pour supprimer les variables globales que j'utilisais massivement... Merci !

Discussions similaires

  1. Réponses: 7
    Dernier message: 01/10/2017, 13h12
  2. Réponses: 9
    Dernier message: 06/06/2011, 13h39
  3. Filtrer en utilisant la valeur d'une variable
    Par Deciprog dans le forum Langage SQL
    Réponses: 6
    Dernier message: 15/04/2010, 18h38
  4. [EVAL] utiliser la valeur d'une variable à partir de son nom
    Par Julien Dufour dans le forum VBA Access
    Réponses: 0
    Dernier message: 24/04/2008, 13h15
  5. Utiliser la valeur d'une variable string
    Par vador972 dans le forum Access
    Réponses: 11
    Dernier message: 14/08/2006, 21h26

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