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 :

ComboBox sur une feuille Excel & ListFillRange [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 794
    Points : 185
    Points
    185
    Par défaut ComboBox sur une feuille Excel & ListFillRange
    Bonjour,

    J'ai aucun souci avec la propriété ListFillRange ComboBox quand menu_1 fait référence à " ='Listes actions'!$A$2:$A$8" :

    Nom : Combobox LitFillRange.jpg
Affichages : 1361
Taille : 7,2 Ko

    Par contre si je créer un tableau nommé Tableau1, petit souci la propriété ListFillRange n'arrive pas à mémoriser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        ComboBox1.ListFillRange = Tableau1
    End Sub
    Et si je créer un nom : liste_menu_1 = DECALER('Listes actions'!$A:$A;1;;NBVAL('Listes actions'!$A:$A)-1), même souci la propriété ListFillRange n'arrive pas à mémoriser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
        ComboBox1.ListFillRange = liste_menu_1
    End Sub
    Avez-vous une explication svp.
    Merci d'avance @+

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonsoir,

    Essayer de coder comme ceci ;
    A remplacer le nom du tableau et colonne par mes vôtres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    ComboBox1.List = Range("NomTable[Nom Colonne]").Listobject.DataBodyRange.Value
    Bav,

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 794
    Points : 185
    Points
    185
    Par défaut
    Bonsoir mfoxy,
    Merci pour votre réponse, je viens de tester ça renvoi :
    Erreur d'exécution '1004' :
    La méthode 'Range' de l'objet'_Worsheet' a échoué

  4. #4
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Re,

    Assez bizarre, j'ai coupé mon Pc donc je ne saurais pas test mais de mémoire, j'aurais écris l'instruction que je t'ai envoyé
    Pourrais-tu déposer ta ligne de code ? Vérifier que pas d'erreur de casse dans nom de table et colonne ?

    Bat,

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 794
    Points : 185
    Points
    185
    Par défaut
    Dans un premier temps j'avais copié le ComboBox dans mon classeur depuis un autre classeur, je viens de l'effacer et à nouveau copié dans mon classeur et lorsque je l'enregistre voici le message qui s'affiche :
    Voulez-vous enregistrer 'Nom du classeur actif ……..' avec des références à des documents non enregistrés ?

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    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 : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La propriété ListFilRange d'un contrôle ActiveX ListBox ou ComboBox attend une adresse(Chaîne de caractères) donc avec pour exemple un ListBox et comme référence un tableau nommé T_Test ListBox1.ListFillRange = Range("T_Test").Address ou si le ListBox n'est pas dans la feuille active ListBox1.ListFillRange = Range("T_Test").Address(External:=True)

    [EDIT]
    Pour rester complet
    Si nous reprenons l'exemple de Michaël que je salue au passage (ici la feuille se nomme TimeSheet et la table T_TimeSheet)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
     With ThisWorkbook.Worksheets("TimeSheet")
     .ComboBox1.ListFillRange = .ListObjects("T_TimeSheet").DataBodyRange.Address(External:=True)
     End With
    End Sub

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 794
    Points : 185
    Points
    185
    Par défaut
    Bonsoir Philippe Tulliez et merci pour votre participation,

    Je viens de tester votre code.

    Si ActiveX ComboBox et le tableau structuré se trouvent sur la même feuille ça fonctionne parfaitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With ThisWorkbook.Worksheets("Feuil1")
      .ComboBox1.ListFillRange = .ListObjects("Tableau1").DataBodyRange.Address(External:=True)
    End With
    Curieusement si ActiveX ComboBox est sur une feuille et le tableau structuré sur une autre feuille ça fonctionne pas et me renvoi le message suivant :
    Erreur d'exécution '9' :
    L'indice n'appartient pas à la sélection.
    Par contre j'ai une solution qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboBox2.ListFillRange = "liste_menu_1"

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    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 : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je viens de tester votre code.
    Si ActiveX ComboBox et le tableau structuré se trouvent sur la même feuille ça fonctionne parfaitement.
    C'est évidemment normal parce-que dans le code que j'ai publié dans la 2ème partie de ma réponse (EDIT)l, j'ai intégré le contrôle ActiveX nommé ComboBox1 et le ListObject nommé T_TimeSheet dans un bloc With...End With qui faisait référence à la feuille nommée TimeSheet donc évidemment que dans ce code le contrôle ComboBox ET l'objet ListObject DOIVENT être dans la même feuille

    Mais si vous spécifiez la feuille comme "parent" du contrôle ActiveX et que vous utilisez Range("Nom de la table").ListObject cela fonctionnera car pour cette dernière, c'est Excel qui reliera la feuille à la table (du classeur actif, je précise).

    [EDIT]
    Les objets
    Le contrôle ActiveX se nomme ComboBox1 et se trouve dans la feuille nommée Consultation (propriété CodeName : shtConsult)
    Les données se trouvent dans une table structurée nommée T_Stock se trouvant dans la feuille nommée Stock (propriété CodeName : shtStock)
    Les données et le contrôle ActiveX se trouvent dans le même classeur et il est le classeur actif

    Exemple avec le code dans le module de la feuille où se trouve le contrôle ActiveX
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Rng As Range
    Set Rng = shtStock.Range("T_Test")
    Me.ComboBox1.ListFillRange = Rng.Address(External:=True)
    Set Rng = Nothing
    D"autres syntaxes possibles pour la ligne 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rng = Worksheets("Stock").Range("T_Test")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Rng = Worksheets("Stock").ListObjects("T_Test").DataBodyRange
    Exemple avec le code dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shtConsult.ComboBox1.ListFillRange = Range("T_Test").Address(External:=True)
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim sht As Worksheet
    Dim cb As Object
    Set sht = ThisWorkbook.Worksheets("Consultation")
    Set cb = sht.OLEObjects("ComboBox1")
    cb.ListFillRange = Range("T_Test").Address(External:=True)
    Set sht = Nothing: Set cb = Nothing
    Il y a d'autres syntaxes possibles

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    794
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 794
    Points : 185
    Points
    185
    Par défaut
    Bonjour Philippe Tulliez

    Merci beaucoup pour vos promptes réponses et vos explications claires nettes et précises.

    Un bel exemple de savoir partagé pour les membres qui n'ont pas votre expertise.


  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    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 : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53
    Par défaut
    Bonjour modus57,
    Merci pour votre retour et d'avoir apprécié les explications.
    Cela fait toujours plaisir.

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

Discussions similaires

  1. [XL-2010] ComboBox sur une feuille Excel faisant référence à une plage nommée
    Par formabox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/05/2015, 18h08
  2. Réponses: 9
    Dernier message: 04/04/2007, 11h16
  3. [VBA EXCEL]comment utiliser les boites a outils control sur une feuille excel
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/02/2007, 19h04
  4. Réponses: 8
    Dernier message: 15/05/2006, 14h33
  5. ecrire sur une feuille excel avec Asp
    Par Ajay dans le forum ASP
    Réponses: 7
    Dernier message: 06/01/2006, 23h18

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