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 SubJe 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 SubSi 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 SubLorsque 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 SubPeut-ê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 ?
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ï.
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 !
