Microsoft 365 msgbox avec liste de choix

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,
joyeux Noel.gif

Je me tourne une nouvelle fois vers nos ténors ;)

J'ai fait des p'tits tests UF pour faire des choix de nombres ... Pas de souci particulier pour ça :)
Mais les UF, me semble-t-il, alourdissent les classeurs et les miens sont déjà plutôt lourds et "Usines à gaz" comme disent les Amis lol.

Je me demandais si ce ne serait pas mieux (si c'est possible ?) de faire ce choix à l'aide, par exemple, d'un msgbox avec liste de choix ?
J'ai fait des recherches et pas mal d'essais sans succès.

Si c'est possible, auriez-vous le bon code ?
En cas, je joins une fichier test.
Merci pas avance,
Amicalement,
lionel,
 

Pièces jointes

  • MsgBox_chiffres.xlsm
    27 KB · Affichages: 22
Dernière édition:
Solution
Bonsoir @Usine à gaz

' Astuce
' Création d'une comboBox sur la page Excel via une Msgbox
La derrière case de ce tableau : Array(10, 15, 20, 30, 45, 0)
c'est le code des boutons de la la MSGBOX soit : la description ici pour "Msgbox"

alors tbl c'est le tableau avec les valeurs que vous avez choisies sauf 0 bien sur
vous avez deviné : tbl(UBound(tbl)) La valeur c'est 0 bien sur pour "OK"
Bon sa sert a rien je pense mais, il faut utilisé Msgbox comme une fonction
qui va renvoyer 0, et donc 0 ne sert à rien dans votre liste...

laurent950

XLDnaute Accro
Re Lionel,

Pour la Msgbox

Ce que j'ai ajouté :
' Msgbox (Pour la boite de message)
Dim StrString As String
Dim tmp() As Variant
tmp = tbl: ReDim Preserve tmp(UBound(tmp) - 1)
StrString = "Liste de choix" & vbCrLf & Join(tmp, vbCrLf & "")
tbl(UBound(tbl)) = MsgBox(StrString, tbl(UBound(tbl)), "CLIC SUR LA BONNE REPONSE")
' Les valeurs
'ReDim Preserve tbl(UBound(tbl) - 1)
tbl = tmp: Erase tmp

VB:
Sub MsgBoxListeDeChoix2()
Dim WS As Worksheet
    Set WS = ActiveSheet
Dim tbl() As Variant
    tbl = Array(0, 1, 2, 5, 10, 15, 20, 30, 0)
' Msgbox
Dim StrString As String
Dim tmp() As Variant
    tmp = tbl: ReDim Preserve tmp(UBound(tmp) - 1)
    StrString = "Liste de choix" & vbCrLf & Join(tmp, vbCrLf & "")
    tbl(UBound(tbl)) = MsgBox(StrString, tbl(UBound(tbl)), "CLIC SUR LA BONNE REPONSE")
' Les valeurs
    'ReDim Preserve tbl(UBound(tbl) - 1)
    tbl = tmp: Erase tmp
' La Liste Box
Dim oCombo As OLEObject
Dim L As Single, T As Single, W As Single, H As Single
    L = ActiveCell.Left     'L = 180 '<-- position horizontale
    T = ActiveCell.Top      'T = 80 '<-- position verticale
    W = ActiveCell.Width    'W = 130 '<-- largeur
    H = ActiveCell.Height   'H = 22 '<-- hauteur
' Si la liste existe
    For Each oCombo In WS.OLEObjects
        If oCombo.progID = "Forms.ComboBox.1" Then
            If oCombo.Name = "Combo1" Then
                oCombo.Delete
            End If
        End If
    Next
' Creation de la liste de choix
    Set oCombo = WS.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=L, Top:=T, Width:=W, Height:=H)
With oCombo
    .Name = "Combo1" '<-- nom du Combobox
    .Object.List() = tbl    '<-- exemple de chargement des données
    .Object.TextAlign = 3   ' Aligne le texte a droite
    .Object.DropDown        ' Déroule le menu
End With
Set oCombo = Nothing
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
C'est dans le module 1:
VB:
Sub MsgBoxListeDeChoix2()
Dim WS As Worksheet
    Set WS = ActiveSheet
Dim tbl() As Variant
    tbl = Array(0, 2, 5, 10, 15, 20, 30, 0)
' Msgbox
    'tbl(UBound(tbl)) = MsgBox("Liste de choix", tbl(UBound(tbl)), "CLIC SUR LA BONNE REPONSE")
' Les valeurs
    ReDim Preserve tbl(UBound(tbl) - 1)
' La Liste Box
Dim oCombo As OLEObject
Dim L As Single, T As Single, W As Single, H As Single
    'L = 180 '<-- position horizontale
    L = ActiveCell.Left
    'T = 80 '<-- position verticale
    T = ActiveCell.Top
    'W = 130 '<-- largeur
    W = ActiveCell.Width
    'H = 22 '<-- hauteur
    H = ActiveCell.Height
' Si la liste existe
    For Each oCombo In WS.OLEObjects
        If oCombo.progID = "Forms.ComboBox.1" Then
            If oCombo.Name = "Combo1" Then
                oCombo.Delete
            End If
        End If
    Next
' Creation de la liste de choix
    Set oCombo = WS.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=L, Top:=T, Width:=W, Height:=H)
With oCombo
    .Name = "Combo1" '<-- nom du Combobox
    .Object.List() = tbl '<-- exemple de chargement des données
    .Object.TextAlign = 3 ' Aligne le texte a droite
    .Object.DropDown ' Déroule le menu
End With
Set oCombo = Nothing
CreateObject("wscript.shell").SendKeys "%{down}"
End Sub
 

laurent950

XLDnaute Accro
Re

Cette ligne sert a quoi ? CreateObject("wscript.shell").SendKeys "%{down}"

ici maintenant
Dim tbl() As Variant
'tbl = Array(0, 2, 5, 10, 15, 20, 30, 0)
tbl = Array(0, 2, 5, 10, 15, 20, 30)
' Msgbox
'tbl(UBound(tbl)) = MsgBox("Liste de choix", tbl(UBound(tbl)), "CLIC SUR LA BONNE REPONSE")

' Les valeurs
ReDim Preserve tbl(UBound(tbl) - 1)
 

laurent950

XLDnaute Accro
"Cette ligne sert a quoi ? CreateObject("wscript.shell").SendKeys "%{down}""
= Ouvrir automatiquement la liste de validation
elle s'ouvre déjà avec cette ligne avant : .Object.DropDown ' Déroule le menu

Pour votre question en poste #18 c'est l'affichage par default, non modifiable.

VB:
Sub MsgBoxListeDeChoix2()
Dim WS As Worksheet
    Set WS = ActiveSheet
Dim tbl() As Variant
    'tbl = Array(0, 2, 5, 10, 15, 20, 30, 0)
    tbl = Array(0, 2, 5, 10, 15, 20, 30)
' Msgbox
    'tbl(UBound(tbl)) = MsgBox("Liste de choix", tbl(UBound(tbl)), "CLIC SUR LA BONNE REPONSE")
' Les valeurs
    'ReDim Preserve tbl(UBound(tbl) - 1)
' La Liste Box
Dim oCombo As OLEObject
Dim L As Single, T As Single, W As Single, H As Single
     L = ActiveCell.Left      ' L = 180 '<-- position horizontale
    T = ActiveCell.Top       ' T = 80 '<-- position verticale
    W = ActiveCell.Width  ' W = 130 '<-- largeur
    H = ActiveCell.Height  ' H = 22 '<-- hauteur
' Si la liste existe
    For Each oCombo In WS.OLEObjects
        If oCombo.progID = "Forms.ComboBox.1" Then
            If oCombo.Name = "Combo1" Then
                oCombo.Delete
            End If
        End If
    Next
' Creation de la liste de choix
    Set oCombo = WS.OLEObjects.Add(ClassType:="Forms.ComboBox.1", Left:=L, Top:=T, Width:=W, Height:=H)
With oCombo
    .Name = "Combo1" '<-- nom du Combobox
    .Object.List() = tbl '<-- exemple de chargement des données
    .Object.TextAlign = 3 ' Aligne le texte a droite
    .Object.DropDown ' Déroule le menu
End With
Set oCombo = Nothing:   Set WS = Nothing: Erase tbl
L = Empty: T = Empty: W = Empty: H = Empty
End Sub
 
Dernière édition:

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour laurent950, le Forum,
Je vous souhaite à toutes et à tous une belle journée :)

Merci Laurent pour ta patience et ta ténacité :)
Je joins le fichier "finalisé" qui fonctionne "du tonnerre" et qui pourra être utile pour d'autres :)

Je profite de ce fil pour un souci d'intégration dans mon fichier de travail,
code dans la feuille :
1640595558759.png

Aurais-tu une idée ?
je continue mes tests,
Amicalement,
lionel :)
 

Pièces jointes

  • MsgBox_Perso.xlsm
    23.4 KB · Affichages: 2

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Laurent, le Forum,

Après beaucoup de tests, je confirme. Ton code fonctionne super bien ;)
Un grand merci :):)

Je cherche à ajouter une info.
Pas très indispensable mais, même si ça va sans dire, ça va tjrs mieux en le disant lol

Je voudrais ajouter une petit texte dans la combo1 :
1640700489989.png

"aujourd'hui + nbr jrs"
Est-ce possible ?
Je cherche de mon côté,
lionel :)
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous, Bonjour laurent950,
Je vous souhaite une belle journée :)

J'ai encore modifié le fichier test en y incluant un UF pour annuler si erreur de clic.
Comme mon Cher Job75, je suis jusqu'au-boutiste lol :)
Il ne me reste plus qu'a ajouter une petit texte dans la combo1 :
1640700489989-png.1125922

"aujourd'hui + nbr jrs"

Je joins le fichier à ce stade d'évolution.
Je continue mes recherches,
Amicalement,
lionel,
 

Pièces jointes

  • MsgBox_Perso.xlsm
    37.8 KB · Affichages: 3
Dernière édition:

Eric C

XLDnaute Barbatruc
Bonjour le forum
Bonjour le fil

@Lionel :
J'ai fait des p'tits tests UF pour faire des choix de nombres ... Mais les UF, me semble-t-il, alourdissent les classeurs et les miens sont déjà plutôt lourds et "Usines à gaz" comme disent les Amis lol.

Eh ben Lionel, après avoir parcouru ce fil, on peut observer que cette fois ci, tu vas faire light en utilisant seulement :
- du code (bien sûr)
- du contrôle ActiveX
- un UserForm (Euh.. tu ne disais pas que ....je ne sais plus ???)
- une Macro Excel4
- l'exécution d'une commande externe avec écriture dans la base de registre ....

Je ne veux pas être ton programme lorsque tu vas lui sortir l'artillerie lourde 🤣🤣🤣😂🤣🤣🤣
Bon Ok, je sors
Bonne après-midi à toutes & à tous
@+ Eric c
 

Discussions similaires

Statistiques des forums

Discussions
312 082
Messages
2 085 171
Membres
102 805
dernier inscrit
emes