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 :

variable objet VBA excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut variable objet VBA excel
    Bonjour à tous,

    Je sais, ce sujet a déjà été traité (sous le même titre d'ailleurs je viens de lire le topic).

    Alors pourquoi revenir dessus ?
    Parce que la solution proposée, qui semble très marcher chez les autres ne fonctionne pas chez moi !

    Mes controles s'appellent CheckBox1,CheckBox2,... ou
    ToggleButton1,ToggleButton2,...

    Avec un code aussi simple que ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 1 To 2
        Controls("CheckBox" & I).Visible = False
    Next
    j'obtiens systématiquement l'erreur :
    Erreur de compilation - Sub ou Fonction non définie
    A l'origine, ce que je voulais était:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For I = 1 To 2
        Controls("ToggleButton" & I)= False
    Next
    Même erreur, d'ailleurs.

    Alors, pourquoi cette erreur, alors que ce code si simple semble convenir à tout le monde ?

    Si quelqu'un a une idée, merci d'avance !!!!

    Mike

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    par hasard, tu n'as pas une référence manquante?
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Bonjour Mercatog,

    quelle rapidité !

    Mais je ne suis pas sûr de bien comprendre la question:
    si tu veux savoir si les objets ToggleButton1 et ToggleButton2, ainsi que Checkbox1 et Checkbox2 existent, c'est bien le cas. Vérifié.

    Si tu veux dire autre chose, je n'ai pas compris.

    Merci de ton aide

    Mike

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    tes controls sont bien sur un userform?

    ma précédente question portait sur les références de ton vba
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par mercatog
    tes controls sont bien sur un userform?
    me paraît être la bonne question

  6. #6
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour, question dans userform tes controls sont pas renommées par hasard ??

    si c'est le cas il faut utiliser TypeOf ou TypeName

    un exemple basique a adapter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub CommandButton1_Click()
    Dim i As Byte, j As Control
    For Each j In Controls
    If TypeName(j) = "CheckBox" Then
    i = i + 1
    If i < 3 Then j.Visible = False
    End If: Next
    End Sub
    si ils sont sur une feuille & non renommées tu peus tenter cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub es()
    Dim i As Byte
    For i = 1 To 2
    ActiveSheet.Shapes("CheckBox" & i).Visible = False
    Next
    End Sub
    sur feuille en utilisant OLEObjects

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub essai()
    Dim obj As OLEObject
      For Each obj In ActiveSheet.OLEObjects
      If TypeOf obj.Object Is MSForms.CheckBox Then
         'TON CODE
           End If
     Next obj
    End Sub
    SALUTATIONS

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Re-bonjour,

    Merci à tous pour vos réponses !
    Voyons ça en détail:

    Mercatog et Ouskelnor:
    non, mes controles ne sont pas dans un userform(et ne sont pas renommés);
    j'avoue que je ne vois pas très bien quelle différence ça fait; un controle n'est-il pas le même qu'il se trouve sur la feuille ou dans un userform ? J'aimerais comprendre ce que ça implique.

    Laetitia:
    Merci pour les propositions de code, mais :

    pour ce qui est de la 1ère, l'instruction:
    déclenche:
    Erreur d'exécution: Objet requis
    Pour ce qui est de la 2e, qui est très proche d'un des très nombreux essais que j'avais tentés avant de crier au secours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes.Controls("CheckBox" & i).Visible = False
    déclenche:
    Erreur d'exécution: Propriété ou méthode non gérée par cet objet
    Quant à la 3e proposition, la plus lourde quand même, puisqu'elle passe en revue TOUS les contrôles, elle ne déclenche pas d'erreur et fonctionne), si, dans la partie que tu as laissée en blanc
    'TON CODE
    je mets
    CheckBox1.Visible = True
    Mais comment faire avec un nom de variable ?

    J'en suis donc pratiquement toujours au même point

    Tout compte fait, je serais peut-être bien inspiré d'utiliser un userform, mais du diable si je comprends pourquoi (voir plus haut)

    Encore merci à tous, et si vous avez quelqu'info, je suis toujours preneur

    Mike

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Dans une feuille de calculs, les objets sont de shapes. Peuvent également être des graphes, et d'autres choses encore mais pas des "controls"
    Donc, si tu nommes ton shapes, tu devrais pouvoir t'en sortir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 to ActiveSheet.Shapes.Count
         ActiveSheet.Shapes(i).Visible = False
    Next
    Pas testé. Tu peux faire ça pour nous ?
    Tu peux aussi tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes("CheckBox" & i).Visible = False
    A+

  9. #9
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re,le premier exemple il marche pas c'est normal c'est pour un user!!!!
    le 2ieme exemple je viens de tester ca marche???
    2 CheckBox sur une feuille non renommées pris dans boite a outils controles
    ActiveSheet=que la feuille soit active

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 2
    ActiveSheet.Shapes("CheckBox" & i).Visible = False
    Next
    Mais comment faire avec un nom de variable ?
    la je comprends pas

    essai deja ce que subgere l'ami ouskel
    au pire met un zip qu'on puissent tester comme cela pas simple

    autremement passer par un module de classe
    SALUTATIONS

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu peux tester ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Variable = "CheckBox" & i
    Activesheet.shapes(Variable).visible = false
    pas testé

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Re bonsoir, mes amis de ce soir,

    on progresse, mais... je m'explique

    Tout d'abord, mea culpa, la proposition, proposée par vous d'ailleurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Shapes("CheckBox" & i).Visible = False
    fonctionne effectivement sans problème; c'est moi qui avait malencontreusement laissé trainer des crochets où il fallait des parenthèses (quand on travaille avec 2-3 langages dans la même journée, ça embrouille un peu)
    je peux donc faire apparaitre/disparaitre mes objets. Donc on progresse disais-je !

    Je suis d'ailleurs arrivé à faire fonctionner aussi la version avec OLEObjects de Laetitia.

    Mais, j'avais simplifié le problème au maximum pour vous le présenter.
    En effet, je ne souhaite pas seulement gérer la visibilité des objets en questions, mais aussi leur valeur. Ainsi, je veux pouvoir dans la même boucle pouvoir décocher toutes les checkbox, par exemple ou "désenfoncer" tous les toggleButtons. Et ça, je n'y arrive pas !
    Cà, j'ai comme l'impression d'avoir compris que j' n'y arriverai que dans une userform.

    Pourtant, on mode direct, il est parfaitement possible d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ToggleButton2_Click()
    If ToggleButton2 Then
        ToggleButton1 = False
        ToggleButton3 = False
        ......
    End If
    End Sub
    Mais je voulais y arriver avec une boucle !

    Enfin, je crois que je vais passer par un userform.

    Encore merci de votre aide; elle m'a permis d'apprendre quelques petits trucs que je connaissait pas

    Mike

  12. #12
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re,mikeduff pas tous a fait d'accord avec toi!!! tu peus faire la meme chose sur une feuille que passer par un user. mais il faut passer par un ou des modules de classe pour simplifier le code a sa plus simple "expression". fait une recherche sur les modules de classes si tu y arrives pas reviens nous voir.
    SALUTATIONS

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Merci Laetitia,

    J'ai fait des recherches sur les modules de classe et leur usage et j'ai appris des tas de choses que je ne connaissais pas !!

    Je suis même arrivé exactement au résultat que je voulais (du moins jusqu'à présent, car j'ai l'art de toujours vouloir plus

    Cela dit, si j'ai compris les grands principes et ai pu les appliquer dans un cas assez simple, je suis encore loin de maitriser le sujet des classes et des collections d'objets.

    Mais le sujet semble très prometteur, et je suis sûr que ce n'est pas la dernière fois que je m'y frotte.

    Encore merci des tuyaux et du soutien
    Peut-être @ plus

    Mike

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 61
    Points : 53
    Points
    53
    Par défaut
    Re-bonjour,

    c'est encore moi

    J'avais bien dit que je n'étais pas au bout du sujet (bien que je l'ai noté comme "Résolu")

    J'avance, mais je n'arrive toujours pas à faire ce que je voudrais.

    J'ai une série de ToggleButtons (sur la feuille).
    Je les ai, sur le conseil de Laetitia, inclus dans une collection - classe.

    Lorsque je les actionne, je récupère bien certaines de leurs propriétés (nom du bouton, position sur la feuille), ce qui est déjà une bonne partie de ce que je cherchais.

    Mais je ne comprends toujours pas s'il y a moyen d'accéder à chacun de ces objets. Ainsi, l'idée est que, lorsqu'on actionne un bouton (à VRAI), tous les autres reviennent à FAUX (un peu comme le ferait un bouton radio)

    J'ai essayé des trucs du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for I=A to Collect.count
       Collect(i)=false
    next
    et toute une série de variantes sur le même thème, avec pour seul résultat des messages d'erreur.

    Histoire d'illustrer les choses, je joins un petit tableur de test

    Merci encore de bien vouloir m'aider à apprendre.

    Mike
    Fichiers attachés Fichiers attachés

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Comme je vois que tu n'as pas encore eu de réponse, je te propose quelque chose d'incomplet des fois qu'un meilleur trouve une solution qui ne soit pas une usise à gaz.
    Le pb :
    De visu c'est la validation d'un bouton, quand un autre est déjà validé, qui réclame deux clics pour passer à True.
    Sinon, l'init des boutons non sélectionnés se fait bien.
    Si on creuse, on comprend bien que le changement d'état des boutons invalidés provoquent l'événement change... pas click. Or on constate un passage par le click pour chaque bouton invalidé... Et cépabien
    J'en suis là
    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
    Public WithEvents ToggleGroup As MSForms.ToggleButton
     
    'Evenement Click sur les CheckBox de la feuille de calcul.
    Private Sub ToggleGroup_Click()
    Dim BOUTON As Variant, LeBouton As OLEObject
     
        LIGNE = ToggleGroup.TopLeftCell.Row
        Cells(LIGNE, 3) = ToggleGroup.Value
        For Each LeBouton In Sheets("Feuil1").OLEObjects
            'verifie s'il s'agit d'un OptionButton
            If TypeOf LeBouton.Object Is MSForms.ToggleButton Then
                'Si ce n'est pas le bouton validé, on le passe à False...
                If LeBouton.Name <> ToggleGroup.Name Then
                    LeBouton.Object = False
                    '... et on place False dans la colonne 3
                    Cells(Sheets("Feuil1").OLEObjects(LeBouton.Name).TopLeftCell.Row, 3) = False
                End If
            End If
        Next
     
    End Sub

  16. #16
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    re, effectivement si sait le but recherche sans passer par une usine gaz cela va être tres difficile pourquoi tu choisis pas des OptionButtons???
    SALUTATIONS

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

Discussions similaires

  1. Variable Objet VBA excel
    Par blade15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/07/2009, 10h57
  2. Modèle objet VBA Excel
    Par Aizen64 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/10/2008, 15h19
  3. variables pour VBA excel
    Par ericdev67 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/09/2008, 21h35
  4. Variable Objet VBA
    Par blade15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/12/2007, 18h41
  5. variables globales vba excel
    Par olodin dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/06/2007, 13h09

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