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 :

problème avec Controles MSForms [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut problème avec Controles MSForms
    Bonjour. J'étais content d'avoir terminé une étude, lorsqu'après "amélioration" je m'aperçus que ça ne fonctionnait plus!
    L'amélioration consistait à ajouter 3 OptionButton à la feuille MENU qui contenait déjà 13 CheckBox. J'ai mis un petit moment avant de trouver l'instruction qui "merdait" et j'ai fait une petite proc pour mettre cela en évidence. Voici la proc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub TEST_PROC()
    Dim CB As OLEObject, Cpt%, AI As Boolean
        For Each CB In ActiveSheet.OLEObjects
            Cpt = Cpt + 1
            If TypeOf CB.Object Is MSForms.CheckBox Then
                MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & CB.Object.Caption & vbTab & CB.OLEType, , "CheckBox"
            End If
            If TypeOf CB.Object Is MSForms.OptionButton Then
                MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & CB.Object.Caption & vbTab & CB.OLEType, , "OptionButton"
            End If
        Next
        MsgBox "fin boucle"
    End Sub
    RESULTAT: Pour tout ce qui est différent de CheckBox et OptionButton, RAS.
    Pour les 13 CheckBox, seul le 1er MsgBox est exécuté, normal.
    Et c'est là que je ne comprends plus, car pour les OptionButton, les 2 MsgBox sont exécutés; c'est à dire que les OptionButton sont aussi considérés comme des CheckBox... C'est ce qui faisait planter ma proc initiale!

    Merci de m'indiquer s'il y a une autre méthode pour sélectionner uniquement les CheckBox car j'avoue être un peu dépassé.
    Si quelqu'un peut me donner une explication tangible...
    D'avance merci.

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Voici un exemple qui passera tes 13 checkbox en 'non coché', reste a adapter pour ton cas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For k = 1 to 13
             sheets("Feuil1").checkboxes(k)=unchecked
    next
    A+

  3. #3
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut réponse à Fvandermeulen
    Bonjour et merci, mais sauf erreur de ma part cette propriété ne s'applique qu'aux info-bulles. J'ai tout de même fais l'essai (on ne sait jamais!) mais j'ai obtenu l'erreur 1004.
    Quelqu'un a-t-il testé ma proc, en créant 2 ou 3 ChekBox et OptionButton pour verifier si, pour les OptionButton, les 2 messages s'affichent?
    Cdlt.

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour Fanfan2A Fvandermeulen le forum
    en attendant pas trop le temps d'approfondir

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TEST_PROC()
    Dim CB As OLEObject, Cpt%, AI As Boolean
    For Each CB In ActiveSheet.OLEObjects
    Cpt = Cpt + 1
    If TypeOf CB.Object Is MSForms.CheckBox And Not TypeOf CB.Object Is MSForms.OptionButton Then
    MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & CB.Object.Caption & vbTab & CB.OLEType, , "CheckBox"
    End If
    Next
    MsgBox "fin boucle"
    End Sub

  5. #5
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Bonsoir,

    Je confirme que pour un contrôle de type OptionButton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeOf CB.Object Is MSForms.CheckBox
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TypeOf CB.Object Is MSForms.OptionButton
    retourne Vrai (True).

    Je dirais que cela nous montre que la classe OptionButton est basée sur (inherits) la classe CheckBox, c'est une mise en garde à se rappeler lors de l'utilisation de TypeOf().

    --> la meilleure solution pour pallier à ce problème est d'utiliser la fonction Typename() qui à mon sens plus fiable dans ce cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub TEST_PROC()
    Dim CB As OLEObject, Cpt%, AI As Boolean
        For Each CB In ActiveSheet.OLEObjects
                Cpt = Cpt + 1
            If UCase(TypeName(CB.Object)) = "CHECKBOX" Then
                MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & _
                CB.Object.Caption & vbTab & CB.OLEType, , "CheckBox"
            ElseIf UCase(TypeName(CB.Object)) = "OPTIONBUTTON" Then
                MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & _
                CB.Object.Caption & vbTab & CB.OLEType, , "OptionButton"
            End If
        Next
            MsgBox "fin boucle"
    End Sub
    bonne soirée

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour à tous,

    Je vois que ça a bien avancé et il semble que la solution de casavba réponde parafaitement au problème, toutefois pour revenir sur ma proposition j'aimerais comprendre l'erreur 1004 car chez moi cette méthode ne m'a jamais fait faux bon...

    A+

  7. #7
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour tous le forum
    Fvandermeulen je pense que si il utilise TypeOf ou TypeName ces CHECKBOXS sont renommees ????

    ps pour info . en passant par typename on peut simplifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub es()
    Dim CB As OLEObject, Cpt As Byte, AI As Boolean
    Cpt = Cpt + 1
    For Each CB In Feuil1.OLEObjects
    If TypeName(CB.Object) = "CheckBox" Then
    MsgBox "Compteur=" & Cpt & SL & CB.Name & vbTab & CB.Object.Caption & vbTab & CB.OLEType, , "CheckBox"
    End If: Next
    MsgBox "fin boucle"
    End Sub

  8. #8
    Membre averti
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Par défaut
    Bonjour à tous et merci pour votre aide.
    Merci à casavba pour ta solution simple et efficace (il est vrai qu'on ne pense pas toujours aux choses simples...)

    Réponse à Fvandermeulen: j'ai retester ta méthode (bien que je recherche surtout à traiter le nom des contrôles uniquement si c'est un CheckBox) et j'obtiens bien une erreur "1004". Peut-être as-tu Office 2007? Pour ma part, avec Office 2003 (Excel 2003 Pro 11.8307.8202 SP3), cela ne fonctionne pas!
    Encore merci.
    Cdlt.

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

Discussions similaires

  1. [Débutant] Problème avec controles Infragistics 3.1
    Par marot_r dans le forum VB.NET
    Réponses: 0
    Dernier message: 15/10/2012, 20h38
  2. Problème avec Control Panel et lien hypertexte
    Par PatStan17 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 11/08/2010, 15h10
  3. Problème avec control ASCX qui "disparait"
    Par harry25 dans le forum ASP.NET
    Réponses: 3
    Dernier message: 22/10/2007, 18h46
  4. Réponses: 4
    Dernier message: 21/08/2006, 09h38
  5. Problème avec control parent de type TDrawGrid
    Par slylafone dans le forum C++Builder
    Réponses: 2
    Dernier message: 09/11/2005, 17h32

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