Création d'un msgbox
JULIEN
-
NHenry Messages postés 15219 Date d'inscription Statut Modérateur Dernière intervention -
NHenry Messages postés 15219 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Dans le cadre d'un cours d'informatique, je dois créer un fichier excel avec des macros et autre...
S'agissant d'un programme de gestion de stocks, dans un premier temps, je voudrais qu'à l'ouverture de mon document, un msgbx apparaisse en indiquant "bienvenue, veuillez préciser si vous êtes client ou administrateur"
Il faudrait que sous ce texte 2 "boutons" apparaissent : client et administrateur, et que ça n'ouvre pas la même page excel selon que l'utilisateur est client ou administrateur.
J'arrive bien à créer mon msg box mais je ne peux que cliquer sur Ok, je n'arrive pas à créer les options ...
Pouvez vous m'aider SVP
Dans le cadre d'un cours d'informatique, je dois créer un fichier excel avec des macros et autre...
S'agissant d'un programme de gestion de stocks, dans un premier temps, je voudrais qu'à l'ouverture de mon document, un msgbx apparaisse en indiquant "bienvenue, veuillez préciser si vous êtes client ou administrateur"
Il faudrait que sous ce texte 2 "boutons" apparaissent : client et administrateur, et que ça n'ouvre pas la même page excel selon que l'utilisateur est client ou administrateur.
J'arrive bien à créer mon msg box mais je ne peux que cliquer sur Ok, je n'arrive pas à créer les options ...
Pouvez vous m'aider SVP
A voir également:
- Création d'un msgbox
- Creation compte gmail - Guide
- Création site web - Guide
- Création d'un compte google - Guide
- Media creation tool - Télécharger - Systèmes d'exploitation
- Creation compte vinted - Guide
3 réponses
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.
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
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
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. 😊
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
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...
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.