XL 2019 Créer liste déroulante et importer des valeurs

J@NoT

XLDnaute Nouveau
Bonjour,
Je bataille avec la fonction "recherchev" ou "index"...
A priori il vaut mieux utiliser la fonction "index"...

Je souhaiterai sur ma feuille calcul retrait dans la case jaune sélectionner dans un menu déroulant mon numéro de moule ou la liste se trouve dans mon onglet correspondant.
Et ainsi par la suite que les valeurs de dimensions du moule se mettent automatiquement dans les cases oranges de mon premier tableau.

Avez vous une idée svp ?
Par ailleurs, si je rajoute un nouveau moule à la suite de ma liste de moules, cela serait super qu'il apparaisse directement dans ma liste déroulante (case jaune...)
Peut être en VBA ??

Merci de votre aide !!! :)
 

Pièces jointes

  • Calcul retrait 1.4.xlsm
    28.4 KB · Affichages: 22
Solution
Re,

Dans le fichier joint un exemple avec une combobox en B3.
Dans le module de code de la feuille vous avez les lignes suivantes :
VB:
Private Sub InitCombobox1()
    With ComboBox1
        .ColumnCount = 3 ' Nombre de colonnes à afficher
        .BoundColumn = 1 ' Numéro de la colonne qui contient la valeur de la combobox
        .ColumnWidths = "60pt;60 pt;60 pt" ' Largeur en point de chaque colonne visible
        .ListWidth = 200 ' Largeur totale de la liste
        .LinkedCell = "B3" ' Adresse de la cellule liée
        .ListRows = 12 ' Nombre de lignes affichée dans la liste
        .ListFillRange = "'Liste moules MANU'!" & ThisWorkbook.Sheets("Liste moules MANU").ListObjects("T_Moules").DataBodyRange.Address
    End With
End...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

En ayant transformé votre liste de moules en tableau structuré, puisque vous avez excel 2019, ce qui permettra à votre liste nommée (Moules.Nums) de s'allonger automatiquement.
Avec formules index/equiv. Exemple pour diamètre :
=INDEX(T_Moules[Ø (mm)];EQUIV(B3;T_Moules[N°];0))

Au cas où : tuto tableau structuré

Cordialement
 

Pièces jointes

  • Calcul retrait 1.4.xlsm
    31.4 KB · Affichages: 11

J@NoT

XLDnaute Nouveau
Merci Reblochon c'est super !!! Je vois qu'il y a de nouvelles fonctionnalités !! :)
Je vois que vous êtes connaisseur, peut on dans la liste déroulante voir les autres paramètres pour voir lorsque je fais défiler ma liste déroulante à quoi correspond tel ou tel moule ?? (NDLR: Les dimensions en + du numéro)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Tel quel ? Non. Mais vous pouvez créer une colonne "Libellé" à votre tableau de moules et qui concatène les informations que vous désirez. Présentez cette colonne comme source de la liste de validation et faites une recherche Index/Equiv sur celle-ci pour retourner le détail de la ligne. Mais la cellule qui contient la liste de validation, présentera le libellé (ce qui n'est pas forcément très heureux!)

bonne soirée
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Dans le fichier joint un exemple avec une combobox en B3.
Dans le module de code de la feuille vous avez les lignes suivantes :
VB:
Private Sub InitCombobox1()
    With ComboBox1
        .ColumnCount = 3 ' Nombre de colonnes à afficher
        .BoundColumn = 1 ' Numéro de la colonne qui contient la valeur de la combobox
        .ColumnWidths = "60pt;60 pt;60 pt" ' Largeur en point de chaque colonne visible
        .ListWidth = 200 ' Largeur totale de la liste
        .LinkedCell = "B3" ' Adresse de la cellule liée
        .ListRows = 12 ' Nombre de lignes affichée dans la liste
        .ListFillRange = "'Liste moules MANU'!" & ThisWorkbook.Sheets("Liste moules MANU").ListObjects("T_Moules").DataBodyRange.Address
    End With
End Sub
Private Sub Worksheet_Activate()
    If Me.ComboBox1.ListCount = 0 Then InitCombobox1
End Sub

Dans la procédure 'InitCombobox1' vous avez toutes les modification nécessaires. A vous de jouer éventuellement avec.

Cordialement
 

Pièces jointes

  • Calcul retrait 1.4.xlsm
    40.6 KB · Affichages: 11

J@NoT

XLDnaute Nouveau
Bonjour !! Quelle belle surprise !! Je n'aurais pas imaginé mieux !! C'est génial !!!
C'est tout a fait ce que j’imaginais !
Je vais pouvoir l'adapter pour ma sélection de nuances également pour faire la même chose !
Encore un GRAND MERCI Reblochon.
Bonnes fetes à vous. Et à très prochainement sur le forum je l’espère !
:)
 

J@NoT

XLDnaute Nouveau
Bonjour @Reblochon.
Je n'arrive pas depuis 3 bonnes heures à reproduire une liste déroulante comme la première avec ma liste matière...
J'ai crée des tables et une liste en faisant un copié collé mais le mode est en étendue et non en Classeur comme les autres...
probexcel.jpg

Je n'arrive pas à faire le lien sur ma page principale pour créer ma 2eme liste déroulante...
😭
Si jamais tu peux m'aider sur ce problème stp !!?
Par avance un grand merci !!!! :)
 

Pièces jointes

  • Calcul retrait 1.9.xlsm
    40.3 KB · Affichages: 3
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans ces cas là, il faut supprimer le nom et le recréer en faisant attention à ce que 'Classeur' soit sélectionné dans la fenêtre de création des noms.

Dans le classeur joint les noms ont été recréés (Avec un s à matière parce qu'il n'y en a pas qu'une et qu'un nom doit être le plus explicite possible et par convention de nommage).

En ce qui concerne les noms terminant par _Adresse. Vous sont-ils réellement nécessaire. J'avais créé le premier pour test, que j'ai abandonné puis la macro (voir le code de la feuille en faisant un click-droit sur son nom puis 'visualiser le code') se charge de construire l'adresse des zone pour valoriser la propriété ListFillRange du combobox.

Je vous laisse poursuivre dans vos essais et si vous avez un problème particulier, revenez. (Je serai absent cet après-midi quoique certainement connecté).

Cordialement
 

Pièces jointes

  • Calcul retrait 1.9.xlsm
    42.6 KB · Affichages: 8

J@NoT

XLDnaute Nouveau
Ah merci j'ai réussi à avancer un petit peu...
Mais je reste bloqué lors du report avec INDEX des valeurs des cases NUANCE et DENSITE.
Je modifie l'appel de l'index avec T_Matiere mais après je n'arrive pas à selectionner pour définir tel ou tel valeur que je dois importer... Rien ne marche...
Merci pour ton aide ! :)
 

Pièces jointes

  • Calcul retrait 1.11.xlsm
    42.4 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Il me semble que vous ne faites pas grand effort de compréhension, vous vous contentez de copier/coller sans vraiment essayer de comprendre ce que vous faîtes.

Examinez les propriétés des combobox. Je vous ai mis des commentaires en face de chacune d'elle pour que vous sachiez quoi modifier. Et posez-vous les bonnes questions :

Qu'est-ce que je veux voir dans la combobox ? Combien de colonnes (ColumnCount) ? Quelle colonne sera la colonne de valeur (BoundColumn) retournée par la combobox dans sa cellule de destination (LinkedCell). Cette dernière colonne n'est pas forcément la première.
Tout ceci SACHANT que la fonction EQUIV s'arrête sur la première occurence trouvée. Il faut donc que la valeur retournée en H3 soit identifiante de la ligne que vous désirez afficher. Dans votre tableau T_Matière c'est la deuxième (N° Lot).

Votre combobox doit donc retourner le N° de LOT. Par conséquent BoundColumn doit être à 2 :

VB:
Private Sub InitComboBox2()
    With ComboBox2
        .ColumnCount = 3                  ' Nombre de colonnes à afficher
        .BoundColumn = 2                  '  Numéro de la colonne qui contient la valeur de la combobox
        .ColumnWidths = "80pt;60pt;60pt"  ' Largeurs en point de chaque colonne visible
        .ListWidth = 250                    ' Largeur totale de la liste
        .LinkedCell = "H3"                  ' Adresse de la cellule liée
        .ListRows = 12                      ' Nombre de lignes affichée dans la liste
        .ListFillRange = "'Liste nuances MATIERE'!" & ThisWorkbook.Sheets("Liste nuances MATIERE").ListObjects("T_Matiere").DataBodyRange.Address
    End With
End Sub

Si vous augmentez la largeur d'une ou de plusieurs colonnes augmentez d'autant de points (pt) la propriété ListWidth (largeur de la liste développée). Si cette largeur n'est pas suffisante par rapport aux informations affichées dans les colonnes vous verrez apparaître en bas de liste une barre de défilement horizontal.

Bonne soirée
 

Pièces jointes

  • Calcul retrait 1.11.xlsm
    46 KB · Affichages: 4

J@NoT

XLDnaute Nouveau
Bonjour Reblochon,
Je comprends votre agacement mais je vous assure que j’essaie de comprendre.
En fait toutes les modification que j'effectue dans le code VBA du Combobox1 et Combobox2 n'ont aucun effet !

Je dois aller dans excel, onglet "développeur" et "propriétés" et modifier les valeurs pour chaque combobox pour que cela prenne effet. La aucun soucis !
Voila pourquoi je ne comprenais pas. (J'ai quand même modifié manuellement dans le code VBA , j'ai mis les mêmes valeurs mais bon... )

Pareil sur mon onglet CALCUL RETRAIT, quand je modifie ma formule INDEX, sur la case Ø cela est bon, j'enregistre je ferme le fichier, je l'ouvre et hop la c'est en erreur ! la formule est changée (T_Moules #REF!) ???
Pour la formule INDEX de la nuance et de la densité, si je tape à la main dans la case N°LOT par exemple 372 il va me chercher les valeurs dans le tableau !
Cependant si je vais chercher la valeur à l'aide de la barre déroulante 372 les formules se mettent en erreur !????
J'ai eu beau cherché format de cellule et autres...
Je ne comprends pas...
:oops:
 

Pièces jointes

  • Calcul retrait 1.13.xlsm
    40.3 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Pour pour la nuance le n° de lot est au format Texte :
1608212880056.png

La cellule devait conserver un ancien format.
Si cela se reproduit vous pouvez multiplier J3 par 1 :
=INDEX(T_Matiere[NUANCE];EQUIV(J3*1;T_Matiere[N° LOT];0))
ce qui forcera la conversion.

Pour l'autre erreur il s'agit une espace dans le nom de la colonne du tableau : " N° Lot" au lieu de "N° Lot". Les tableaux structurés et excel en général n'aime pas les noms qui commencent par une espace.
Enlevez les espaces en début et fin de vos noms de colonnes ; refaites la formule et tout ira bien ensuite.

Quand vous avez des indicateurs d'erreur (petit triangle vert) en haut et à gauche des cellules, après avoir sélectionné l'ensemble des cellules concernées, cliquez sur la flèche noire pour au moins connaître la suggestion d'excel. Dans votre cas il vous donnait l'explication 'Nombre stocké sous forme de texte"

En cas de persistance du problème (le premier) revenez. Mais à mon avis, c'est l'espace qui faisait merdoiller.

Cordialement
 

J@NoT

XLDnaute Nouveau
Bonjour Reblochon,
J'avais regardé l'erreur que comportait la cellule... j'ai joué avec le format de la cellule, texte nombre, sans succès...

J'ai enlevé les espaces et j'ai nommé les colonnes de mon tableau de donnée avec un seul mot.
Il n'y a plus de problème. Merci.

Pour le deuxième problème, dans la formule je multiplie la cellule associée par 1 cela fonctionne, mais il y a un couac lorsque la valeur que je vais chercher comporte du texte comme par exemple le lot 34 DWX...

Par ailleurs je remarque que si on laisse la formule originale (on ne multiplie pas par la cellule associée par 1) lorsque nous allons chercher la valeur 34 DWX cela fonctionne, bizarre ?? Cela est donc lorsque cela est un nombre tout seul qu'il y a une erreur...

Je planche sur le sujet... Si jamais vous avez idée, je suis preneur !!
Encore merci !! :)
 

Pièces jointes

  • Calcul retrait 1.13.xlsm
    41.4 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Si jamais vous avez idée, je suis preneur !!
Oui, j'en ai une.
Tout les gestionnaires de données vous diront qu'il n'est jamais bon de mélanger pour un même 'champ' les types de données (les torchons et les serviettes) !

Alors soit
  1. vous mettez vos numéros de lot sous format textuel en leur mettant devant une apostrophe dans tous vos tableau,
  2. vous remplacez tous les numéros de lots qui contiennent du texte par des nombres,
  3. vous modifiez vos formules pour essayer de prendre en compte l'erreur. Exemple pour nuance
    =INDEX(T_Matiere[NUANCE];EQUIV(SIERREUR(J3*1;J3);T_Matiere[N° LOT];0))
    . Cette dernière solution étant la pire.
Avec la dernière solution (avec SIERREUR), si vous choisissez "ym" comme n°lot alors vous aurez une erreur #NA().

Si un jour vous devez manipuler vos données par vba, powerquery ou tout autre logiciel de gestion de données, vous risquez d'avoir des erreurs dont vous ne vous souviendrez plus de la provenance.
Aussi essayez d'uniformiser vos types de données. Ainsi que vos noms (par exemple mettre un 's' à la fin des noms représentant des collections ou listes d'éléments).

[Edition 18/12/2020 11:25 ] si vous ne pouvez pas modifier les N° Lot alors créez un identifiant unique pour chaque lot dans une colonne à gauche de chaque tableau (même identifiant dans tous les tableau) . Vous pourrez charger cette colonne dans vos listes en ne l'affichant pas ColumnWidths = "0pt;80pt;60pt;60pt" BoundColumn toujours à 1 et changez LinkedCell pour l'adresse d'une cellule masquée à l'utilisateur mais que vos formules pourront référencer.

Cordialement
 
Dernière édition:

J@NoT

XLDnaute Nouveau
Bonjour Reblochon,
Désolé j'ai préféré avancer sur mon projet pour ne pas perdre trop de temps et je vous en avais assez fait perdre également...

Sur les 3 solutions je vais partir sur la numéro 2. Je vais supprimer le texte des cellules qui en contiennent. (Je mettrais la partie texte avec la nuance et non avec le numéro de lot).

Pour votre solution "édit du 18/12/2020", l'idée est bonne cependant je vais perdre la possibilité de saisir directement dans la case de défilement le numéro de lot directement.
Du coup malheureusement elle ne sera pas viable non plus...

Encore merci pour ce temps passé ! Je suis très content du résultat !!
Bonnes fêtes à vous !
:)
 

Discussions similaires

Réponses
8
Affichages
563

Statistiques des forums

Discussions
315 093
Messages
2 116 139
Membres
112 669
dernier inscrit
Guigui2502