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 :

Passage de paramètres entre Userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Par défaut Passage de paramètres entre Userform
    Bonjour,
    Je suis nouveau en VBA, et je cherche à faire un classeur pour gérer un compte via des Userform. Pour se faire, j'ai besoin de récupérer des paramètres d'une Userform (choix de l'utilisateur, remplissage de TextBox) pour les utiliser dans une autre (notamment pour activer ou non un champ).
    Après moults recherches, j'en suis au même point, nulle part...

    Voici le code de la Userform dont je veux récupérer un paramètre.
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     Public strModePaiement As String
     
     Private Sub CB_Enr_ope_Ok_Click()
         Enr_ope.Hide
    'Je dois envoyer ici strModePaiement (ou de quoi identifier le choix) à la Userform Ope_donnees
         Ope_donnees.Show
     End Sub
     
     Private Sub OB_Enr_ope_CB_Click()
         strModePaiement = OB_Enr_ope_CB.Name
         CB_Enr_ope_Ok.Enabled = True
     End Sub
     
     Private Sub OB_Enr_ope_Vir_Click()
         strModePaiement = OB_Enr_ope_Vir.Name
         CB_Enr_ope_Ok.Enabled = True
     End Sub
     
     Private Sub OB_Enr_ope_Chq_Click()
         strModePaiement = OB_Enr_ope_Chq.Name
         CB_Enr_ope_Ok.Enabled = True
     End Sub
     
     Private Sub OB_Enr_ope_Esp_Click()
         strModePaiement = OB_Enr_ope_Esp.Name
         CB_Enr_ope_Ok.Enabled = True
     End Sub
     
     Private Sub Userform_Activate()
         CBx_Enr_ope_Type_ope.AddItem "Type d'opération"
         CBx_Enr_ope_Type_ope.AddItem "Débit immédiat"
         CBx_Enr_ope_Type_ope.AddItem "Débit différé"
         CBx_Enr_ope_Type_ope.AddItem "Débit programmé"
         CBx_Enr_ope_Type_ope.AddItem "Crédit"
         CBx_Enr_ope_Type_ope.Text = CBx_Enr_ope_Type_ope.List(0)
     End Sub
     
     Private Sub CB_Enr_ope_Annul_Click()
         Enr_ope.Hide
         Demande_ppale.Show
     End Sub
     
     Private Sub CBx_Enr_ope_Type_ope_Change()
         CB_Enr_ope_Ok.Enabled = False
         OB_Enr_ope_CB.Value = 0
         OB_Enr_ope_Vir.Value = 0
         OB_Enr_ope_Chq.Value = 0
         OB_Enr_ope_Esp.Value = 0
         subDisponibiliteBoutons
     End Sub
     
     Private Sub subDisponibiliteBoutons()
         Select Case CBx_Enr_ope_Type_ope
             Case "Type d'opération"
                 OB_Enr_ope_CB.Enabled = False
                 OB_Enr_ope_Vir.Enabled = False
                 OB_Enr_ope_Chq.Enabled = False
                 OB_Enr_ope_Esp.Enabled = False
             Case "Débit immédiat"
                 OB_Enr_ope_CB.Enabled = True
                 OB_Enr_ope_Vir.Enabled = True
                 OB_Enr_ope_Chq.Enabled = True
                 OB_Enr_ope_Esp.Enabled = False
             Case "Débit différé"
                 OB_Enr_ope_CB.Enabled = True
                 OB_Enr_ope_Vir.Enabled = False
                 OB_Enr_ope_Chq.Enabled = False
                 OB_Enr_ope_Esp.Enabled = False
             Case "Débit programmé"
                 OB_Enr_ope_CB.Enabled = False
                 OB_Enr_ope_Vir.Enabled = True
                 OB_Enr_ope_Chq.Enabled = False
                 OB_Enr_ope_Esp.Enabled = False
             Case "Crédit"
                 OB_Enr_ope_CB.Enabled = False
                 OB_Enr_ope_Vir.Enabled = True
                 OB_Enr_ope_Chq.Enabled = True
                 OB_Enr_ope_Esp.Enabled = True
         End Select
     End Sub
    Maintenant, le code de la Userform Ope_donnees. Le paramètre récupéré doit me permettre de savoir si je peux activer ou non le champs TB_Ope_donnees_Chq
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     Private Sub Userform_Activate()
         If strModePaiement = "OB_Enr_ope_Chq" Then
             TB_Ope_donnees_Chq.Enabled = True
         End If
     End Sub
     
     Private Sub TB_Ope_donnees_Montant_Change()
         If IsNumeric(TB_Ope_donnees_Montant.Value) And TB_Ope_donnees_Montant.Value >= 0 Then
             subOKDisponible
         Else
             TB_Ope_donnees_Montant.Value = ""
         End If
     End Sub
     
     Private Sub TB_Ope_donnees_Motif_Change()
         subOKDisponible
     End Sub
     
     Private Sub TB_Ope_donnees_Jour_Change()
         If IsNumeric(TB_Ope_donnees_Jour.Value) And (TB_Ope_donnees_Jour.Value > 0 And TB_Ope_donnees_Jour.Value < 32) Then
             subOKDisponible
         Else
             TB_Ope_donnees_Jour.Value = ""
         End If
     End Sub
     
     Private Sub TB_Ope_donnees_Mois_Change()
         If IsNumeric(TB_Ope_donnees_Mois.Value) And (TB_Ope_donnees_Mois.Value > 0 And TB_Ope_donnees_Mois.Value < 13) Then
             subOKDisponible
         Else
             TB_Ope_donnees_Mois.Value = ""
         End If
     End Sub
     
     Private Sub TB_Ope_donnees_An_Change()
         If IsNumeric(TB_Ope_donnees_An.Value) Then
             subOKDisponible
         Else
             TB_Ope_donnees_An.Value = ""
         End If
     End Sub
     
     Private Sub TB_Ope_donnees_Chq_Change()
         If IsNumeric(TB_Ope_donnees_Chq.Value) Then
             subOKDisponible
         Else
             TB_Ope_donnees_Chq.Value = ""
         End If
     End Sub
    Je cherche aussi à comprendre la différence entre .Initialize et .Activate d'une Userform
    Si vous avez des suggestions d'amélioration, n'hésitez surtout pas

    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    une suggestion
    si tu veux recuperer la valeur d un textbox d un userform,
    passe cette valeur a une variable declaré public dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    dans le module 1
    public var
     
    dans le userform1
    var = textbox1.value
     
    dans le userform2
    if var = ...............

  3. #3
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Par défaut
    J'ai bien mis dans le Module1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public strModePaiement As String
    Dans le Userform1 (Enr_ope)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CB_Enr_ope_Ok_Click()
       strModePaiement = "toto"
       Enr_ope.Hide
       Ope_donnees.Show
    End Sub
    Dans le Userform2 (Ope_donnees)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Userform_Activate()
       MsgBox strModePaiement
    End Sub
    Ca ne marche pas : le MsgBox n'affiche rien. Dois-je initialiser autrement les Userform ?

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    Ca ne marche pas : le MsgBox n'affiche rien. Dois-je initialiser autrement les Userform ?
    chez moi ca marche!!!!

  5. #5
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonsoir,

    Plusieurs remarques :

    Une variable Public doit être déclarée dans un module standard, pas dans un module d’un UserForm.

    Tu as effectivement ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public strModePaiement as String
    dans le module 1, mais l’as-tu AUSSI supprimé du module du UserForm ? Sinon tu as 2 variables portant le même nom et dans le UserForm, c’est celle qui est définie localement qui est utilisée, auquel cas la variable homonyme Public ne reçoit aucune valeur, et reste donc un texte vide.

    Par ailleurs, une variable n’est pas forcément nécessaire : tu peux directement alimenter un contrôle du second UserForm à partir d’une valeur renseignée sur le premier UserForm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CB_Enr_ope_Ok_Click()
         Ope_donnees.TextBox1 = TextBox1
         Me.Hide
         Ope_donnees.Show
     End Sub
    Les noms de contrôles sont à adapter, bien sûr. Ici le TextBox1 du UserForm Ope_donnees récupère la valeur du TextBox1 du UserForm Enr_ope.

    La différence entre Activate et Initialize est que Activate est déclenché quand le UserForm correspondant est affiché, tandis que Initialize l’est quand le UserForm est chargé en mémoire.

    Ici Initialize est déclenché au moment où on renseigne un de ses contrôles :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         Ope_donnees.TextBox1 = TextBox1
    tandis que Activate survient lors du :

    L’autre différence est que Initialize ne se déclenche qu’une fois, jusqu’au Unload, tandis que peut survenir plusieurs fois, si on utilise Show et Hide pour afficher alternativement 2 UserForms.

    Un dernier conseil : utilise des noms plus simples, ton code sera plus lisible : BOK (B comme bouton) est + clair que CB_Enr_ope_Ok. Sur le même principe je nomme tous mes UserForms D (comme dialogue), suivi d’un nom (DSaisie, DMAJ, ...)

  6. #6
    Membre averti
    Inscrit en
    Juin 2007
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 31
    Par défaut
    Merci beaucoup Bigalo ! Je ne savais pas qu'on pouvais interagir entre les Userform de cette façon, j'ai donc pu faire ce que je voulais

  7. #7
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    De rien On peut faire beaucoup de choses en VBA

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

Discussions similaires

  1. [Forms 6i] Passage de paramètres entre forms
    Par tmcgrady dans le forum Forms
    Réponses: 8
    Dernier message: 18/03/2006, 03h04
  2. Passage de paramètres entre page
    Par philou8 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/01/2006, 18h54
  3. passage de paramètre entre formulaire et état
    Par thufir hawat dans le forum IHM
    Réponses: 13
    Dernier message: 21/12/2005, 22h32
  4. [jsp][servlet]passage de paramètre entre deux frames
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 29/06/2004, 11h14
  5. [Forms]Passage de paramètre entre Forms et Reports
    Par jack554 dans le forum Reports
    Réponses: 4
    Dernier message: 30/03/2004, 13h58

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