VBA Excel : Liste déroulante conditionnelle

Guillaume303413 -  
 Guillaume303413 -
Bonjour à tous,

je suis en train de construire un fichier de suivi clients sous Excel.

En page 1, je veux mettre en place une liste de validation avec tous les noms des clients.
Selon le choix, toutes mes feuilles (qui sont des tableaux où il y a des renseignements concernant tous mes clients) soit à son nom.
Etant donné que les feuilles de BDD sont très conséquentes, je voudrai que ça fasse un tri en sélectionnant le nom du client en page 1...


Ex :

feuil1 : je choisis Dupont
feuil2 : Excel n'affiche que les habitudes de consommation de Dupont
feuil3 : QUE le CA réalisé avec lui
feuil4 : QUE sa taille...


J'ai commencé à bidouiller un petit quelque chose qui marche mais pour que ça marche correctement il faudrait que j'en fasse 1 pour chaque client je crois.. et encore...

Sub Macro4()

Range("E5").Select
Sheets("Observations").Select
Selection.AutoFilter Field:=1, Criteria1:="Dupont"
Sheets("Notes").Select
Selection.AutoFilter Field:=1, Criteria1:="Dupont"
Sheets("Stat").Select
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"Client").CurrentPage = "Dupont"

End Sub

Quelqu'un aurait il un tuyau pour simplifier tout ça ?

Merci d'avance...

A voir également:

7 réponses

rnalextexmex Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   61
 
bonjour,
je ne sais pas si tu connais l'astuce avec la formule =INDIRECT()??
J'avais un problème de liste déroulante conditionnelle, mais moins compliqué que le tiens car j'avais tout sur une Feuille et je l'ai résolu en quelques minutes grace à ça.
Mais la solution doit etre adaptable à ton problème.

Chez moi, excel m'affiche un certain nombre de données, en fonction du choix que je faisait dans ma liste déroulante.

Voici la méthode. Fais toi un exemple bidon pour comprendre le principe, mais suis la méthode à la lettre pour que tu comprennes ensuite:

Objectif de la manip:

Autoriser des contenus en D2 en fonction des noms choisis en C2

Manip :

Créer des zones de choix (A2 à A5);(A10 à A13)et (A16 à A24)
C' est ces choix qui apparaitrons en D2 en fonction du nom choisi

Nommer ces zones identiquement au titre écrit en A1;A9 et A15(clic droit/nommer plage/définir)Un titre bien identifié par zone.

Creer une liste identique aux titres donnés(B22;B23 et B24)Ce sera la réference déroulante

Creer une liste deroulante en C2 correspondant à la liste de titre précédente : donnés/validation/liste=zone "B22;B23 et B24"

dernière étape: En D2 donnes/validation/liste puis "=INDIRECT(C2)"

C'est simple. Peut etre que pour la dernière étape, il y à possibilité de ne pas faire une liste déroulante, et donc excel t'afficherai toutes les données de "DUPONT" si c'est ainsi que tu as nommé ta plage de cellules.

Tiens moi au courant. ;)
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Bonjour

Sur quelle cellule se trouve ta liste de validation ?

;o)
0
Guillaume303413
 
Bonjour,

Polux31 :
Cellule E5 de la feuille 1.

Ca doit impacter des tableaux de BDD sur les feuilles suivantes.

Meltexmex :
Je n'arrive pas à employer tes formules, je pensais à des macros mais la tu sembles dire qu'il existe une maniere de passer par des formules ! Je vais chercher plus d'infos à ce sujet !

Merci à tous les deux
0
rnalextexmex Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   61
 
Polux31,

Dans mon cas j'ai une liste de validation en C2, puis une en D2 dont les choix vont varier en fonction de ce que j'aurai choisi en C2.

Je pense qu'il y à un moyen d'adapter cela au problème de guillaume, je suis entrain de tester des solutions...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
Dans ce cas

Sub Macro4()
Dim client As String

Client = Range("E5").Text
Sheets("Observations").Select
Selection.AutoFilter Field:=1, Criteria1:= client
Sheets("Notes").Select
Selection.AutoFilter Field:=1, Criteria1:= client
Sheets("Stat").Select
ActiveSheet.PivotTables("Tableau croisé dynamique").PivotFields( _
"Client").CurrentPage = client

End Sub


Teste ça et viens nous dire quoi.

;o)
0
rnalextexmex Messages postés 66 Date d'inscription   Statut Membre Dernière intervention   61
 
Guillaume,

Les solutions les plus simples sont parfois les plus efficaces.
J'ai réussi à faire ce que tu voulais, grâce à une formule SI.

Voici la démarche:
ouvre excel ^^

feuille1:
A1 : nom du client 1 , A2: nom du client 2, A3: nom du client 3...
B1 : CA client 1, B2: CA Client 2......
C1: Taille client 1, C2 Taille client 2....

Puis: E1: Crée une liste déroulante (validation de données) avec la plage ( A1:A???). ( en bref tous les noms de tous tes clients )

Feuille2:
A1 : "CA"
A2 : =SI(Feuil1!$E$1=Feuil1!A1;Feuil1!B1;"")
Tire la formule vers le bas autant de lignes que tu as de clients.

Feuille3:
A1: "Taille"
A2 : =SI(Feuil1!$E$1=Feuil1!A1;Feuil1!C1;"")
Tire la formule vers le bas autant de lignes que tu as de clients.

Et ainsi de suite si tu as d'autres critères.

seul inconvénient: le fait que tu tires la formule te met le résultat sur une ligne différente pour chaque client. Voici la solution que je n'ai pas le temps de tester:

ajoutes un total des colonnes de la feuille 2 et 3
Masques les colonnes de la feuille 2 et 3 si tu ne veux pas qu'on les voies,
puis fais un copier/"collage spécial:coller avec laison" de tes cellules avec les totaux de CA et de Taille à l'endroit ou tu veux que la valeur de CA et de taille apparaisse.
Long à expliquer mais simple comme bonjour à mettre en oeuvre.

Si tu as suivi mes explication, sa devrai fonctionner à merveille.

si tu galères, fais signe. Dans mon tableau cela fonctionne!
A+!
0
Polux31 Messages postés 6917 Date d'inscription   Statut Membre Dernière intervention   1 204
 
j'ai cru comprendre en lisant l'énoncé de la demande, que chaque feuille du classeur contenait des informations concernant les clients. Une feuille avec le CA, une autre avec la taille etc etc.

En regardant de plus près la macro, ça confirme l'énoncé. Un filtre est appliqué sur chaque feuille sur le nom du client sélectionné.

Je pense qu'il va effectivement galérer ... ^^

;o)
0
Guillaume303413
 
Merci à tous les deux pour votre aide !
J'ai plutôt utilisé la méthode de Polux31, ça me semble moins "galère" !

Polux, ta méthode marche (presque) à la perfection !
Seul le tableau croisé dynamique ne se tri pas automatiquement, je vais m'y pencher !

Merci beaucoup à tous les deux !
A charge de revanche !
0