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 :

Remplir un combobox avec un nom variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut Remplir un combobox avec un nom variable
    Salut forum,

    J'ai une feuille de calcul qui contient 100 combo box.
    Comment faut-il s'y prendre pour les remplir?
    J'arrive à adresser les shapes je ne sais pas comment adresser les objets pour utiliser leurs méthodes.
    Dans le code ci-dessous, je peux rendre visible ou invisible les combo box mais dès que j'essaye d'utiliser clear ou additem j'ai biensûr une erreur d'exécution 438: Propriété ou méthode non gérée par cet objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Worksheet_Change(ByVal Target As Range)
     
        If Target.Row = 1 Then
            If Sheets("Colonnes").Cells(Target.Row, Target.Column).Value = "" Then
                Sheets("Colonnes").Shapes("CBFormat" & Target.Column - 1).Visible = False
            Else
                Sheets("Colonnes").Shapes("CBFormat" & Target.Column - 1).Visible = True
            End If
        End If
     
    End Sub
    Merci d'avance,
    Jean

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Regarde du coté de la propriété "ControlFormat" :
    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
     
    Sub Test()
     
        Dim Combo As Shape
     
        'défini la variable objet
        Set Combo = Sheets("Colonnes").Shapes("CBFormat" & Target.Column - 1)
     
        'remplissage style RowSource d'un ComboBox ActiveX
        Combo.ControlFormat.ListFillRange = "Feuil2!A1:A10"
     
        'remplissage avec une boucle
        For I = 1 To 10
            Combo.ControlFormat.AddItem "Elément n° " & I
        Next
     
        'élément choisi
        With Combo.ControlFormat
            MsgBox .List(.ListIndex)
        End With
     
        'supprime tout
        Combo.ControlFormat.RemoveAllItems
     
        'supprime 1 élément (ne fonctionne pas si le remplissage est effectué avec "ListFillRange")
        Combo.ControlFormat.RemoveItem 3
     
        'en gras
        Combo.TextEffect.FontBold = msoCTrue
     
        'Etc...
     
    End Sub

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut
    Salut Theze,

    Merci de t'intéresser à mon problème.
    J'ai testé ta solution mais j'ai toujours la même erreur.
    Ce qui est bizarre c'est que lorsque je saisie "combo.controlformat." dans la fenêtre d'exécution en debuggage, le système m'offre bien la possibilité d'utiliser les propriétés du combobox (additem, list, removeitem,...) mais quand je les utilise il me dit que la Propriété ou la méthode est non gérée par cet objet???!!!

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    poste un classeur exemple avec deux ou trois ComboBox !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2004
    Messages : 237
    Par défaut
    Voilà le classeur.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Tes ComboBox sont en fait des contrôles ActiveX qui sont aussi considérés comme des Shapes mais qu'il est préférable de traités comme des objets OLE (objets intégrés à la feuille) donc, le code du bouton "Afficher" devient :
    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
     
    Private Sub CBAfficher_Click()
     
        Dim Objet As OLEObject 'tous contrôles ActiveX
        Dim Combo As MSForms.ComboBox
        Dim i As Integer
     
        'cache/affiche si le nom du contrôle contient "CBFormat"
        For Each Objet In OLEObjects
            If InStr(Objet.Name, "CBFormat") <> 0 Then Objet.Visible = Not Objet.Visible
        Next Objet
     
        'défini le contrôle comme ComboBox afin d'utiliser les propriétés propres à ce type de contrôle
        'de ce fait, le contrôle n'est plus un contrôle générique mais bien un ComboBox
        Set Combo = Me.OLEObjects("CBFormat1").Object
     
        Combo.Clear
     
        For i = 1 To 10
            Combo.AddItem "Elément n° " & i
        Next
     
    End Sub
    On pourrait très bien utiliser le code de cette façon (en ce passant de la variable "Combo") :
    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
     
    Private Sub CBAfficher_Click2()
     
        Dim Objet As OLEObject 'tous contrôles ActiveX
        Dim i As Integer
     
        'cache/affiche si le nom du contrôle contient "CBFormat"
        For Each Objet In OLEObjects
            If InStr(Objet.Name, "CBFormat") <> 0 Then Objet.Visible = Not Objet.Visible
        Next Objet
     
        Me.OLEObjects("CBFormat1").Object.Clear
     
        For i = 1 To 10
            Me.OLEObjects("CBFormat1").Object.AddItem "Elément n° " & i
        Next
     
    End Sub
    mais dans ce cas, on se prive de l'intellisense qui nous permets d'avoir la liste des propriétés et méthodes de l'objet.
    Si tu as un soucis avec "Dim Combo As MSForms.ComboBox" il te suffit juste d'ajouter à ton projet un UserForm afin d'activer la référence et ensuite, tu peux le supprimer, la référence restera liée au classeur.

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

Discussions similaires

  1. [C#] Remplire un comboBox avec un fichier XML
    Par Roach dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/09/2005, 20h45
  2. Comment remplir un ComboBox avec le nom des feuilles Excel ?
    Par libracom dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 27/06/2005, 15h14
  3. [C#] Remplir une combobox avec le champs d'une table Access
    Par Damsou dans le forum Windows Forms
    Réponses: 4
    Dernier message: 23/06/2005, 15h31
  4. [VB.NET] Remplir une ComboBox avec une requete sql
    Par graphicsxp dans le forum Windows Forms
    Réponses: 6
    Dernier message: 22/03/2005, 15h29
  5. Réponses: 2
    Dernier message: 26/07/2004, 13h34

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