Liste déroulante en cascade à 3 niveaux pour modification d'un tableau de donnée

CaptainMerlux

XLDnaute Nouveau
Bonjour les experts de l'Excel,

Dans mon dernier post je vous avais dit que j'avais résolu presque tous mes problèmes mais il s'avère que mon boss me demande une option de plus à mon fichier et alors là je suis dans le flou total.

Voici le contexte : il souhaite que l'on puisse suivre la mise en service d'un détection incendie (date, origine, bâtiment, nom de la détection concernée, heure de mise hors service, personne ayant mis hors service) puis plus tard dans la journée, mettre les informations concernant la remise en service de celles-ci.

Pour cela, j'ai créé un premier userform afin de saisir les premières données qui incrémenteront un tableau "Détection HS".
Là où je suis dans un flou intersidéral, c'est que je souhaite créer un second userform avec des listes déroulantes en cascade pour rechercher dans ma première combobox "la date" puis en lien avec celle-ci, ma seconde combobox me donnant "le lieu" (en corrélation avec la date saisie dans la CB1), et de la même manière une troisième combobox afin de sélectionner "ma détection concernée".
Une fois cette recherche effectuée, je devrais avoir l'information qui s'affiche dans ma listbox afin de cliquer dessus et retrouver les informations déjà saisie la concernant puis pouvoir la compléter avec les nouvelles données pour mettre à jour la ligne en question dans mon tableu.

Il faut savoir que mon tableau n'est pas une base de données avec des données prédéfinies mais bien avec des données que l'on incrémentera au fur et à mesure et qui pourront être des données totalement nouvelles.

J'ai trouvé une superbe ligne de code proposée par Jaques Boisgontier qui fonctionne super bien mais qui est de l'hébreu pour moi , petit novice en vba, et que je n'ai pas su appliquer.

Je vous propose donc une ébauche de mon travail (ne faites pas attention au combobox du premier userform qui ne fonctionne pas car leur RowSource se trouve sur mon fichier principal).

Auriez-vous une idée pour résoudre my problem ? :)
 

Pièces jointes

  • Formule incompréhensible.docx
    21 KB · Affichages: 16
  • Tableau Hors-En Service Détection.png
    Tableau Hors-En Service Détection.png
    210.4 KB · Affichages: 21
  • test liste déroulante en cascade.xlsm
    68.2 KB · Affichages: 22
  • Userform Mise Hors Service.png
    Userform Mise Hors Service.png
    257.8 KB · Affichages: 20
  • Userform remise en service.png
    Userform remise en service.png
    228.6 KB · Affichages: 16

CaptainMerlux

XLDnaute Nouveau
Bonjour mapomme,

Merci pour tout investissement, cela répond exactement à ma demande.

Je comprends quasiment tout le code, mais j'aimerai que la saisie des heures HS ne soient pas obligatoire, quelles lignes de code sont à supprimer, j'ai peur de faire une connerie :)

Merci pour tout
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonjour @CaptainMerlux,
mais j'aimerai que la saisie des heures HS ne soient pas obligatoire

Le code a été modifié en ce sens (ça a été fait pour les quatre horaires donc aussi pour les remises en service ). A vous d'adapter...

A plus :)

nota 1 : le code a été commenté.

nota 2 : j'avais oublié de préciser que j'avais renommé un certain nombre de contrôles avec des noms plus parlant uniquement pour mieux me repérer dans le code.

nota 3 : pour les objets dictionary, il n'est plus nécessaire de faire référence au niveau VBA à la bibliothèque "Microsoft Scripting Runtime".
J'ai fait du "late binding" dans le code (comme disent les anglo-saxons). On ne déclare plus les dictionary dans une déclaration Dim Dim dico as new Dictionary mais directement dans une instruction Set dico = CreateObject("scripting.dictionary").

nota 4 : attention! L'objet Dictionary n'est pas disponible sous MAC.
 

Pièces jointes

  • CaptainMerlux- listes déroulantes cascade- v2.xlsm
    100.1 KB · Affichages: 40
Dernière édition:

Statistiques des forums

Discussions
294 412
Messages
1 938 345
Membres
188 792
dernier inscrit
Mialisoa