XL 2021 liste déroulante

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour à tous,
Mes listes déroulantes n'affichent que 8 items. Peut-on, sans avoir recours à l'ascenseur, afficher plus de lignes dans ce menu déroulant. Par exemple 20 au lieu de 8 ?
J'ai cherché en vain...
Bien cordialement,
Pierre
 
Solution
Ce n'est pas moi qui l'ai supprimée.
Je l'ai retrouvée dans une ancienne version.

Edit:
Plutôt que d'exporter les localisations de Listes vers t_PointsCollecte sur Feuil1 (colonne J, ne pourrait-on pas utiliser directement la ressource à son origine, à savoir la colonne D de Listes ?
Je sais pas trop ce que tu veux faire. Si tu as des soucis, je regarderai.

Constantin

XLDnaute Occasionnel
Supporter XLD
Bonjour Dudu2,
Tu rigoles ? C'est super ! et ça marche du feu de Dieu sauf peut-être la macro "Updatelistes()". Est-elle nécessaire et comment la modifier dans le cas contraire ? Je vais faire des essais sur une copie de ton fichier :
- ajouter des lignes à la liste des courses (Feuil1)
- Supprimer la macro "UpdateListes()"
- ajouter des items au tableau de "Listes"
Je te tiens au courant, mais en tous cas, c'est vraiment ce que j'espérais !
Tu évoque un code complexe. Comment puis-je le visualiser pour essayer de mourir moins bête ce soir.
Vraiment, un grand merci pour ton savoir et ta patience.
Pierre
 

Dudu2

XLDnaute Barbatruc
sauf peut-être la macro "Updatelistes()"
Je n'ai pas regardé les autres macros.
Je ne pense pas que UpdateListes soit utile si c'est pour extraire les valeurs uniques.
Les macros de construction des listes pour les ComboBoxes que j'ai codées fabriquent leurs listes uniques si besoin et considèrent même que les infos dans les tableaux peuvent ne pas être triées.
 

Dudu2

XLDnaute Barbatruc
Tu évoque un code complexe. Comment puis-je le visualiser pour essayer de mourir moins bête ce soir.
Il y a plusieurs modules ajoutés dans ton fichier:
  • Les 3 modules de la Ressource:
    VBA - Validation par ComboBox dynamique simulant une liste de validation avec saisie filtrée
    - Module_SaisieFiltréeComboBox,
    - Module_ComboBoxValidationCréer,
    - Classe_ComboBoxValidationEvents

    qui sont des modules utilitaires pour réaliser l'objectif annoncé pas forcément simples et pas forcément utiles à regarder car leur but est de faire le job.

  • Le Module_ComboBoxesCourses qui est plus intéressant pour toi car c'est celui qui construit les listes relatives au contenu de ta feuille "Listes" et contient les fonctions d'appel à la saisie par ComboBox. Si tu veux regarder quelque chose c'est plutôt celui-là.

  • Et il y a bien sûr le Worksheet_SelectionChange() de la feuille concernée par la saisie qui a très peu d'instructions pour appeler les fonctions utiles lorsque la saisie par ComboBox est à déclencher.
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Re...
J'ai :
- Purement et simplement supprimé la macro "UpdateListes"
- ajouté des produits dans les colonnes I & J de Feuil1
- Ajouté de nouveaux produits (Catégorie, Rayon et Loc) dans le tableau "Listes"
- Ajouté des poins de collecte sur le plan
Tout fonctionne à merveille. Au début dans la macro de la Combobox, j'ai voulu assigner dans le code pour la catégorie le nombre de catégories différentes dans Listes (voir cellule H2). La valeur 20 s'avère de fait insuffisante et je l'ai modifiée. J'avais fait un essai en remplaçant =SOMME(SI(B3:B153<>"";1/NB.SI(B3:B153;B3:B153))) par B:B (Oups... c'était un peu long pour qu' Excel parcourt tout le champ.
Dans la Listes, j'ai ajouté un petit calcul du nombre de valeurs de la colonne Catégorie H22). Çà affiche 22, ce qui est exact. Est-ce possible de remplacer dans ta macro la valeur "50" par celle indiquée par cette cellule ?
J'ai essayé mais moi pas très bien causer langage VBA...
Encore merci. C'est simplement magique.
Bien cordialement,
Pierre
 

Pièces jointes

  • courses _Localisation-2Pierre CB _essai.xlsm
    134.7 KB · Affichages: 3

Dudu2

XLDnaute Barbatruc
D'une part tu n'as pas besoin de calculer ça dans une cellule, le code VBA connait la taille des listes.
S'il fallait la déterminer ce serait:
VB:
    Dim TabCatégoriesUniques() As String
    Dim NbCatégoriesUniques As Long
   
    TabCatégoriesUniques = ListeCatégoriesUniques
    NbCatégoriesUniques = UBound(TabCatégoriesUniques)

En plus, le code VBA n'a pas besoin de le calculer non plus car une ComboBox (je l'ai déjà dit hier) qui prévoit un maximum de N items, s'ajuste automatiquement si son nombre d'items < N.

Alors voilà ce que j'ai fait:
  1. Déclarer une constante indiquant le maximum affichable qui doit rester dans l'écran
    Code:
    Private Const MaxComboBoxItems = 30

  2. Faire référence à cette constante dans l'appel des fonctions:
    Code:
    '---------------------------------------------------------------------------------
    'Sélection de cellule dans la colonne CATÉGORIE du tableau de la lsite des courses
    '---------------------------------------------------------------------------------
    Sub ComboBoxCatégorie()
        Call ComboBoxValidationCréation(ListeCatégoriesUniques, _
                                        ListRows:=MaxComboBoxItems, _
                                        EmptyValueAllowed:=False, _
                                        OffsetRowsAfterInput:=0, _
                                        OffsetColumnsAfterInput:=0)
    End Sub
    
    '-----------------------------------------------------------------------------
    'Sélection de cellule dans la colonne RAYON du tableau de la lsite des courses
    '-----------------------------------------------------------------------------
    Sub ComboBoxRayon(Catégorie As String)
        If Len(Trim(Catégorie)) = 0 Then
            MsgBox "Choisir la " & TableauListes_NomColonneCatégorie & " d'abord !"
            Exit Sub
        End If
    
        Call ComboBoxValidationCréation(ListeRayonsCatégorie(Catégorie), _
                                        ListRows:=MaxComboBoxItems, _
                                        EmptyValueAllowed:=False, _
                                        OffsetRowsAfterInput:=0, _
                                        OffsetColumnsAfterInput:=0)
    End Sub
 

Pièces jointes

  • courses _Localisation-2Pierre CB _essai.xlsm
    135.7 KB · Affichages: 9

Dudu2

XLDnaute Barbatruc
Pour être tout à fait précis pour le calcul en VBA qui doit prévoir tous les cas, ce serait:
VB:
    Dim TabCatégoriesUniques() As String
    Dim NbCatégoriesUniques As Long
 
    TabCatégoriesUniques = ListeCatégoriesUniques
 
    'Table dimensionnée
    If Not (Not TabCatégoriesUniques) Then
        NbCatégoriesUniques = UBound(TabCatégoriesUniques)
 
    'Table NON dimensionnée
    Else
        NbCatégoriesUniques = 0
    End If
Car on ne peut pas faire référence au UBound d'une table non dimensionnée.
 

Constantin

XLDnaute Occasionnel
Supporter XLD
Merci une dernière fois,
Je rencontrais des problèmes d'affichage dans le plan parce que plusieurs cellules portaient le même nom. J'ai fait une mise en forme conditionnelle pour afficher clairement les doublons et supprimer ensuite la ou les cellules en doublon.
Reste à récupérer le plan du magasin...
Encore bravo pour tes connaissances et ton aide.
Porte toi bien
Pierre
 

Dudu2

XLDnaute Barbatruc
ActiveX.gif
 

patricktoulon

XLDnaute Barbatruc
bonsoir
en effet le phénomène de vidage de mémoire des variables se produit sur W10 et 2013 ou 2016
sur W7 2013 et 2016 ça le fait pas
certainement un bug dans le pack redistribuable et ou net framework
et y en a des tas
depuis moins d un an que je tourne sur W10 j'en ai relevé déjà 5 de grave c'est le 6eme
 

TooFatBoy

XLDnaute Barbatruc
en effet le phénomène de vidage de mémoire des variables se produit sur W10 et 2013 ou 2016
Et il n'y a pas moyen de contourner ce problème ?


Ce qui est marrant, c'est que tant qu'on reste dans la macro qui a créé la ComboBox, les variables globales sont toujours assignées.
Ce n'est que quand on sort de ladite macro que les variables globales perdent leurs valeurs.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Ce n'est que quand on sort de ladite macro que les variables globales perdent leurs valeurs.
Oui c'est bien ça et y absolument rien à faire. Enfin pour les choses que j'ai essayées.
Du coup j'ai ré-écrit la ressource utilisée par @Constantin en utilisant une ComboBox d'un UserForm dépouillé de son menu système pour qu'il laisse autant que possible toute la place à sa ComboBox.
C'est en attente de publication.

Je recommande à @Constantin d'utiliser la nouvelle méthode plus sûre en me confirmant qu'il veut un fichier modifié en conséquence que je lui ferai.
 

Discussions similaires

Réponses
8
Affichages
207

Statistiques des forums

Discussions
312 413
Messages
2 088 195
Membres
103 755
dernier inscrit
Nicolas TULENGE