Macro VB - Boite de dialogue

Bonjour,

je voudrais faire un petit truc:

au lancement d'une macro, je voudrais qu'un boite de dialogue s'ouvre et me propose une liste de choix dont l'utilisateur va selectionner 1 element, qui sera un point d'entree pour la suite de la macro.

Coment fait-on ca? je n'ai pas trouve de reponse grace a la fonction rechercher de ce forum

Merci pour vos reponses

Bonjour outcha,

Vois si ceci peut te conveneir.

Créer un userform, ajouter une liste déroulante et un bouton.

Remplir la liste déroulante à l'ouverture du userform, zone nommée liste

Private Sub UserForm_Initialize()
ListBox1.RowSource = "liste!liste_mois"  'Sheets("liste").Range("A1:A12").Value
ListBox1.ListIndex = -1
End Sub

Code du bouton

Private Sub CmdOK_Click()
Unload UserForm1
Dim J As Byte
Dim i As Byte
Dim L As Byte

    'Déterminer si item sélectionné
    For i = 0 To 11
        If ListBox1.Selected(i) Then
        J = J + 1
        L = i
        'Sheets("liste").Cells(1, 2).Value = ListBox1.List(I)
        End If
    Next    
    'Si aucun élément sélectionné , fin de la procédure
    If J = 0 Then
        Exit Sub
    Else
        L = L + 1   'valeur trouvée(ligne) 
        Application.ScreenUpdating = False
        'Suite de ta macro
   End If

Les experts ont peut-être une meilleure solution !

Bon travail,

bonjour

n'etant pas adepte du rowsource (incompatible avec mac, difficile à gérer en cas de suppression ou d'ajout d'item), je propose pour l'initialise du listbox :

Private Sub UserForm_Initialize()

ListBox1.List = Range("liste!liste_mois").Value

End Sub

on peut rendre cette plage dynamique :

Private Sub UserForm_Initialize()

With Sheets("liste")
    ListBox1.List = .Range("a1:a" & .Range("a65536").End(2).Row).Value
End With

End Sub

pour retrouver l'item sélectionné d'une listbox (cas d'une listbox en sélection unique) :

Private Sub CommandButton1_Click()
MsgBox ListBox1
End Sub

pour retrouvé l'index (son numéro) attention, une listbox est indexé à partir de 0 :

Private Sub CommandButton1_Click()
MsgBox ListBox1.ListIndex
End Sub

en esperant avoir été utile

salut

Bonjour,

Si on connaît en avance les éléments de la liste, on peut également initialiser la liste dans le code même. Ci-joint un exemple pour avoir le choix de douze mois et afficher par défaut le mois de janvier. Ce n'est qu'un exemple.

Sub UserForm_Initialize()
    For i = 1 To 12
        Combo_Mois.AddItem (MonthName(i))
    Next
    Combo_Mois.Text = MonthName(1)
End Sub

Cdlt,

re

une autre méthode pour remplir une listbox (ou combo) lorsque l'on connait les items par avance.

Private Sub UserForm_Initialize()
ListBox1.List = Array("toto", "titi", "tata")
End Sub

ca peut parfois eviter la méthode additem et donc des lignes de codes.

salut

Re Ours,

Bien sûr. Mais la variable entrée de façon indicée n'a pas la même utilité que les valeurs constantes qui rentrent dans un array. Par exemple si tu veux entrer dans une listebox(ou combobox) les valeurs de l'année 1900 à 2000(pourquoi pas), essaye d'entrer tout ça dans un array.

Par conséquent, l'utilité d'un code ne se mésure pas uniquement à ses nombres de lignes mais au contexte d'un problème donné.

Cdlt,

Bonjour le forum,

WOW ! super. Je suis débutante avec les userform et je me doutais bien qu'il y avait des solutions plus au point.

Merci, super ce forum pour apprendre.

Bonne journée,

Rechercher des sujets similaires à "macro boite dialogue"