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 ne liste pas la plage nommée [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2019
    Messages : 53
    Par défaut ComboBox ne liste pas la plage nommée
    Bonjour,

    Je n'arrive pas à peupler la liste déroulante.
    La liste que je voudrais afficher fait partie d'un tableau et la plage (colonne partielle) est nommée 'Liste'

    Lorsque je clic sur la liste déroulante aucune liste s'affiche...
    j'ai modifié les propriétés de la combobox:
    - - AutoWordSelect > False
    - - LinkedCell > G1 (cellule qui sert de référence pour afficher d’autres données)
    - - ShowDropButtonWhen > 2

    le code est le suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ComboBox1_Change()
    Me.ComboBox1.ListFillRange = "liste"
    Me.ComboBox1.DropDown
    End Sub
    J'ai suivi plusieurs tutos à la lettre mais ce point précis ne fonctionne pas chez moi...
    la ligne 2 et 3 devrait afficher la liste contenue dans le tableau!

    Merci de votre aide.
    Fredym

  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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La propriété ListFillRange d'un contrôle ActiveX ComboBox attend une chaîne de caractères reprenant le nom de la feuille suivi de l'adresse des cellules comme par exemple "Feuil1!A2:E10" donc si la référence est une plage nommée on utilisera la propriété Address avec l'argument External à True .
    Exemple Feuil4.ComboBox1.ListFillRange = Range("t_test").Address(external:=True)

    Attention que votre code publié sous-entend que vous avez placé le code dans le module de la feuille et que la référence à une plage nommée comme Range("Nom") n'est reconnue que si le nom est de portée feuille donc si le nom est de portée classeur, il y a lieu de placer le code de la procédure dans un module standard comme l'exemple ci-dessous

    Code à placer dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub LoadList()
      Feuil4.ComboBox1.ListFillRange = Range("t_test").Address(external:=True)
    End Sub
    Code dans la procédure événementielle où se trouve le contrôle ActiveX ComboBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
      LoadList
    End Sub
    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
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2019
    Messages : 53
    Par défaut
    Bj Monsieur Tulliez,

    J'ai tenté de reproduire le code que vous me donner ci-dessous mais après maintes manipulations le résultat attendu n'y est pas...
    Je voudrais, si vous me le permettez, vous soumettre le fichier excel afin de corriger mes erreurs commises...
    Merci de votre aide...
    Fredym

  4. #4
    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 179
    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 179
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je vous confirme que cela fonctionne parfaitement. Voir ci-dessous une exemple plus complet avec les explications, le classeur joint ainsi qu'une illustration de celui-ci

    Explication
    Voici un exemple avec deux contrôles ActiveX nommés respectivement cboKeyList (ComboBox) et lstData (ListBox)
    Lorsque l'on sélectionne une ligne dans l'un des deux contrôles, la cellule nommée pLinkedCell, en jaune dans l'illustration, reçoit le numéro de la ligne sélectionnée et ceci grâce à la propriété LinkedCell des deux contrôles et comme c'est la même adresse, cela permet de faire varier la sélection dans ceux-ci

    Organisation
    Le classeur contient :
    Deux feuilles
    • [Data] qui contient un tableau structuré nommé t_Data (à gauche dans l'illustration)
    • [Démo ListBox] qui contient deux contrôles ActiveX, nommés respectivement cboKeyList (ComboBox) et lstData (ListBox) ainsi que les cellules contenant la formule =SIERREUR(@INDEX(t_Data;pLinkedCell + 1;EQUIV(B13;t_Data[#En-têtes];0));"") permettant d'afficher ce qui a été sélectionné dans l'une des deux listes et ce grâce à la valeur contenue dans la cellule nommée pLinkedCell
      Cette dernière est protégée mais sans mot de passe.
    Deux références nommées
    • lst_KeyName fait référence à t_Data[KeyName] (colonne nommée KeyName de la table structurée t_Data
    • pLinkedCell fait référence 'Démo ListBox'!$C$3 (cellule C3 située dans la feuille nommée Démo ListBox


    Procédure nommée 'LoadList' placée dans un module standard
    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
    Sub LoadList()
      ' Philippe Tulliez www.magicoffice.be
      Dim rngData As Range
      Dim RngKey As Range
      Set rngData = Range("t_Data")
      Set RngKey = Range("lst_KeyName")
      With ActiveSheet
        ' Charge les données référenceées par lst_keyName dans le ComboBox nommé cboKeyList
        With .cboKeyList
        .ListFillRange = RngKey.Address(external:=True)  ' Référencement de la liste à afficher
        .ColumnCount = RngKey.Columns.Count              ' Nombre de colonnes à afficher
        .LinkedCell = Range("pLinkedcell").Address       ' Référence la cellule liée
        .BoundColumn = 0                                 ' Renvoyer le n° de la ligne sélectionnée dans la cellule liée
        End With
        ' Charge les données dans le ListBox nommé lstData
        With .lstData
        .ListFillRange = rngData.Address(external:=True) ' Référencement de la liste à afficher
        .ColumnCount = rngData.Columns.Count             ' Nombre de colonnes à afficher
        .ColumnHeads = True                              ' Affiche la ligne des titres
        .LinkedCell = Range("pLinkedcell").Address       ' Référence la cellule liée
        .BoundColumn = 0                                 ' Renvoyer le n° de la ligne sélectionnée dans la cellule liée
        End With
      End With
    End Sub
    Procédure événementielle qui invoque la procédure 'LoadList', placée dans le module de la feuille [Démo ListBox]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Activate()
      mMain.LoadList
    End Sub
    Illustration

    Nom : 210724 ActiveX - ComboBox + ListBox.png
Affichages : 240
Taille : 140,6 Ko

    [EDIT]
    Lorsque j'ai fait le "print screen", je n'avais pas vu qu'il y avait un décalage d'une ligne entre celle qui est sélectionnée dans l'un des contrôles ListBox ou ComboBox et les valeurs renvoyées aux cellules C13:C21 par la formule qui s'y trouve.
    La correction a été apportée avant la publication de mon intervention et donc le classeur à télécharger renvoie les bonnes valeurs
    Fichiers attachés Fichiers attachés
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    amateur
    Inscrit en
    Décembre 2019
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2019
    Messages : 53
    Par défaut
    Un tout grand merci pour votre intervention.
    J'apprécie votre aide précieuse.
    Bonne journée.

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

Discussions similaires

  1. [XL-2010] Excel ComboBox ListFillRange propriété problème avec plage nommée
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/02/2021, 20h04
  2. [XL-2016] combobox en cascade avec des plages nommées
    Par cabinfi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2020, 21h59
  3. [XL-2007] Mise à jour plage nommée depuis valeur combobox
    Par jeff1494 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/07/2009, 16h55
  4. Liste des plages nommées d'un workbook
    Par Gautheron dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/11/2008, 20h48
  5. Mettre une plage nommée dans un ComboBox
    Par Swiper dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 18/07/2007, 08h51

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