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 :

[VBA-E] Vider une combobox sur une feuille


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
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Par défaut [VBA-E] Vider une combobox sur une feuille
    Bonjour à tous,

    Je cherche à "vider" une combobox sur une feuille de ses valeurs.
    Je connais la méthode Clear mais elle ne marche apparemment que lorsque la combobox est sur un userform.
    En gros, je cherche le contraire de "ListFillRange", moyen par lequel j'ai rempli ma combobox.
    A noter que j'ai plusieurs contrôles sur ma feuille "Tableau" et de différents types (TextBox, ComboBox, Checkbox et CommandButton). Mes 3 combobox se nomment :
    Liste_Suff_Voie (index 13)
    Liste_Type_Voie (index 14)
    Liste_Libl_Voie (index 15)

    Voilà comment je reinitialise ces trois combobox (sans les vider, bien sur)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            If TypeName(Obj.Object) = "ComboBox" Then
                If Left(Obj.Name, 5) = "Liste" And Right(Obj.Name, 4) = "Voie" Then
                    A = Mid(Obj.Name, 7, 4)
                    With Worksheets("Tableau").OLEObjects("Liste_" & A & "_Voie").Object
                        .Value = ""
                        '.Clear
                        .Enabled = False
                    End With
                End If
            End If


    Merci de vos suggestions.

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Normalement la méthode Clear fonctionne aussi dans la feuille de calcul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim i As Integer
    Dim Tableau()
     
    Tableau = Array("Liste_Suff_Voie", "Liste_Type_Voie", "Liste_Libl_Voie")
     
    For i = 0 To UBound(Tableau)
    Worksheets("Feuil1").OLEObjects(Tableau(i)).Object.Clear
    Next


    bon week end
    michel

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Par défaut
    Bonjour SilkyRoad,

    J'espère que le week-end a été bon, la semaine commence juste et je remets ça !
    Je viens d'essayer la solution mais j'ai un message d'erreur "L'indice n'appartient pas à la sélection"

    Voici comment je l'ai intégrée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Dim Obj as Object        
    Dim Tableau()
    Dim i as Integer
     
        For Each Obj In Feuil1.OLEObjects
            If TypeName(Obj.Object) = "ComboBox" Then
                With Worksheets("Feuil1").OLEObjects(Tableau(i)).Object
                    .Clear
                    .Enabled = False
                End With
                i = i + 1
            End If
        Next Obj
    A noter aussi, la méthode Clear ne passe pas non plus lorsque je fais directement appel à ma combobox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Tableau").Liste_Suff_Voie.Clear
    J'ai le même message d'erreur "L'indice n'appartient pas à la sélection"

    Que se passe-t-il ?

    Merci de votre réponse

  4. #4
    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
    Par défaut
    Il est où ton tableau de contrôles ? Si tu n'as rien dans ton tableau, il est normal qu'avec l'indice i qui ne correspond à rien lui non plus, tu aies une erreur...
    Relis le code de Silky et mets les noms de tes contrôles à la place des siens, incrémente i dans ta boucle, en partant de 0 pour ton premier contrôle et refais l'essai.
    A+

    Edir
    J'ajoute que Silky a mis
    For i = 0 To UBound(Tableau)
    et non
    For each... etc

  5. #5
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 15
    Par défaut
    Bonjour Ouskelnor,

    Bien, j'ai oublié copier coller la ligne qui rempli mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tableau = Array("Liste_Suff_Voie", "Liste_Type_Voie", "Liste_Libl_Voie")
    Mea culpa.

    Sinon, comme je le disais dans mon premier post, j'ai plusieurs contrôles sur ma feuille et de différents types. Le but de ma routine étant de réinitialiser tous ces contrôles, j'utilise donc une boucle For Each ... Logique, non ?
    Ce qui fait que si j'inclus une boucle For dans cette boucle For Each, je réinitialiserai trois fois mes combobox, vu qu'il y en a trois (Lire le premier post : il explique mon problème)!
    En gros, voici ce que cela donne :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Dim Fin As String, Ligne_Fin As String, Idx_CB As String, A As String
        Dim i As Integer, J As Integer, K As Integer, L As Integer
        Dim Obj As Object
        Dim Tableau()
     
        J = 1
        K = 1
        Tableau = Array("Liste_Suff_Voie", "Liste_Type_Voie", "Liste_Libl_Voie")
     
        For Each Obj In Feuil1.OLEObjects
            If TypeName(Obj.Object) = "CheckBox" Then
                Idx_CB = Obj.Index
                If Idx_CB >= 1 And Idx_CB <= 12 Then
                    Worksheets("Tableau").OLEObjects("CheckBox" & Idx_CB).Object.Value = False
                End If
            End If
            If TypeName(Obj.Object) = "ComboBox" Then
                With Worksheets("Feuil1").OLEObjects(Tableau(i)).Object
                    .Clear
                    .Enabled = False
                End With
                i = i + 1 
            End If
            If TypeName(Obj.Object) = "TextBox" Then
                If Left(Obj.Name, 6) = "ZT_Tel" Then
                    Worksheets("Tableau").OLEObjects("ZT_Tel_" & J).Object.Value = ""
                    Worksheets("Tableau").OLEObjects("ZT_Tel_" & J).Object.Enabled = False
                    J = J + 1
                End If
                If Left(Obj.Name, 6) = "ZT_Fax" Then
                    Worksheets("Tableau").OLEObjects("ZT_Fax_" & K).Object.Value = ""
                    Worksheets("Tableau").OLEObjects("ZT_Fax_" & K).Object.Enabled = False
                    K = K + 1
                End If
            End If
        Next Obj
    Et avec ce code, j'ai le message d'erreur "L'indice n'appartient pas à la sélection", malgré que la valeur de Tableau(0) soit correcte : "Liste_Suff_Voie" !

  6. #6
    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
    Par défaut
    Si tu utilises le code de Silky, alors utilise-le complètement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sa boucle "for i  = 0 to Ubound(LeTableau)"
    ne te dit rien ?
    A quoi te sert ton tableau si tu ne l'utilises pas.
    Un code qui fonctionne t'a été donné et tu copies une partie par-ci par-là et tu t'étonnes que ça ne fonctionne pas.
    Que veux-tu de plus ? un code qui ne fonctionne pas ? Pour ça tu as le tien.
    Commence par essayer de comprendre.

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

Discussions similaires

  1. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  2. Valeur Par défaut sur une Combobox attaché à une collection
    Par olufade dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 26/08/2009, 17h47
  3. Détecter le click sur une combobox d'une datagridview
    Par Delphi-ne dans le forum Windows Forms
    Réponses: 11
    Dernier message: 21/04/2009, 11h22
  4. Réponses: 2
    Dernier message: 30/10/2008, 13h28
  5. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21

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