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 :

[VBA-E]Userform et transfert de variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut [VBA-E]Userform et transfert de variable
    bonjour,

    j'ai une question qui va surement être bête mais je trouve pas la soluce pour VBA Excel.

    En fait j'ai une macro Excel et je voudrais avoir un bouton d'activation. Quand je clic sur ce bouton un MsgBox s'ouvre et m'invite à choisir dans une liste déroulante (ça sera les 12 mois de l'année) et après OK et je récupère le choix dans mon algo pour faire ma petite cuisine...

    alors je vois pas comment utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox(prompt[, buttons] [, title] [, helpfile, context])
    Je sais pas comment paramétrer ça et je trouve pas d'astuce. Je me demande même si c'est comme ça qu'il faut faire

    merci pour votre aide

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ce qu'il te faut, si j'ai bien compris, c'est un listbox dans lequel placer tes mois de l'année
    Puis dans l'événement Listbox1_keyup de ton listbox, récupérer l'index.
    Tu as des exemples plein le forum, tu vas dans la recherche avancée sur le forum, tu sélectionnes le forum visual Basic, tu mets rechercher "ListBox" et tu trouveras ton bonheur. Promis !

    Bon courage

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Comme je suis vachement gentil ce soir, voilà pour toi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Année = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
        ListBox1.List() = Année
    et pour récupérer ta sélection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ListBox1_Click()
     MsgBox ListBox1.List(ListBox1.ListIndex)
    End Sub
    Bonne soirée

  4. #4
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    tout simplement fantastique

  5. #5
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    en fait ça me fait une erreur de type "Objet requis", erreur 424 sur la listbox

    mais je vais chercher

  6. #6
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    peut-être aurais -tu oublié de mettre ta list-box où celle-ci ne s'apelle peut-être pas "listbox 1"

  7. #7
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Salut

    la fonction MsgBox n'ouvre qu'un simple boîte de message permettant d'informer l'utilisateur d'une situation donnée et /ou de lui faire choisir entre continuer et annuler ou d'autres options paramétrable dans la fonction.

    Pour faire afficher une boîte de dialogue affichant une liste de choix, tu devra créer un UserForm et y mettre ta liste. Affiche l'éditeur VBA et clique sur le menu Insertion > UserForm. Pour la suite des choses, je te laisse aller à la découverte et dis nous où tu bloques.

  8. #8
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    C'est vrai que ça rend mieux.

    Mais j'arrive même pas à créer un bouton dans mon fichier Excel. Je voudrais qu'une case devienne un bouton.
    Quand je clique dessus il faut que ça ouvre l'Userform.

    mais là je ne trouve pas comment je dois faire les déclaration des Dim, pour la liste par exemple...

    EDIT: Bon j'ai trouvé pour le bouton ça va
    c'est pas très intuitif mais bon c'est

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si tu pense que le mieux serait que la macro démarre à l'ouverture du fichier, ça peut se faire... et ça t'éviterait le vilain bouton que tu as

    Suffit de demander

    A+

  10. #10
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    bbbboooo c'est pas vilain quand même

    et pis au moins j'ai réussi à le faire

    non bon maintenant ça m'appelle une macro qui ouvre un userform.
    J'ai créé une listbox dedans mais j'ai essayé de mettre le code de ouskel'n'or dedans, et là il faut que je clique sur la fenêtre pour que la liste s'affiche

    j'ai mis les valeur dans la listbox, puis dans le userform mais ça ne s'affiche pas. (et puis je suis sûr que c'est tout con)

    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
     
    Private Sub OK_Click()
     
    'Si je clique sur Ok
    Dim mois As Variant 'la variable mois est publique
    UserForm.Hide
    Unload UserForm
     
    End Sub
     
    Private Sub UserForm_Click()
     
    'affiche la liste des mois dans la listbox
    Année = Array("", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
    ma_liste.List() = Année
    ma_liste.Value = "Janvier"
     
    End Sub
    je mets où le code pour que ça s'affiche directement dedans?
    Par la même occasion, comment je récupère la valeur séléctionné?

    j'ai essayé de mettre les valeurs par l'écran de propriété à côté et ça marche pas

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Meûh non ! Faut mettre ton code dans Private sub userform_Initialize()

    A+

  12. #12
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    tout de suite ça va mieux
    mais comment je récupère le choix dans la macro?

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    mais comment je récupère le choix dans la macro?
    Tu récupères ta sélection dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ma_liste_Click()
        LaSélection = ma_liste.List(ma_liste.listindex)
        'Et là tu fais ce que tu veux de LaSélection...
        '........
    End sub
    A+

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Par défaut
    ou, ma foi :LaSélection = ma_liste.List(listindex)

  15. #15
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    mais si je ne me trompe pas cet évenement n'aura lieu que si je clique sur la liste

    c'est quand je clique sur OK que je le voudrais alors j'ai mis le code dans le bouton ok

    mais y'a un problème...

    quand je sors de la fenêtre (que ce soit manuellement ou avec unload) ça me retire mon résultat de ma feuille.

    Voyez ici que je voulais copier le mois choisi dans une case. Ca se copie puis ça s'efface à la fermeture de l'Userform...

    Comprends pas pourquoi


    En gros mon bouton appel la macro "Utilisation"

    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 Utilisation()
    UserForm.Show
    End Sub
     
    Private Sub userform_Initialize()
     
    'affiche la liste des mois dans la listbox
    ma_liste.List() = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
    ma_liste.Value = "Janvier"
     
    End Sub
     
    Private Sub OK_Click()
    'Si je clique sur Ok
    LaSelection = ma_liste.List(ListIndex)
    'écrire le résultat dans la case 5/1
    Cells(5, 1).Value = LaSelection
    UserForm.Hide
    Unload UserForm
     
    End Sub
    Edit: si je retire le unload et que je laisse le hide, le résultat reste. Est-ce que c'est acceptable comme technique?

    Re-Edit: Si je ne laisse que le Hide ça ne marche qu'une seule fois

    3ème Edit : hum en suivant ce topic sur l'userform et bien j'indiquerai que je peux faire une variable globale donc si vous savez comment faire

  16. #16
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    forcément je ne savais pas où placer la variable publique mais maintenant ça va.

    voici le code qui fonctionne comme il faut mais toujours le problème de mise à jour... ça ne marche qu'une fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public LaSelection As Variant
     
    Sub Utilisation()
     
    UserForm.Show
    Cells(5, 1).Value = LaSelection
     
    End Sub
    et dans le userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub userform_Initialize()
     
    ma_liste.List() = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
     
    End Sub
     
    Private Sub OK_Click()
     
    LaSelection = ma_liste.List(ListIndex)
    UserForm.Hide
    Unload UserForm
     
    End Sub
    EDIT: GGGGRRRR, si ça se met à jour mais ça me prend toujours janvier même si je ne mets pas cette valeur par défaut

    encore un Edit : en changeant l'ordre de l'array je remarque que ça me prend toujours le premier par défaut... Comment pouvoir obtenir la valeur sélectionnée et non la première de la liste?

  17. #17
    Membre confirmé Avatar de Yanos
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 160
    Par défaut
    je suis vert

    c'était pas listindex qu'il fallait mais value

    'Si je clique sur Ok
    Private Sub OK_Click()
    LaSelection = ma_liste.
    Value
    UserForm.Hide
    Unload UserForm

    End Sub

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Tu ne peux pas avoir l'index de la liste ailleurs que dans "ListBox", dans click ou dans exit ou "oùsketuveu" mais dans listBox. C'est là que tu dois utiliser ta variable global pour avaoir la valeur de ta sélection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaVariableGlobale = ListBox.list(ListBox.listIndex)
    Ensuite, si tu veux faire Ok et affecter ta variable à une cellule, rien ne t'en empêche

    A+

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

Discussions similaires

  1. [VBA-USERFORM] indice d'objet variable
    Par shinji7800 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/03/2009, 10h31
  2. [VBA-E] userform TextBox
    Par mulanzia2003 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/03/2006, 09h18
  3. [VBA-E] Problème de portée de variable [débutant]
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/03/2006, 18h28
  4. transfert des variables de sessions
    Par Julie 2006 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 26/02/2006, 11h58
  5. [vb] Transfert de variables et listbox
    Par lepiou dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 13/01/2006, 17h39

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