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...

7 réponses

  1. rnalextexmex Messages postés 69 Statut Membre 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
  2. Polux31 Messages postés 7219 Statut Membre 1 204
     
    Bonjour

    Sur quelle cellule se trouve ta liste de validation ?

    ;o)
    0
  3. 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
  4. rnalextexmex Messages postés 69 Statut Membre 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Polux31 Messages postés 7219 Statut Membre 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
  7. rnalextexmex Messages postés 69 Statut Membre 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
    1. Polux31 Messages postés 7219 Statut Membre 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
  8. 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