Création d'un msgbox

JULIEN -  
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


A voir également:

3 réponses

NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Soit tu utilise les paramètres de MsgBox pour afficher plus de boutons (standards évidemment).
Soit tu fais ta propre UserForm.
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23
 
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 :

        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
0
Utilisateur anonyme
 
Bonjour hcp7kuz,
Tu n'as pas indiqué quelle est l'erreur qui persiste, mais comme j'ai suivi
ton lien, peut-être est-elle due à ce qui est noté tout en bas de la page :
rubrique « Remarques importantes ! » ? Bien sûr, si tu l'as déjà lu,
ce présent message est sans objet.  😉
Cordialement.  😊
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23 > Utilisateur anonyme
 
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
0
Utilisateur anonyme > hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention  
 
 
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.  😊
 
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23 > Utilisateur anonyme
 
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 :

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
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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.
0
Julien LE RAY
 
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...
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23
 
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
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
Pour cacher la UserForm : :
Unload MaUserForm
ou
MaUserForm.Hide
0
hcp7kuz Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   23 > NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention  
 
Désolé NHenry, mais pourquoi s'obstiner à utiliser une UserForm alors que la solution, proposée un peu plus haut, est celle demandée ?
0
NHenry Messages postés 15219 Date d'inscription   Statut Modérateur Dernière intervention   365
 
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.
0