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 :

Renvoi à une macro des valeurs saisies dans un userform


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 20
    Points
    20
    Par défaut Renvoi à une macro des valeurs saisies dans un userform
    Bonjour
    J'ai une macro VBA qui fait un certain nombre de choses. J'ai construit un formulaire Userform pour demander à l'utilisateur des valeurs (cases à cocher principalement). J'ai bien trouvé comment appeler le userform (avec Show), initialiser les valeurs, en revanche je ne sais pas comment pour envoyer les valeurs saisies (Valeur True ou False de mes cases à cocher) à ma macro d'origine qui a appelé le formulaire pour continuer le traitement
    D'avance merci pour votre aide
    Cordialement

  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
    12 910
    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 : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Petit exemple rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Main()
     With UserForm1
     .Show
      Feuil2.Range("A2") = .CheckBox1
      Feuil2.Range("A3") = .CheckBox2
      Feuil2.Range("A4") = .CheckBox3
      Feuil2.Range("A5") = .CheckBox4
     End With
    End Sub

  3. #3
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Si tu masques ton userform :

    Les valeurs des contrôles sont toujours accessibles. Sinon, si tu le fermes (avec "UnLoad"), il faut définir pour chaque contrôle une variable publique, de préférence dans un module standard.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    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 : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour Daniel,
    C'est ce que je pensais également mais avec la procédure que j'ai proposée cela fonctionne parfaitement et sans recharger le formulaire.
    Je ferme bien le formulaire par Unload Me

  5. #5
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour Philippe,

    Non modal alors, le userform ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    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 : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour Daniel,
    Modal ou Non modal, c'est la même chose.
    Par contre, en voulant refaire le test j'ai maintenant le message "Mémoire insuffisante" alors que lors de mon premier test tout était parfait.
    Même avec Me.Hide . Je dois avoir un soucis avec mon PC (ou plutôt avec ma machine virtuelle)

    [EDIT]
    Après redémarrage de ma machine virtuelle, plus de soucis mais évidemment je ne sais pas si le problème de mémoire est provoqué par cette procédure.
    En tout les cas, le formulaire après l'instruction Show ne déclenche pas une procédure événementielle Activate ou Initialize

    Le classeur contient 3 feuilles, un UserForm avec 4 contrôles CheckBox nommés CheckBox1, ...2, ...3, ...4, un contrôle CommandButton1
    Les codes du UseForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Private Sub CommandButton1_Click()
     Unload Me
    End Sub
    Private Sub UserForm_Activate()
     MsgBox "Activate"
    End Sub
    Private Sub UserForm_Initialize()
     MsgBox "Initialize"
    End Sub
    Les procédures du module1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Main()
     With UserForm1
     .Show
     '.Show 1 ' Les 2 cas de figures ont été testés
      Feuil2.Range("A2") = .CheckBox1
      Feuil2.Range("A3") = .CheckBox2
      Feuil2.Range("A4") = .CheckBox3
      Feuil2.Range("A5") = .CheckBox4
     End With
    End Sub
    .

  7. #7
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Merci pour la réponse
    Ma macro fonctionne bien maintenant avec ce code.
    Pour compléter, je souhaiterais avoir cet échange entre ma macro principale et le userform mais sans stocker de valeurs (les valeurs saisies dans le userform) dans la feuille Excel
    Question : Ex : Si je clique sur "Annuler" sur le userform, je voudrais que cela arrête ma macro principale après l'instruction monuserform.show ou si je clique sur "Ok" dans mon userform je voudrai passer une valeur saisie dans le userform vers la macro (mais sans stocker dans la feuille)
    A défaut je me contenterai de stocker les valeurs
    Dans tous les cas merci pour l'aide apportée
    Cordialement

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 910
    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 : 12 910
    Points : 28 889
    Points
    28 889
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour passer la valeur provenant d'un contrôle du UserForm comme argument à une procédure Sub ou Function, tu remplaces Feuil2.Range("A2") = de cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil2.Range("A2") = .CheckBox1
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NomProcedure .CheckBox1
    Ceci dit, ne serait-ce pas plus simple de travailler avec des variables globales ?

    [EDIT]
    Exemple pour sortir de la procédure si on clique sur le bouton (ControlButton : cmdCancel)
    Procédure Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Option Explicit
    Public Flag As Boolean
    Sub Main()
     With UserForm1
     .Show
      If Not (Flag) Then Exit Sub
      Feuil1.Range("A1") = .CheckBox1: Feuil1.Range("A2") = .CheckBox2
      Feuil1.Range("A3") = .CheckBox3: Feuil1.Range("A4") = .CheckBox4
     End With
    End Sub
    Procédures dans le formulaire nommé UserForm1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub cmdCancel_Click()
     Flag = False
     Unload Me
    End Sub
    Private Sub cmdOK_Click()
     Flag = True
     Unload Me
    End Sub

  9. #9
    Membre à l'essai
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Directeur commercial
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 22
    Points : 20
    Points
    20
    Par défaut
    Super merci. C'est exactement ce que je cherchais.
    Cordialement

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

Discussions similaires

  1. Stocker des valeurs saisies dans un JTextArea
    Par Erwan7374 dans le forum Composants
    Réponses: 1
    Dernier message: 12/05/2012, 14h55
  2. Réponses: 3
    Dernier message: 06/02/2011, 11h14
  3. Réponses: 4
    Dernier message: 16/03/2010, 17h28
  4. Réponses: 7
    Dernier message: 07/05/2009, 13h09
  5. Filtrage des valeurs saisies dans un JOptionPane
    Par Shurka dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 11/08/2007, 15h09

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