Création d'un msgbox
Fermé
JULIEN
-
Modifié par baladur13 le 31/10/2016 à 18:08
NHenry Messages postés 15047 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mars 2023 - 31 oct. 2016 à 18:50
NHenry Messages postés 15047 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mars 2023 - 31 oct. 2016 à 18:50
A voir également:
- Création d'un msgbox
- Media creation tool - Télécharger - Systèmes d'exploitation
- Creation compte gmail - Guide
- Creation adresse mail - Guide
- Création compte google - Guide
- Creation compte facebook - Guide
3 réponses
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
331
29 oct. 2016 à 15:09
29 oct. 2016 à 15:09
Soit tu utilise les paramètres de MsgBox pour afficher plus de boutons (standards évidemment).
Soit tu fais ta propre UserForm.
Soit tu fais ta propre UserForm.
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
24
29 oct. 2016 à 22:45
29 oct. 2016 à 22:45
Salut, j'ai trouver cette page http://www.mdf-xlpages.com/modules/publisher/item.php?itemid=42 mais après l'avoir testé, une erreur persiste et la cause de celle-ci m'est encore obscure...
Sinon, pour contourner le problème tu peux demander si l'utilisateur est admisatrateur, comme ici :
hcp7kuz
Sinon, pour contourner le problème tu peux demander si l'utilisateur est admisatrateur, comme ici :
If MsgBox("Bienvenue, êtes vous administrateur ?", vbYesNo, "Bienvenue") = vbYes Then
'Si l'utilisateur appuie sur le bouton oui
'...
Else
'Si l'utilisateur appuie sur le bouton non
'...
End If
hcp7kuz
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
24
>
Utilisateur anonyme
30 oct. 2016 à 13:54
30 oct. 2016 à 13:54
Merci de ta remarque albkan, mais j'avais bien lu cette rubrique, et l'erreur ne venait pas de là.
J'ai refait quelques recherches à l'instant, et j'ai trouvé l'erreur, et je l'ai corrigé.
Le MsgBox s'affiche bien, sauf que les boutons ne sont pas personnalisés, peut-être ce code ne marche-t-il que pour des versions antérieurs de Excel ? Le mystère persiste...
hcp7kuz
J'ai refait quelques recherches à l'instant, et j'ai trouvé l'erreur, et je l'ai corrigé.
Le MsgBox s'affiche bien, sauf que les boutons ne sont pas personnalisés, peut-être ce code ne marche-t-il que pour des versions antérieurs de Excel ? Le mystère persiste...
hcp7kuz
Utilisateur anonyme
>
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
31 oct. 2016 à 07:02
31 oct. 2016 à 07:02
Bonjour hcp7kuz,
Tu as écris : « Le MsgBox s'affiche bien, sauf que les boutons ne sont pas
personnalisés ».
Voici le tout début de la rubrique « Remarques importantes ! » :
«
Curieusement, les tests de cette procédure à base d'API Windows ne fonctionnent
pas lorsqu'on lance le code directement depuis l'éditeur VBE. Dans ce cas, les
boutons afficheront invariablement leur valeur par défaut (c'est à dire "Oui" et
"Non"). Il convient donc de lancer vos tests depuis l'interface Excel (comme le fera
l'utilisateur de votre projet) et non depuis l'éditeur de code VBA.
»
Donc il me semble que la citation de la rubrique explique ton problème, non ?
Si ça affiche invariablement "Oui" et "Non" depuis Microsoft Visual Basic,
les boutons ne sont donc pas personnalisés, comme tu l'as signalé. Tu dois
donc, pour que ça marche, exécuter la macro depuis la feuille Excel.
Mais si ce n'est pas ça, alors oui, effectivement, ça vient d'autre chose,
et le mystère persiste...
Cordialement. 😊
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
24
>
Utilisateur anonyme
31 oct. 2016 à 12:47
31 oct. 2016 à 12:47
Boujour Albkan,
Encore merci pour ta remarque, car, comme tu as pu le remarquer, j'étais dans le feu de l'action, et j'en ai malencontreusement oublié ladite rubrique. Il est vrai que, lorsque que l'on exécute le code depuis l'interface excel, tout marche beaucoup mieux !
JULIEN, voici donc la fonction MsgBoxPerso, servant à afficher une MsgBox avec des boutons personnalisables. Ajoute déjà un module (insertion > module), dans lequel tu vas coller ce code :
Ensuite, pour utiliser la fonction, colle ce code :
Et, au risque de répéter, cela ne marche que depuis l'interface excel !
Cdlt
hcp7kuz
Encore merci pour ta remarque, car, comme tu as pu le remarquer, j'étais dans le feu de l'action, et j'en ai malencontreusement oublié ladite rubrique. Il est vrai que, lorsque que l'on exécute le code depuis l'interface excel, tout marche beaucoup mieux !
JULIEN, voici donc la fonction MsgBoxPerso, servant à afficher une MsgBox avec des boutons personnalisables. Ajoute déjà un module (insertion > module), dans lequel tu vas coller ce code :
Option Explicit
Public Declare Function SetWindowsHookEx& Lib "USER32" Alias "SetWindowsHookExA" _
(ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&)
Public Declare Function GetCurrentThreadId& Lib "kernel32" ()
Public Declare Function CallNextHookEx& Lib "USER32" _
(ByVal hHook&, ByVal CodeNo&, ByVal wParam&, ByVal lParam&)
Public Declare Function GetWindow& Lib "USER32" (ByVal hWnd&, ByVal wCmd&)
Public Declare Function SetWindowText& Lib "USER32" Alias "SetWindowTextA" _
(ByVal hWnd&, ByVal lpString$)
Public Declare Function UnhookWindowsHookEx& Lib "USER32" (ByVal hHook&)
Public msgHook&
Public TitreBtn$(1 To 2)
Public Function MsgBoxPerso(Prompt$, Optional Title$, Optional Icon&, Optional Caption1$ = "Oui", _
Optional Caption2$ = "Non", Optional Cancel As Boolean = False) As Byte
Dim Rep%, hInstance&
TitreBtn(1) = Caption1
TitreBtn(2) = Caption2
msgHook = SetWindowsHookEx(5, AddressOf CaptionBoutons, hInstance, GetCurrentThreadId())
Rep = MsgBox(Prompt, Icon + IIf(Cancel, vbYesNoCancel, vbYesNo), Title)
MsgBoxPerso = Application.Max(Rep - 5, 0)
Erase TitreBtn
End Function
Public Function CaptionBoutons&(ByVal nCode&, ByVal wParam&, ByVal lParam&)
Dim hWndChild&
If nCode < 0 Then
CaptionBoutons = CallNextHookEx(msgHook, nCode, wParam, lParam)
Exit Function
End If
If nCode = 5 Then
hWndChild = GetWindow(wParam, 5)
Call SetWindowText(hWndChild, TitreBtn(1))
hWndChild = GetWindow(hWndChild, 2)
Call SetWindowText(hWndChild, TitreBtn(2))
UnhookWindowsHookEx msgHook
End If
CaptionBoutons = False
End Function
Ensuite, pour utiliser la fonction, colle ce code :
Dim Rep As Byte
'A remplacer par : Rep = MsgBoxPerso("Bienvenue, êtes-vous client ou administrateur ?", "Bienvenue", vbQuestion, "Client", "Administrateur", True)
' si tu veux afficher le bouton annuler
Rep = MsgBoxPerso("Bienvenue, êtes-vous client ou administrateur ?", "Bienvenue", vbQuestion, "Client", "Administrateur")
Select Case Rep
Case 0
'ici le traitement (éventuel) si Annulation
'...
Case 1
'ici le traitement si l'utilisateur clique sur le bouton Client
'...
Case 2
'ici le traitement si l'utilisateur clique sur le bouton Administrateur
'...
End Select
Et, au risque de répéter, cela ne marche que depuis l'interface excel !
Cdlt
hcp7kuz
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
331
30 oct. 2016 à 15:20
30 oct. 2016 à 15:20
Si par bouton personnalisés tu veux dire des boutons qui portent un nom que tu définit, oui, ce ne sera pas possible avec MsgBox, il te faudra forcément faire une UserForm personnalisée.
Merci, à tous pour vos réponses qui me sont tès utiles. j'ai réussi à créer l'userform avec les botuons que je souhaite. il faut maintenant que j'arrive à le faire disparaitre une fois que j'ai cliqué... Je vais essayer avec la foction if then...
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
24
31 oct. 2016 à 18:20
31 oct. 2016 à 18:20
Boujour Julien LE RAY,
As-tu testé la fonction que jai donné plus haut ? Elle fonctionne parfaitement, lorsqu'elle est utilisé correctement, tu n'as pas besoin d'utiliser d'UserForm, et elle fonctionne exactement comme un MsgBox classique, à quelques exceptions près.
hcp7kuz
As-tu testé la fonction que jai donné plus haut ? Elle fonctionne parfaitement, lorsqu'elle est utilisé correctement, tu n'as pas besoin d'utiliser d'UserForm, et elle fonctionne exactement comme un MsgBox classique, à quelques exceptions près.
hcp7kuz
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
331
31 oct. 2016 à 18:41
31 oct. 2016 à 18:41
Pour cacher la UserForm : :
Unload MaUserForm
ou
MaUserForm.Hide
Unload MaUserForm
ou
MaUserForm.Hide
hcp7kuz
Messages postés
238
Date d'inscription
mardi 18 août 2015
Statut
Membre
Dernière intervention
23 mars 2019
24
>
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
31 oct. 2016 à 18:45
31 oct. 2016 à 18:45
Désolé NHenry, mais pourquoi s'obstiner à utiliser une UserForm alors que la solution, proposée un peu plus haut, est celle demandée ?
NHenry
Messages postés
15047
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 mars 2023
331
31 oct. 2016 à 18:50
31 oct. 2016 à 18:50
L'avantage de la Userform est qu'après il pourra faire plus de chose avec.
Ta solution semble fonctionnelle (je ne peux pas tester, je n'ai pas M$ Office sur ma machine), mais elle est difficilement compréhensible par un débutant.
Je privilégie une solution simple avec un code à faire.
Après, je suis d'accord avec toi, ta solution peut être intéressante.
Ta solution semble fonctionnelle (je ne peux pas tester, je n'ai pas M$ Office sur ma machine), mais elle est difficilement compréhensible par un débutant.
Je privilégie une solution simple avec un code à faire.
Après, je suis d'accord avec toi, ta solution peut être intéressante.