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

Macros et VBA Excel Discussion :

Userform et événements associés


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut Userform et événements associés
    Bonjour à tous,

    J'ai quelques questions sur les événements liés au Userform et plus particulièrement Initialize, Activate, Deactivate, QueryClose et Terminate:

    Dans mon appli, je construis la structure du Userform via la méthode Initialize que j'appelle à l'ouverture du classeur. Ensuite à chaque clic droit de l'utilisateur sur une certaine plage de cellule, je fais s'afficher le Userform via la méthode Show. Ce que j'aimerais c'est que la méthode Initialize ne soit pas rappelée à chaque clic droit. Je voudrais que la strucure du Userform soit chargée une fois pour toute et qu'au clic droit, seuls certains contrôles du UF soient modifiés.

    Pour faire ça:
    • je charge le UserForm via la méthode Load à l'ouverture du classeur.
    • j'ai modifié la méthode QueryClose afin que la fermeture par l'utilisateur du UF corresponde simplement à un "masquage" de ce dernier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        If CloseMode = 0 Then
            Me.Hide
            Cancel = True
        End If
    End Sub
    Ca fonctionne mais je ne sais absolument pas si c'est la bonne manière de faire:
    • Du coup, je ne me sers pas des événements Activate et Deactivate ...
    • De plus, dois je faire un Unload dans la méthode Terminate à la fermeture du classeur ou est ce implicite?

    Je suis preneur de tous bons conseils.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, j'ose espérer que tu as consulté Utiliser les UserForm en VBA Excel car je ne verse pas dans l'extispicine.

  3. #3
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    Merci à kiki29 pour avoir ajouter un nouveau mot à mon vocabulaire !

    Pour issoram, je pense que tu t'y prends correctement (tu as surement du lire le tuto dont parle kiki29). Qu'est-ce qui te chagrine dans ce que tu as fait ?
    Il est vrai qu'il n'est pas toujours évident d'appréhender le fait que le Show ne fait que rendre visible le userform quand il existe et fait un Load implicite dans le cas contraire.
    Parfois, pour être "tranquille", j'oublie le Initialize et je créé une fonction Init que j'appelle explicitement après le Load. C'est exactement pareil, mais j'ai l'impression de mieux maîtriser ce que je fais.

  4. #4
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Merci à tous les 2,

    oui j'ai lu le tuto

    En fait ce que je trouve curieux, c'est de ne rien définir dans les méthodes Activate (lancée a l'appel du Show) et Deactivate (lancée lors du .Hide je suppose).
    J'aimerais aussi m'assurer que lorsque le UF est masqué, il est vraiment inactif: ne réagit pas au clic etc...

  5. #5
    Membre Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Par défaut
    En fait, je crois comprendre que tu veux qu'il ne se passe rien quand on affiche ou on cache le userForm, donc c'est normal de ne pas avoir implémenté Activate et Deactivate.
    Sinon, s'il est masqué, il n'est pas inactif du tout. Mais bien malin celui qui réussira à cliquer sur un de ses boutons, vu qu'il n'est pas apparent !!!

  6. #6
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    En fait, après le Load (fait à l'ouverture du classeur) et avant chaque appel à la méthode Show, j'appelle une méthode (Fill_UF) qui remplit les champs dynamiques de mon UserForm. Pour moi, cette méthode devrait "surcharger" (enfin d'après ma logique ) la méthode Activate. Sauf que ma méthode a des paramètres ce qui n'est pas le cas de la méthode Activate.
    Du coup je ne trouve pas ça super propre....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/04/2013, 21h52
  2. [AC-2000] évènement associé à une étiquette de zone de liste
    Par atech dans le forum IHM
    Réponses: 2
    Dernier message: 22/12/2011, 16h30
  3. [XL-2010] Textbox dans un UserForm : les évènements ne se déclenchent pas
    Par St-Jean dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/10/2010, 23h43
  4. Réponses: 8
    Dernier message: 03/08/2009, 07h36
  5. Réponses: 0
    Dernier message: 18/07/2008, 14h51

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