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 :

Accéder et modifier les ComboBox de déclaration dans le CodeModule d'un userform


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut Accéder et modifier les ComboBox de déclaration dans le CodeModule d'un userform
    Bonjour,

    Désolé si cette question a déjà été posée, mais je ne sais pas trop comment décrire de façon textuelle ma demande donc je ne trouve pas de réponse correspondant à mon besoin.

    En fait je cherche pour un CodeModule donné (entre autre celui d'un userform) à accéder aux deux ComboBox qui permettent de faire les déclarations en fonction des évènements.
    Le but est de dynamiquement ajouter des éléments à ces fameux ComboBox.

    En cherchant en ligne, j'ai vu que je pouvais déjà accéder (je n'ai pas tenté de les modifier) aux boutons File, Edit, View, Insert, etc mais pas moyen de trouver ces deux combobox !


    Merci d'avoir pris le temps de me lire, et merci à ceux qui tenteront de m'apporter leur aide
    Images attachées Images attachées   

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Salut, Vos copies d'écran ne montre pas de ComboBox. êtes vous sur d'être sur le bon UserForm.
    Pouvez vous nous mettre une copie du UF ouvert.
    Mettez vous sur le formulaire du UF et Double cliquez sur le Combo. aussitôt va s'ouvrir la feuille de code correspondante avec une procédure vide:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub ComboBox1_Click()
     
    End Sub
    Cordialement

  3. #3
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de répondre.

    Mes copies d'écran encadrent en rouge les ComboBox que je veux modifier, ce sont des éléments système (des listes déroulante de l'interface de développement).

    En fait, je gère des évènements avec un module de classe.
    Ces évènements vérifient l’existence de mes procédures dans le CodeModule de l'userform et si ils existent, ils y font appels.
    Et je voulais modifier les listes déroulantes système afin d'intégrer mes propres évènements qui sont créé par du code et qui sont défini à partir des éléments qui composent mon userform.

    Je ne sais pas si c'est plus clair... Bref, je cherche à atteindre des listes déroulantes de l'interface de développement !

    Par défaut, ces listes déroulantes affichent (General) et (Declarations)

  4. #4
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Re
    Pardonnez moi, vous me parlez d'un Combobox, mais ce que vous avez entouré de rouge, ce sont des CheckBoxs ???

    Cordialement

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Nono02P parle bien de deux ComboBox et il a bien entouré de rouge les deux ComboBox situé juste au dessus de la zone d'édition !

    Je ne crois pas que tu puisses avoir accès à leurs listes car elles sont alimentées en fonction des procédures et fonctions qui sont créées dans la zone d'édition mais je peux me tromper !

  6. #6
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Oui Theze, tu as compris !


    En tout cas j'ai vu qu'il était possible de changer les CommandBars en haut (File, Edit, View, etc)

    A l'exécution de Sub test() :
    Nom : Test.PNG
Affichages : 827
Taille : 63,8 Ko

    A l'exécution de Sub test2() :
    Nom : Test2.PNG
Affichages : 813
Taille : 68,5 Ko

    J'ai un espoir que ça soit possible d'atteindre les ComboBox, donc je continue à chercher !

  7. #7
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Module standard

    Un module standard affiche toujours (Général) dans le combo de gauche et dans celui de droite, (Déclarations) ainsi que les procédures et fonctions présentes dans le module standard.


    Module de classe
    Pour un module de classe
    (module de classeur, de feuille, de userform, de classe perso), Le combo de gauche affiche (Général) puis les objets du module qui possèdent des évènements gérés (ou gérables, grâce à WithEvents) par le code. La liste de droite affichera une liste dépendant de la sélection dans la liste de gauche. Lorsque je parles des objets du module, c'est l'objet lui-même (classeur, feuille, userform, classe), les objets déclarés dans le module mais aussi les objets placés sur l'objet du module (les contrôles placés dans un userform ainsi que les contrôles ActiveX placés sur une feuille Excel, notamment).

    Si dans la liste de gauche, tu choisis (Général), tu auras dans la liste de droite (Déclarations) et les procédures, fonctions et propriétés du module (PAS des objets déclarés dans ce module). Si à gauche, tu choisis un objet, tu auras à droite les évènements gérables de cet objet. Tu ne pourras donc voir dans la liste de droite que les noms des macros évènementielles liées à l'objet choisi à gauche, et pas les procédures, fonctions ou propriétés de cet objet, auxquelles tu accèderas par la notation pointée habituelle.

    Si tu déclares un objet de classe perso dans un autre module de classe, tu pourras le voir apparaître dans la liste de gauche à condition qu'il expose au moins un évènement ET que tu l'aies déclaré avec WithEvents. En le sélectionnant dans la liste de gauche, tu pourras alors voir dans celle de droite les évènements de cet objet que tu peux gérer. Attention, tu ne peux pas déclarer un objet avec WithEvents dans un module standard. Si, dans un module de classe, tu déclares un objet avec WithEvents alors qu'il ne dispose pas d'évènement,tu n'auras pas d'erreur de syntaxe, mais bien une erreur de compilation (et donc à l'exécution).

    J'en parle au chapitre IV-E de mon tuto sur les classes personnalisées en VBA.
    "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...
    ---------------

  8. #8
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Bonjour,

    [Edit1] Ne perdez pas de temps à lire ce qui est barré, j'avais mal compris votre réponse ! C'est exactement ce que je cherche à faire ! Un grand merci à vous

    Oui cette histoire d'événements dans les modules de classes sont assimilés, d'ailleurs c'est comme ça que j'ai rempli quasiment toutes les lignes de clsEvent.

    Cependant mon but était d'avoir un "groupe de module de classe" standard pour tous les userforms et pour qu'il soit standard, je me suis dis que l'idéal serait qu'il fasse appel à une procédure stockée dans l'userform lui même... De cette manière mon code est standard côté module de classe (du coup je le garde dans un fichier add-in) et pourtant le traitement à faire peux être complètement différent entre deux userforms.

    Donc en quelque sorte je voulais pouvoir alimenter moi même les deux listes qui sont habituellement alimentées par le logiciel en fonction de ce qui compose l'userform.
    Je trouvais ça plus user-friendly que ce soit intégré à l'interface, mais bon c'est peut-être un peu du luxe parce qu'au pire je peux faire un custom menu avec les CommandBar.



    Par contre en parlant de custom menu, j'en ai profité pour essayer de jouer avec et j'ai vu à un endroit que c'était abordé sur le site. Mais quand j'affecte à un bouton.OnAction une procédure, celui-ci n’exécute pas la procédure.
    Dois je gérer ça dans un module de classe et créer des événements pour les CommandBar ou l'interface est sensée le gérer seule?

    Merci d'avoir pris le temps de lire mon pavé



    [Edit 2] : Votre tutoriel est superbe !
    J'ai cru comprendre que les parties 2 et 3 ne sont pas encore disponibles... Du coup, comment gérer efficacement mes évènements de la clsEvent au travers la clsEvents qui est en fait une collection (avec une relation parent-enfant)?

    Je suis sur de pouvoir faire en sorte que ça fonctionne en déclarant mes évènements de clsEvent dans clsEvents puis de créer des évènements dans clsEvents pour être utilisés dans mon userform... Mais j'ai le sentiment qu'il existe une solution plus puissante ! Avez vous un lien vers quelque chose qui en parle?

    Encore merci !

  9. #9
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il faudrait que tu sois plus explicite sur ton histoire de custom.menu...

    (Mais dans une autre discussion stp pour ne pas mélanger les sujets de discussion... )
    "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...
    ---------------

  10. #10
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Décembre 2015
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Décembre 2015
    Messages : 84
    Par défaut
    Oui vous avez raison, je vais d'abord me documenter et chercher un peu par moi même d'abord, et j'ouvrirais une discussion si c'est nécessaire !

    Citation Envoyé par Nono02P Voir le message
    [Edit 2] : Votre tutoriel est superbe !
    J'ai cru comprendre que les parties 2 et 3 ne sont pas encore disponibles... Du coup, comment gérer efficacement mes évènements de la clsEvent au travers la clsEvents qui est en fait une collection (avec une relation parent-enfant)?

    Je suis sur de pouvoir faire en sorte que ça fonctionne en déclarant mes évènements de clsEvent dans clsEvents puis de créer des évènements dans clsEvents pour être utilisés dans mon userform... Mais j'ai le sentiment qu'il existe une solution plus puissante ! Avez vous un lien vers quelque chose qui en parle?

    Encore merci !
    Cependant concernant le même sujet, avez vous des infos sur comment procéder pour gérer les évènement d'un module clsEvent à partir du module clsEvents (qui est une collection de clsEvent)?

    Je ne sais pas si ma question est bien claire...


    [Edit]: Hummm pas si simple, je suis obligé de créer une Sub dans clsEvents (qui est ma collection d'instances de clsEvent) qui va faire un RaiseEvent. Puis dans clsEvent, j'appelle la sub du clsEvents...
    Mais je ne trouve pas ça super propre :/
    Je vais continuer de chercher une autre solution.

    [Edit2]: Pour ceux qui repassent par ici, j'ai trouvé la réponse à ma question ici :
    https://tissotemmanuel.developpez.co...lasse/#LIV-D-6


    Merci à tous d'avoir pris de votre temps pour m'aider !

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

Discussions similaires

  1. [2.x] Modifier les nom des champs dans un formulaire
    Par marwazmandar dans le forum Symfony
    Réponses: 30
    Dernier message: 27/06/2012, 18h23
  2. Modifier les options de TLIB dans un projet C++ Builder XE2
    Par TsCyrille dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/02/2012, 09h30
  3. Modifier les NULL par Zéro dans les selections
    Par tarek_ep dans le forum SQL
    Réponses: 1
    Dernier message: 02/06/2011, 10h19
  4. Modifier les mots de passe dans Windows
    Par Blizz4rd dans le forum API, COM et SDKs
    Réponses: 1
    Dernier message: 09/02/2010, 13h40
  5. [.NET]Modifier les variables d'environnement dans...
    Par GusS dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 09/02/2005, 16h25

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