VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Dono

XLDnaute Nouveau
Bonjour tous le monde. Je vous prie de m'excuser si je ne suis pas au bon endroit. C'est la première fois que je poste un problème sur un forum. Le mien est le suivant:

J'ai un classeur composé de 4 onglets. Les trois premiers concernent une liste de machines pour chaque zone (Le premier onglet comporte la désignation des machines de la zone A, le second onglet la désignation des machines de la zone B, idem pour le troisième).
Mon 4ème onglet comporte un tableau de suivi d'interventions. Je souhaite, sous VBA, et sans UserForm si possible, mettre une liste déroulante dans les cases de désignation machine qui évolue en fonction de la valeur de la case "Zone". Plus précisément, si pour la ligne 2, la zone est "A", la liste déroulante de la désignation ne me propose que les machines de la zone "A". Idem si la zone est "B", la liste doit changer et ne me proposer que les machines de la zone "B", ....

J'espère avoir été clair.. Merci beaucoup d'avance pour votre aide. Je compte vraiment sur vous. J'ai quelques notions en VBA ais bon rien de bien méchant, lol.
 
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Bonjour Dono et bienvenue sur le forum,

Un fichier exemple avec ce que tu souhaites serait le bienvenu également.
Pourquoi veux-tu une solution par VBA. Dans ce que tu dis, il semblerait que cela ne soit pas forcément nécessaire.

A+
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Merci de cette réponse si rapide.
Je te joins en fichier zip mon fichier xls. Comme tu le verras, dans l'onglet "Suivi" chaque ligne correspond à une intervention que le technicien devra remplir. Les premières cases possèdent des listes déroulante (faites en Données/Validation...).

Dans un premier temps, j'aimerai pouvoir proposer, pour la désignation banc, une liste déroulante en fonction du secteur d'intervention. Comme je le disais, si le secteur est "USC" alors dans désignation banc, la liste déroulante propose la liste des bancs de l'USC. Idem pour les autres secteur.
Dans un second temps, le travail serait donc de proposer une liste en fonction du secteur et qui en plus filtre ces listes afin de n'en proposer que les bancs dont la situation est "Prod".....

Je sais je suis lourd et surement très exigeant... Je te prie de m'excuser. C'est pour mon projet en entreprise, j'aimerai vraiment y parvenir. Merci merci, vraiment.
 

Pièces jointes

  • Liste.zip
    20.5 KB · Affichages: 213
  • Liste.zip
    20.5 KB · Affichages: 185
  • Liste.zip
    20.5 KB · Affichages: 193
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re bonjour,

tu sais dono; nous n'avons pas de boule de cristal virutelle dans nos machine aussi se serait bien que tu précises de quel tableau(x) et quelle(s) colonne(s) extraire les informations (Feuilles USC, Bogie Brake, Brake control ?) etc...

De plus tu ne dis toujours pas pourquoi tu veux faire cela en VBA.

En attendant voici le code de ton userForm.(Tel que j'imagine)
Avant de le coller, enlève les valeurs de propriétés RowSource des combobox.
Code:
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] ComboBox1_Click()
    [COLOR=blue]If[/COLOR] ComboBox1.ListIndex = -1 [COLOR=blue]Then[/COLOR] [COLOR=blue]Exit[/COLOR] [COLOR=blue]Sub[/COLOR]
    ComboBox2.Clear
    [COLOR=blue]Select[/COLOR] [COLOR=blue]Case[/COLOR] ComboBox1.Value
        [COLOR=blue]Case[/COLOR] [I]"USC"[/I]: ComboBox2.List = Range([I]"USC!B6:B40"[/I]).Value
        [COLOR=blue]Case[/COLOR] [I]"Bogie Brake"[/I]: ComboBox2.List = Range([I]"'Bogie Brake'!B6:B20"[/I]).Value
        [COLOR=blue]Case[/COLOR] [I]"Brake Control"[/I]: ComboBox2.List = Range([I]"'Brake Control'!B6:B200"[/I]).Value
    [COLOR=blue]End[/COLOR] [COLOR=blue]Select[/COLOR]
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] Quitter_Click()
 Unload UserForm1
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]
[COLOR=blue]Private[/COLOR] [COLOR=blue]Sub[/COLOR] UserForm_Initialize()
    ComboBox1.List = Range([I]"Suivi!BA3:BA6"[/I]).Value
[COLOR=blue]End[/COLOR] [COLOR=blue]Sub[/COLOR]

De plus il serait peut-être préférable de déplacer tes listes de la feuille 'Suivi' en BA:BC sur une autre feuille, à l'abri des erreurs de manipulation des utilisateurs.
A+
 
Dernière modification par un modérateur:

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Désolé. Pas évident d'etre clair et précis lorsqu'on "connait" la problématique du sujet.

Exemple: Onglet "Suivi", Ligne 3.
Le Technicien entre son intervention. Il arrive à la case "D3" correspondante au secteur de l'intervention (USC, Bogie Brake, Brake Control). Ici, une simple liste déroulante en données validation suffit. Il entre le secteur. Il arrive à la case "F3" correspondante à la désignation du banc. Dans celle-ci, je veux que si D3 de l'onglet "Suivi" = "USC" alors F3 de l'onglet "Suivi" propose une liste déroulante des bancs présents dans l'onglet "USC" Colonne B (correspondant à la désignation des bancs); si D3 de l'onglet "Suivi" = "Bogie Brake" alors F3 de l'onglet "Suivi" propose une liste déroulante des bancs présents dans la colonne B de l'onglet "Bogie Brake"; et enfin, si D3 de l'onglet "Suivi" = "Brake Control" alors F3 de l'onglet "Suivi" propose une liste déroulante des bancs présents dans la colonne B de l'onglet "Brake Control".

J'espère que c'est un peu plus clair.
Je souhaite faire ça sous VBA car je ne pense pas que ce soit possible en simple formule Excel. Me trompe-je?

Merci. Beaucoup
 
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re,

voici ton fichier en retour avec explications dans la feuille Suivi.
Tous les noms faisant référence à des plage de cellules peuvent être modifiés pour s'adapter au nombre de ligne éventuellement évolutif de chaque liste.

A+
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Wahou !!! Hihi Merci beaucoup. Si tu savais les lignes et lignes que j'avais fait ptdr XD. Impeccable.
Est-il possible, dorénavent de ne proposer que les bancs dont la situation est "prod"?....:eek:
Car j'avais réussi une partie en enregistrant une macro de filtre élaboré mais bon...
Pour être plus précis, ce que tu me proposes est impeccable, il me faudrait juste pour chaque cas n'avoir que la liste des bancs de situation "prod" (D3="USC", alors F3 = liste des bancs USC de situation "prod" uniquement, etc.)
Et second point, le jour où des lignes de bancs viennent s'ajouter dans les listes des trois onglets (USC, Bogie Brake, Brake Control), je dois donc aller dans insertion nom définir afin d'en changer les coordonnées des matrices c'est bien cela? Il n'y a pas moyen de donner, en référence de matrice, la matrice allant de B6 à Bx (avec x = dernière ligne remplie); ainsi la mise à jour des liste de données se ferait automatiquement...

Sincèrement désolé d'etre exigeant comme ça mais vraiment merci beaucoup. C'est vraiment sympa de ta part franchement :)
 
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re,

Pour définir les noms de façon dynamique tu peux t'appuyer sur cet exemple:

Code:
ListeUsc=DECALER(USC!$B$5;1;0;MAX(1;NBVAL(USC!$B$5:$B$65536)-1);1)

Tu dis vouloir filtrer sur prod. Est-ce qu'il y aura nécessité ultérieure de filtrer sur autre chose, en cours de saisie des fiches de Suivi?

Faire une extraction automatique des Prod lorsqu'une liste change est possible, en filtrant à un autre emplacement ( à côté). Le resultat de l'extraction aura pour nom ListeUsc par exemple

A+
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re,

Merci encore.
Ton code est à placer dans insertion/Nom/Définir, en bas dans "Fait référence à", c'est bien cela?

Non. Il n'y aura aucun filtre à exécuter en cours de saisi, ni même avant. Le souhait de ne vouloir récupérer que les bancs de situation "prod" est que les trois onglets de données comportent tous les bancs depuis le début (ceux toujours en prod mais notamment ceux en stock, ceux supprimés depuis longtemps....) donc aucun intérêt d'alourdir la liste déroulante avec des bancs sur lesquels aucune intervention n'est possible. De plus, si l'on ne récupère que les bancs prod, le jour où l'on en passe un, dans les onglets de données, en autre situation que prod (supprimé, stock, ...), la liste déroulante est automatiquement mise à jour. Le fichier vivra comme ça, ce serait impeccable.
Pour résumer le cahier des charges qui m'eut été donné, c'est:
- Dans "Désignation Banc", proposer une liste déroulante ne comportant QUE les bancs concernés par le secteur entré quelques cases avant
- Faire ces listes déroulante en se reprenant sur les onglets de données afin que toutes mises à jour dans ces derniers affectent directement les listes déroulante

Voilà les deux gros points à assurer. En faisant cela, le fichier est vivant, clair, simple, précis :).

Finalement il n'y a pas à passer par du VBA???
Le code VBA que tu as rentré dans mon fichier ne sert que si je passe par mon bouton c'est ça? Je peux l'effacer?

Merci. Merci. Merci.
 
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re,

Voici une nouvelle mouture avec VBA.
Pourquoi VBA? pour l'extraction des Situations "Prod".

Il serait possible de faire l'extraction par formule matricielle mais il faut connaître par avance le nombre maximal de ligne de chaque liste.

Les listes on été déplacées sur une feuille nommée 'Listes' et qui est cachée. Elle contient également une zone nommée 'ListeProd' qui contient le résultat de l'extraction.

Les Tables on étées également nommées afin de faciliter la compréhension de l'écriture de la macro d'extraction.

L'extraction se fait éventuellement sur changement de la valeur d'une cellule de la colonne 'Secteur' de la feuille 'Suivi'.

Un autre scénario est possible: lorsque l'une des liste "USC, Bogie Brake ou Brake Control change, on pourrait extraire 3 listes différentes des lignes de situation 'PROD'.

La plage de données de la feuille suivi a également été nommée.

Tu peux supprimer le userform, le bouton etc.
Pour ta premières question c'est oui.

A+
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Ah franchement MERCI énormément c'est parfait. Tu travailles vite, proprement, simplement, et clairement car explication et tout ce qui va bien. J'essaie de regarder comment tu as procédé mais bon je pêche par moment...:confused:
Je ne pensais pas qu'en utilisant les insertion nom définir on pouvait s'arranger comme ça.
C'est impeccable merci beaucoup.

Il y a un statut "résolu" à mettre sur la discussion? Comme sur d'autres forum?
Si oui, comment fait-on?

Encore Merci. et je reviendrai vers toi le jour ou j'aurai un autre pb :)
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

J'ai une autre petite question....

Comment se fait-il que selon l'onglet dans lequel tu te trouves, la liste des noms définis change (dans Insertion/Nom/Définir)...???
 
G

Guest

Guest
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Re,

Non il n'y a pas de Tag 'Résolu'.

Dans la liste des noms tu as les noms qui sont valides dans tout le classeur et ceux qui sont valides dans l'onglet actif. Pour ces dernier la liste affiche le nom de l'onglet dans lequel il sont définis. Voir l'aide excel pour la définition des noms.

A+
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

Bonjour Hasco,

Je suis sincèrement désolé mais je ne trouve pas d'explication dans l'aide Excel sur la définition des noms de façons à en avoir des valides dans le classeur et d'autres dans l'onglet actif. Comment t'y es-tu pris pour les créer toutes ces listes? J'aimerai savoir pour pouvoir me débrouiller seul et maîtriser cette outil car très pratique ce que tu as fait.

Merci beaucoup et encore désolé de t'embêter de nouveau...
 

Dono

XLDnaute Nouveau
Re : VBA: Liste déroulante modifiée en fonction de la valeur d'une cellule

C'est bon j'ai trouvé, il suffit, dans la case "Nom" de faire précéder le nom choisit par le nom de la feuille.

Je suis en train de tout importer dans le fichier final car celui que je t'ai envoyé était un fichier exemple. Cependant, dans le fichier final, dans l'onglet "Suivi", ça fonctionne qu'avec le cas USC et le cas Bogie Brake; avec Brake Control en zone Secteur je ne possède plus de liste déroulante dans désignation banc.... La liste est vide. Ca marche très bien avec USC Et Bogie mais avec Brake.... Pourtant le programme est le même sous VBA, je ne comprends pas...

Merci de m'éclairer si tu peux :eek:
 

Discussions similaires

Réponses
2
Affichages
296

Statistiques des forums

Discussions
312 345
Messages
2 087 497
Membres
103 562
dernier inscrit
soso21