Lancer code VBA après sélection dans Zone Liste Déroulante

Bonjour,

J'ai une première page "Dashboard" avec une Zone de liste déroulante nommée "ListeAgences"
Je souhaiterai, lorsque je sélectionne n'importe quelle donnée dedans, que la fonction "ThisWorkbook.RefreshAll" se lance afin de refresh tous mes autres onglets derrières.

J'ai essayé plein de choses vues sur le net, rien ne semble fonctionner comme je le souhaite. Pourtant ça me semble assez bête.

Pour le moment je ne souhaite pas partager le fichier, il est blindé de données externes et ce serait un travail fastidieux d'en faire une version light. Sry
Merci d'avance!

Bonjour

Il suffit de paraméter le Worksheet_Change de l'onglet où se trouve la liste déroulante et de vérifier l'intersection Target

Exemple avec une liste en A2

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2")) is nothing Then ThisWorkbook.RefreshAll
End Sub

Je me méprend peut-être en parlant de "Zone de liste déroulante" mais je voulais dire que ma liste est flottante et n'est pas reliée à une cellule fixe.
J'étais déjà tombé sur ce code, j'avais essayé de modifier dedans la target A2 par quelquechose comme Dashboard.ListeAgences mais je n'arrivais à rien comme ça.

RE

Liste flottante ne veut rien dire : c'est quoi comme objet un segment, une forme, un userform...

C'est une "Zone de liste déroulante" créée via "Développeur > Insérer > "Zone de liste déroulante (controle de formulaire)"

Quand je clique sur ma liste j'ai l'onglet Format de forme qui apparait, donc c'est peut être considéré comme une forme.

Edit : Si vous voulez un morceau du Excel je vous l'enverrai par MP, peut être histoire de comprendre pourquoi je passe par ce type de liste.

Edit 2 : Je viens d'essayer quand même d'intégrer le code dans la page intégrant ma cellule liée mais pas plus de succès.
Pareil si je me mets ma cellule liée dans la même page que ma liste, la cellule change de valeur mais je n'ai pas de refresh qui se lance.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("M1")) Then ThisWorkbook.RefreshAll
End Sub

Si je peux me permettre de lancer un nouveau message parce que j'édite depuis tout à l'heure mon dernier message selon mes avancées et ça ne devient pas très clair.

A priori je ne peux rien faire avec ma liste déroulante. Mais celle-ci est liée à une cellule (Cellule liée, selon Excel) et celle-ci est d'origine dans une seconde page de mon classeur. Donc j'ai bien une cellule qui change de valeur selon ma sélection dans ma liste.

J'ai donc envoyé le code sur la page de ma cellule liée

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("M1")) Then ThisWorkbook.RefreshAll
End Sub

Lorsque je sélectionne une nouvelle ligne de ma liste, rien.

Pour simplifier encore les choses, j'ai transféré ma cellule liée dans la même page que ma zone de liste déroulante
Je mets le code dans cette page, en modifiant la valeur de cellule dans le code, pareil, je sélectionne une nouvelle ligne de ma liste, rien, et pourtant ma cellule juste à côté change de valeur.

Donc soit le code n'est pas bon, soit je suis vraiment débile.
Encore une fois, si quelqu'un veut mon fichier demandez le, je l'enverrai par DM en essayant de bricoler quelque chose contre les données externes.

Bonjour,

Juste une question "bête"..

Tes objets à mettre à jour sont dans d'autres onglets..

Est-ce que tu as besoin de la réactualisation lorsque tu es sur ton onglet modifié, ou tu vas consulter dans les autres onglets?

Peut-être voir l'évènement dans le ThisWorkbook :

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ThisWorkbook.RefreshAll
End Sub

Peut-être?

Bonjour Consinhub !

Alors la question n'est pas bête, et j'suis même content que tu la poses pour une raison toute simple : c'est mon fonctionnement actuel !
Ca marche plutot bien pour ce que je veux faire mais deux choses m'embêtent avec cette solution :

- Si un jour je suis amené à avoir un TCD sur ma page principale, dès que je vais sélectionner une agence je n'aurais pas de refresh direct et je vais devoir switch de feuille deux fois. Si je présente ça à ma direction je suis viré :D
- Actuellement quand je change d'onglet (Facturation, QSE, achats, etc...) je suis déjà à un peu moins de 2sec où le curseur s'affole à force de refresh tous les graphiques. Et pourtant je n'ai pas encore créé tous les TCD/Graphiques, à terme je vais avoir plus du double.

C'est pour ça qu'il aurait fallu un refresh uniquement quand je sélectionne mon agence, comme ça dès que je change d'onglet tout est fluide.
Le code présenté plus haut me conviendrait si il arrivait à fonctionner. Dans l'idéal il faudrait que de la Page1 je sélectionne l'agence, la cellule M2 de la Page2 se met à jour (ça c'est ok), mais que le code VBA le voit pour refresh. Et là pour l'instant ça coince ici.

RE

J'ai corrigé la code qui était incomplet mais il n'y a pas de changement juste un calcul avec une cellule liée et on ne peut se baser sur le calcul sinon c'est ingérable

Ne peux-tu utiliser tout bêtement un segment connecté à tes TCD ?

Ah bordel, donc oui je viens tout juste de comprendre que "Worksheet_change" ne prend pas la valeur finale de ma cellule mais sa donnée brute (sa formule quoi)
Donc bien que ma valeur finale affichée dans la cellule change, sa formule elle reste statique, donc pour le VBA y a pas eu de changement.
Je viens de tester en changeant manuellement ma cellule de "PROUT" a "TOTO", effectivement ça refresh...

Donc pas de solution à partir de ce code ?

Pour le segment connecté, oui ça pourrait être une autre solution. Ca me demanderait de revoir carrément ma méthode de récupération des données car actuellement les TCD ne connaissent pas les noms des agences. Je passe par une formule dans un tableau tampon pour uniformiser certaines données, notamment les noms d'agence qui ne sont pas identiques selon les systèmes qui extract les données brutes. Bonheur. Mais ça doit être faisable, je vais m'y pencher et voir comment intégrer ça dans mon design.

En tout cas merci à vous deux pour m'avoir ouvert les yeux. Si quelqu'un a tout de même une solution à proposer à partir de ma liste déroulante je suis toujours tout ouï.

Re-,

Pourquoi ne pas utiliser une macro reliée à ta zone de liste déroulante (clic droit sur l'objet en mode développeur) :

image

Et mettre ton code dans cette macro?

MAIS C'EST GENIAL

Merci beaucoup, ça fonctionne plus que bien pour si peu !
Comment ne pas y avoir pensé plus tot T_T

Gros merci !

Rechercher des sujets similaires à "lancer code vba selection zone liste deroulante"