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 :

Rechercher le nom de l'userform "parent" de controles [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Juillet 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Agent de maitrise

    Informations forums :
    Inscription : Juillet 2017
    Messages : 6
    Par défaut Rechercher le nom de l'userform "parent" de controles
    Bonjour,

    Dans le fichier ci-dessous, j'ai crée plusieurs userforms me permettant d’afficher "dynamiquement" de la somme de valeurs renvoyées par des groupes d'optionbuttons ou de checkbox.
    test.xlsm...

    Pour cela, j'ai regroupé ces optionsbuttons et checkbox dans un module de classe, et ainsi permettre le lancement d'une procédure évènementielle lorsqu'un de ces contrôles sont sélectionnés.
    Ce module de classe est commun a tous mes userforms.
    je me suis très largement inspiré de cet exemple :https://www.developpez.net/forums/d9...urs-controles/ (merci Arkham46 ! )

    Tout fonctionne lorsque les optionbuttons/checkbox sont uniquement dans des frames. (cf. userform1)

    Par lorsque ces contrôles sont dans un multipage, la procédure évènementielle plante... (cf. userform 2)
    l'erreur provient de la fonction permettant rechercher le nom du userform parent, mais je n'arrive pas a résoudre le problème


    Quelqu'un pourrait m'éclairer ?
    merci

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour


    fait un boucle do/loop en remontant le parent jusqu'au nom de l'userform
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre à l'essai
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Juillet 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Agent de maitrise

    Informations forums :
    Inscription : Juillet 2017
    Messages : 6
    Par défaut
    merci de ta rapidité Patrick.
    Avant de trouver la solution d'Arkham46, j'avais penser faire une boucle, mais je n'ai abouti à rien de satisfaisant (boucle infini, etc...)
    j'avais donc abandonner cette piste...
    Peux-tu être plus explicite ?

    cdt,

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut
    exemple
    prends le nom de n'importe quel control dans un useform ce control il faut qu'il soit dans une frame que est dans une autre frame qui est dans une autre....etc....


    set parent=cecontrol.parent
    do:set parent=parent.parent:loop until typename(parent)="Userform"
    msgbox paent.name

    j'ai cru comprendre que tu avais une classe normalement tu aurais du le prévoir ca en incorporant le userform avec son withevent associé
    n'en ayant pas plus je ne peux t'en dire plus
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre à l'essai
    Homme Profil pro
    Agent de maitrise
    Inscrit en
    Juillet 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Agent de maitrise

    Informations forums :
    Inscription : Juillet 2017
    Messages : 6
    Par défaut
    Decidement je n'arrive a rien en essayant une boucle do/loop... même avec tes conseils.


    Pour reprendre mon code existant, le module de classe est le suivant :

    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
    Public WithEvents optbox As MSForms.OptionButton
     
     
    Private Sub optbox_Click()
     
    Call getParentForm(optbox).calcul_CoutTotal
     
    End Sub
     
     
     
    Private Function getParentForm(pcontrol As Control) As Object
     
    If TypeOf pcontrol.parent Is Frame Or TypeOf pcontrol.parent Is Page Or TypeOf pcontrol.parent Is MultiPage Then
        Set getParentForm = getParentForm(pcontrol.parent)
    Else
         Set getParentForm = pcontrol.parent
    End If
     
    End Function
    Lorsqu'un optionbutton est sélectionné, l'evemement lance la procédure "calcul_CoutTotal" située dans l'userform chargé. (chaque userform comprend cette procédure, dont le contenu peut être différent d'un userform à l'autre).

    Comme dit précédemment, la fonction "getParentForm" fonctionne très bien lorsque les optionbuttons sont uniquement dans des Frames, pas pas lorsqu'ils sont dans un Multipage... (la fonction ne remonte pas jusqu'au nom de l'userform, mais s'arrete à la page du multipage...)
    je cherche a comprendre pourquoi et une solution pour y parvenir.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    je suis curieux de voir le code de ta classe

    normalement tu n'a bersoins de rien de tout ca le parent (userform) peut etre intégré a la classe même si le parent du control n'est pas directement le userform
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    On ne peut connaître le parent d'une objet que si cet objet est une fenêtre à part entière (dotée d'un hwnd) et que le parent est lui-même doté d'un hwnd
    Un optionButton n'est pas une fenêtre Windows à part entière (pas de hwnd). Le parent reconnu est alors celui de la fenêtre qui contient ce contrôle et lorsque l'on clique sur un tel contrôle, c'est la position du curseur sur LA FENETRE PARENT qui intervient (et on a donc cette fenêtre parent).
    Si par exemple le Frame n'est pas une fenêtre à part entière contenant un optionbutton, ce sera directement le parent du Frame (le userform, qui, lui, est une fenêtre à part entière)

    Quelle est exactement la nature d'une "fenêtre" Multipage ? Si pas fenêtre Windows à part entière, ma foi ...

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

Discussions similaires

  1. Requête sélection : recherche par nom
    Par leeloo77 dans le forum Access
    Réponses: 7
    Dernier message: 17/02/2006, 15h39
  2. [MySQL] Recherche FULL TEXT IN BOOLEAN MODE et les Quotes
    Par GarGamel55 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 23/01/2006, 20h01

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