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 :

Ré initialiser des comboBox dans une boucle for each


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut Ré initialiser des comboBox dans une boucle for each
    Bonjour tout le monde,

    j'aimerai pouvoir faire une procédure pour remettre les comboBox d'une feuille à "0", j'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub resetCB()
    Dim shp As Shape
        For Each shp In Worksheets("FormulaireHeure").Shapes
            If Left(shp.name, 3) = "CB_" Then
                Set cbox = shp.ControlFormat
                    cbox.Value = ""
                    cbox.Activate
                    cbox.Visible = False
            End If
        Next shp
    End Sub
    Erreur 438...
    Avec ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub resetCB()
    Dim shp As OLEObject
        For Each shp In Worksheets("FormulaireHeure").OLEObjects
            If Left(shp.name, 3) = "CB_" Then
                Set cbox = shp.Object
                    cbox.Value = ""
                    cbox.Activate
                    cbox.Visible = False
            End If
        Next shp
    End Sub
    erreur: propriété "value" non répertorié...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub resetCB()
    Dim shp As OLEObject
        For Each shp In Worksheets("FormulaireHeure").OLEObjects
            If Left(shp.name, 3) = "CB_" Then
                Set cbox = shp.OLEType
                    cbox.Value = ""
                    cbox.Activate
                    cbox.Visible = False
            End If
        Next shp
    End Sub
    Erreur d'incompatibilité de type.

    Je sais pas comment faire, mais la méthode me permettrai d'améliorer d'autres éléments de mon classeur, car il devient de plus en plus illisible...

    Merci d'avance pour vos indications, et je vous souhaite un bon réveillon de Noël.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sauf erreur de ma part et de mémoire, pour initialiser une liste d'un ComboBox et ListBox c'est Object.List.ClearObject est le nom de l'objet

    [EDIT]
    Ah oui, je devrais me méfier de ma mémoire
    C'est effectivement Object.Clear
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    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

    ComboBox1.Clear ou ListBox1.Clear
    "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...
    ---------------

  4. #4
    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
    A la relecture, je vois que tu parles d'un combobox de formulaire, inclus donc dans un shape sur la feuille=> shp.ControlFormat.RemoveAllItems devrait convenir
    "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...
    ---------------

  5. #5
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Merci Philippe, merci Pierre,

    mais j'aurais dû formuler mes demandes plus clairement et y apporter des précisions.

    Par moment, lorsque je fais disparaitre une comboBox, la liste reste présente sur la feuille.
    De ce que j'ai pu trouver sur la toile, il faut activer la combobox, puis la rendre invisible pour contourner le problème.

    Et par la même occasion, je souhaitai supprimer la valeur, et le tout pour toute les combobox de la feuille. D'où l'intérêt de la boucle for each.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub testClearCB()
        Dim shp As OLEObject
        For Each shp In Worksheets("FormulaireHeure").OLEObjects
            If Left(shp.name, 3) = "CB_" Then
            Set cbox = shp.QuoiDonc
                cbox.clear
                cbox.Activate
                cbox.Visible = False
            End If
        Next shp
    End Sub
    Bref, je continue de chercher...

  6. #6
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut

    A la relecture, je vois que tu parles d'un combobox de formulaire, inclus donc dans un shape sur la feuille=> shp.ControlFormat.RemoveAllItems devrait convenir
    C'est un contrôle activex.

  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
    Désolé, mais je n'ai pas compris ce que tu souhaites faire.

    C'est quoi faire disparaître?
    Quelle liste reste visible?
    Quelle valeur veux-tu supprimer?

    Ton combobox est a priori lié à une plage de données, mais "faire disparaître" le combobox ne supprime évidemment pas la plage liée. Idem pour la "valeur". Ton combobox renvoie l'index de la ligne sélectionnée dans une cellule, mais évidemment, cette cellule reste là malgré la "disparition" de ton combo...
    "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
    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
    Citation Envoyé par weetoz Voir le message
    C'est un contrôle activex.
    Les codes donnés à 15h05 et à 16h09 ne sont pas du tout les mêmes et ne parlent pas des mêmes objets. Le post initial indique des combobox de formulaire, le code donné à 16h09 illustre l'utilisation d'un activex... ^^


    La façon de réinitialiser un combobox activex d'une feuille est la suivante : Feuil1.ComboBox1.Clear...


    Pour boucler sur les contrôles OleObject de la feuille et réinitialiser les combobox, tu pourrais utiliser ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
      Dim ctl As OLEObject
     
      For Each ctl In Feuil1.OLEObjects
        If TypeName(ctl) = "ComboBox" Then ctl.Object.Clear
      Next
    End Sub
    "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...
    ---------------

  9. #9
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Je souhaite faire disparaitre toutes les comboBox et ré initialisé leurs valeurs, d'une part. Les combobox ne sont pas lié à des cellules.
    D'autre part, je voudrai régler ce problème de liste ( que l'on fait apparaitre avec .dropdown) qui reste sur l'écran lorsque l'on rend invisible une ou plusieurs combobox.
    J'ai trouvé très peu d'information sur ce problème, à part qu'il faut activer la combobox avant de la rendre invisible.

    Je m'excuse si des fois mon vocabulaire porte à confusion et également le manque de précision, j'ai du mal à pas m’emmêler les crayons.

  10. #10
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Les codes donnés à 15h05 et à 16h09 ne sont pas du tout les mêmes et ne parlent pas des mêmes objets. Le post initial indique des combobox de formulaire, le code donné à 16h09 illustre l'utilisation d'un activex... ^^
    Dans le post de 15h05, j'illustre 3 essais qui n'ont pas fonctionné, le premier, effectivement ne correspond pas à un activeX, mais les deux autres eux oui.
    Encore désolé pour le sac de noeud...

  11. #11
    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
    Citation Envoyé par weetoz Voir le message
    [...]
    Encore désolé pour le sac de noeud...
    Pas de soucis. C'est juste pour comprendre la configuration de ton classeur...

    Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Test()
      Dim ctl As OLEObject
     
      For Each ctl In Feuil1.OLEObjects
        If TypeName(ctl.Object) = "ComboBox" Then
          ctl.Object.Clear
          ctl.Visible = False
        End If
      Next
    End Sub
    "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...
    ---------------

  12. #12
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    En passant de ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each shp In Worksheets("FormulaireHeure").OLEObjects
    à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each shp In Feuil1.OLEObjects
    ça fonctionne, reste à voir si ce procédé résoudra la liste qui reste apparente sans que j'arrive à en connaitre la cause.
    Bien vu Pierre, mais je ne comprends pas le pourquoi du comment...

    Bon, je suis en train de me faire jeter du bureau
    Merci Pierre, merci Philippe pour votre aide.
    Je vous souhaite un bon réveillon.

  13. #13
    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
    Si Feuil1 pointe bien vers Worksheets("FormulaireHeure"), alors tu manipules le même objet par les deux codes et ils devraient tous les deux fonctionner.

    Es-tu sûr que Feuil1 et Worksheets("FormulaireHeure") sont bien la même feuille? Vois le billet de Philippe à ce sujet:
    https://www.developpez.net/forums/bl...sant-codename/


    Bon réveillon et bonne fin d'année à toi aussi
    "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...
    ---------------

Discussions similaires

  1. [Débutant] utilisation des Textbox dans une boucle For
    Par zayoub dans le forum VB.NET
    Réponses: 31
    Dernier message: 28/07/2011, 15h55
  2. [PHP 5.3] Tester des conditions dans une boucle for
    Par coulane dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2010, 11h50
  3. Variable après un ComboBox dans une boucle FOR
    Par Dream Master dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/05/2007, 09h26
  4. initialiser les vertex dans une boucle for
    Par StrikerFred dans le forum DirectX
    Réponses: 10
    Dernier message: 26/09/2006, 10h36

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