IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Une alternative à MsgBox (Version revisitée)


Sujet :

Contribuez

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Conseiller en organisation à la retraite
    Inscrit en
    Mars 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Conseiller en organisation à la retraite

    Informations forums :
    Inscription : Mars 2023
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Une alternative à MsgBox (Version revisitée)
    Alternative à MsgBox()

    Bonjour à tous,

    Voici une version revisitée de la fonction Dialogue.

    Dans cette nouvelle version, les messages ne sont plus intégrés à la fonction Dialogue, mais stockés dans un formulaire dédié. La gestion des messages (création, modification, suppression) se fait via une application spécifique qui rend le travail de programmation beaucoup plus simple et surtout plus convivial.

    Une fois mis au point, le jeu de messages sera directement exporté dans l’application destination. La fonction Dialogue (nouvelle version) se chargera d’extraire les données du message (depuis le formulaire dédié) et l’affichera selon les paramètres définis (via le formulaire Message).

    Par rapport à l'ancienne version, la taille du projet se trouve fortement diminuée.

    Contexte d’utilisation : (Rappels et nouveautés)

    La fonction Dialogue() est une alternative à MsgBox(). Elle offre plus de possibilités en matière d’affichage et de paramétrage des messages. Comme par exemple afficher des messages "Furtifs", que s'affichent et disparaissent au bout d'un certain temps, du texte long sur une seule ligne, de la couleur dans le message, des caractères de tailles différentes, des fenêtres plus grandes, des icônes personnalisées, etc.

    Elle permet au développeur de déterminer (via l'application de gestion) ses propres choix pour l'affichage des messages.

    La fonction se charge, à partir des données du message (et de ses paramètres), de préparer le formulaire "Message" (hauteur/largeur, etc.), de placer le texte (les labels), de faire apparaître l'image associée et de positionner les boutons. Après validation par l'utilisateur final (si validation), elle retourne une valeur qui sera utilisée pour la suite du traitement.

    Exemples d'appels de la fonction :

    Après avoir positionnés (le cas échéant) les paramètres additionnels dans la variable tableau Mtxt()

    M1 = Dialogue (N° Message)
    If Dialogue (N° message) = 1 Then …
    Select case Dialogue (N° message) …
    ou tout simplement Dialogue (N° de message) si la réponse n'est pas utile (message furtif par exemple)
    Etc.


    M1 est une variable publique ; bien que réservée à la fonction, elle pourra servir à recevoir la réponse.
    N° message est le numéro du message à afficher. La fonction extraira les données directement depuis le formulaire "Données_Msg".

    Dans cette nouvelle version, le type de validation disparait ; il est déterminé par la fonction (selon le nombre de boutons positionnés).

    Valeurs retournées par la fonction :

    - 0 pour un message "Furtif" (sans bouton), utilisation de la touche Echap ou fermeture du formulaire par la croix,
    - 1, 2 ou 3 selon le N° du bouton sélectionné,
    - 99 si le message offre une possibilité d’aide et que l’utilisateur clique sur l’image (point d’interrogation) ou sur le label "Aide" présent dans ce cas.

    Aperçu du classeur de gestion :

    Fenêtre principale



    Fenêtre de gestion des messages



    Avec cette nouvelle version, la programmation des messages devient encore plus simple et l'autonomie du module Dialogue permet une implantation plus aisée dans les nouveaux projets.

    Les commentaires, présents dans le code de l'application de gestion, permettent de comprendre les mécanismes de traitement. Vous pouvez adapter l'application à vos besoins en y ajoutant ou en modifiant des éléments (procédures, objets, etc.).

    Bien que le programme ait été testé maintes fois, il peut s'y trouver encore quelques coquilles résiduelles (erreurs non traitées par exemple). Un retour de votre part sera le bienvenu.

    Vous trouverez en pièces jointes :



    Bonne utilisation

  2. #2
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonjour Eric_angers,

    voilà un bel outil qui renouvelle le genre.
    Je n'ai pas encore utilisé, mais la présentation est nickel.

    Beau travail
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Conseiller en organisation à la retraite
    Inscrit en
    Mars 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Conseiller en organisation à la retraite

    Informations forums :
    Inscription : Mars 2023
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Salut.

    Merci pour ce travail.

    Je n'ai pas bien compris pourquoi M1 devait être une variable publique => où est-elle déclarée? Doit-elle obligatoirement être déclarée?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Conseiller en organisation à la retraite
    Inscrit en
    Mars 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Conseiller en organisation à la retraite

    Informations forums :
    Inscription : Mars 2023
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour

    La variable M1 est déclarée dans le module Dialogue (Public M1 As Integer ' Réponse retournée).

    Elle doit être publique car elle sert de valeur de retour lors de l'appel du formulaire Message par la fonction Dialogue.

    Exemple : M1=Dialogue(4)

    La fonction affiche le Formulaire message avec les données du message n°4 (avec boutons, donc modal)
    Attente d'une action de l'utilisateur >> choix dans M1 >> Effacement du formulaire
    Retour dans la fonction >> traitement de fin >> Retourne M1 en réponse à la fonction
    Retour dans la procédure appelante >> M1 reçoit la réponse (ce pourrait être une autre variable éventuellement Privée, mais M1 n'étant utilisée que par la fonction Dialogue, elle est disponible)
    Traitement selon la valeur de M1
    ...

    J'espère avoir répondu à vos questions

    Bonne journée

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 918
    Points
    55 918
    Billets dans le blog
    131
    Par défaut
    Merci pour la réponse.

    Je n'aime pas les variables publiques et conseille de toujours s'en passer. Sauf dans quelques cas bien précis (ruban interactif, par exemple), une variable publique n'est pas nécessaire et devrait être remplacée par un argument de fonction/procédure.

    J'illustrerai fin de journée comment on peut s'en passer.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Conseiller en organisation à la retraite
    Inscrit en
    Mars 2023
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Conseiller en organisation à la retraite

    Informations forums :
    Inscription : Mars 2023
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Une petite amélioration à la fonction
    Bonjour,

    Voici une petite modification que j'ai apportée à la fonction :

    Pour les messages furtifs (qui s'effacent au bout d'un certain temps), il est maintenant possible d'effacer le message avant la fin du temps préprogrammé (Tempo).
    Si l'utilisateur clique dans le message, celui-ci disparait. Utile pour les "impatients"

    Modifications apportées :

    Dans le module Dialogue, partie affichage du formulaire (** = Nouvelles lignes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    Select Case Nbre_Bts
            Case 0
                ' Pas de validation
                .Label1.Top = .Label1.Top - 5             ' Remonte le label pour un meilleur visuel
                With .Label12                             ' Label pour info effacement **
                    .Left = 2                             ' **
                    .Width = Message.Width                ' **
                    .Top = Message.Height - 32 - .Height  ' En bas **
                    .Visible = True                       ' **   
                End With                                  ' **
                Application.EnableCancelKey = xlDisabled  ' Bloque le clavier (cas de Echap pendant l'affichage)
                .Tag = "Non modal"                        ' Pour test dans le form (arrêt du tempo) **
                i = 0                                     ' Compteur ** 
                .Show 0                                   ' Non modal, pas de validation
                DoEvents                                  ' Impératif sinon le message ne s'affiche pas
                ' Boucle 100 fois max. Si Stop sort       ' **
                Do While .Tag <> "Stop"                   ' **
                    Sleep CInt(Tabl_Msg(Msg).Tempo) / 100 ' Attente selon Msg /100 ' **
                    i = i + 1: If i = 100 Then Exit Do    ' **
                    DoEvents                              ' **
                Loop                                      ' **
                .Tag = ""                                 ' **
                Unload Message
                Dialogue = 0                              ' Retourne 0
                Application.EnableCancelKey = xlInterrupt ' Débloque le clavier
     
            Case 1, 2, 3
                ' Validation par un des trois boutons
                Application.Cursor = xlDefault ' Curseur normal si <>
                M1 = 0                         ' Retour par défaut (Public)
                .Show 1                        ' Modal (unload fait dans l'UserForm)
                ' Retour : M1=1 pour Bt1, =2 pour Bt2, =3 pour Bt3 ou  =0 si Echap ou fermeture par la croix
                '          M1=99 si demande d'aide (click sur l'image ? ou sur le label Aide dans le message) traitement par la procédure appelante
                Dialogue = M1
        End Select
    Dans le formulaire "Message"

    Ajouter un Label (Label12)

    Propriétés (certaines seront modifiées par la procédure Dialogue)
    Nom : Propriétés.jpg
Affichages : 31
Taille : 39,6 Ko

    Puis ajouter les évènements suivants dans le module du formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Private Sub Label12_Click()
    ' Label info pour arrêt Tempo (présent uniquement si messages furtifs)
    If Me.Tag = "Non modal" Then
        Me.Tag = "Stop" ' Retourne Stop à la fonction
    End If
    DoEvents
    End Sub
     
    Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
    ' Clic dans le formulaire
    If Me.Label12.Visible Then Call Label12_Click ' Uniquement pour Msg furtifs idem Click
    End Sub
    Enfin Indiquez en entête du Module Dialogue (pour le suivi des mises à jour) :
    ' Ajout Label 12 pour info sur arrêt Tempo
    ' Ajout Procédures UserForm_MouseDown et Label12_Click pour test

    Bonne programmation

    Eric

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/01/2016, 11h04
  2. [AC-2002] MsgBox version longue ?
    Par azertix dans le forum VBA Access
    Réponses: 3
    Dernier message: 26/01/2010, 14h12
  3. Alterner entre plusieurs versions d'Apache et de PHP
    Par Yogui dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 23/12/2009, 14h09
  4. Bubuntu alternate version
    Par kiteolivier dans le forum Bubuntu
    Réponses: 10
    Dernier message: 28/04/2008, 00h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo