Lier des macros à des listes déroulantes

Didou59

XLDnaute Nouveau
Bonjour à toutes et tous,
Je vous met le code car même en allégeant le fichier il est toujours trop gros pour le joindre. Vous y verrez 2 listes déroulantes, la seconde étant reliée à la première. J'ai créer mon code pour qu'il m'affiche des résultats en fonction de ce qui est sélectionné dans la liste (code qui n'est peut-être pas parfait). Mon souci est d'afficher les résultats en fonction des choix de la seconde liste. J'ai essayé plusieurs solutions mais cela ne fonctionne pas.
Les listes ont été créees avec la barre à outils contröle et chaque liste est attachée à une cellule d'où les chiffres 1,2,3 ...
Merci pour votre aide.
Code:
Sub Tous()
' Affiche tous les enregistrements
If Range("B3") = "2" Then
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil2").Select
    Range("F3:F24").ClearContents
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1
    Range("A1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
End If
If Range("B3") = "3" Then
' Affiche les enregistrements de la direction Affaires financières
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Affaires financières*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "3" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D3:D24").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "4" Then
' Affiche les enregistrements de la direction Affaires statutaires
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Affaires statutaires*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "4" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D13").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "5" Then
' Affiche les enregistrements de la direction de la Communication
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Communication*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "5" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D14").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "6" Then
' Affiche les enregistrements de la direction des Concours
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Concours*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "6" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D15:D17").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "7" Then
' Affiche les enregistrements de la direction Générale
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Direction générale*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "7" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D18:D18").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "8" Then
' Affiche les enregistrements de la direction Emploi
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Emploi*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
        If Range("B3") = "8" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D19:D21").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End If
If Range("B3") = "9" Then
' Affiche les enregistrements de la direction Ressources humaines et logistique
    Range("A13:L350").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlUp
    Sheets("Feuil3").Select
    [A1].AutoFilter field:=1, Criteria1:="=Ressources humaines et logistique*"
    Range("B1:L350").Copy
    Sheets("Feuil1").Select
    Range("A13").Select
    ActiveSheet.Paste
End If
        If Range("B3") = "9" Then
        Sheets("Feuil2").Select
        Range("F3:F24").ClearContents
        Range("D22:D24").Copy
        Range("F3").Select
        ActiveSheet.Paste
        Sheets("Feuil1").Activate
        End If
End Sub
ide.
 

Modeste

XLDnaute Barbatruc
Re : Lier des macros à des listes déroulantes

Bonjour Didou59,

Si tu n'as pas encore obtenu de réponse après ces quelques heures, c'est sans doute parce que sans un petit bout de fichier, ce serait compliqué. Pour rappel, nous n'avons nullement besoin de ton fichier réel: juste un fichier exemple, qui représente la structure et le type de données de ton original.
Dis-nous aussi s'il y a une raison particulière pour que tes listes déroulantes soient créées avec des contrôles (de formulaire?)

Ceci dit tu as raison sur un point: il doit être possible de simplifier ton code :)
 

Didou59

XLDnaute Nouveau
Re : Lier des macros à des listes déroulantes

Bonjour Modeste,
Pour faire suite à ta réponse je t'ai mis le fichier en pièce jointe (bizarre aujourtdh'ui cela fonctionne.
Merci
 

Pièces jointes

  • Test excel.xls
    115 KB · Affichages: 80
  • Test excel.xls
    115 KB · Affichages: 84
  • Test excel.xls
    115 KB · Affichages: 72

Modeste

XLDnaute Barbatruc
Re : Lier des macros à des listes déroulantes

Bonjour Didou59,

Comme tu ne disais rien des raisons du choix des contrôles ... j'ai travaillé avec des validations de données en B3 et B5. Des plages nommées en Feuil2 (voir les commentaires dans cette même feuille) servent de source aux deux listes déroulantes. Il conviendra, si le reste te convient de "soigner" la manière de nommer les plages de services: là je l'ai fait "en dur", ce devrait plutôt être dynamique!
Pour le reste, j'ai travaillé avec un filtre avancé (qui permet plus facilement de copier le résultat dans une autre feuille). Le code se trouve dans le module de la Feuil1, puisque c'est le changement de la valeur en B3 et/ou en B5 qui déclenche la macro.

Pas trop de temps pour faire des tests approfondis ... je t'en laisse le soin!
Pas pu tester sous Excel 2003 non plus!
 

Pièces jointes

  • Listes Didou59.xls
    114.5 KB · Affichages: 68
  • Listes Didou59.xls
    114.5 KB · Affichages: 84
  • Listes Didou59.xls
    114.5 KB · Affichages: 85
Dernière édition:

Didou59

XLDnaute Nouveau
Re : Lier des macros à des listes déroulantes

Modeste,
Encore une fois tu m'as apporté la solution qui, vu ton code, paraît très simple comparée à ma solution. Pour ton info, si j'avais mis des listes déroulantes via la boite à outils contröles c'est pour que l'utilisateur néophyte d'excel puisse vois d'un coup d'oeil ces listes.
Merci encore.
 

Modeste

XLDnaute Barbatruc
Re : Lier des macros à des listes déroulantes

Re-bonjour,

L'utilisation des "zones de liste déroulante" reste possible, bien sûr, mais comme c'était un poil plus simple avec les validations, j'ai choisi la simplicité :p ... Dis-nous si tu as besoin d'un coup de main (après avoir cherché, bien sûr ;))

Pour ta dernière question, la fonction DECALER permet de redéfinir la référence à une plage. Dans le cas présent, au départ de la cellule A3, on redéfinit la plage comme ayant un nombre de lignes égal au nombre de valeurs dans la plage A3:A20.
De cette manière, si tu ajoutes des "directions" en A11, A12, A13, etc. celles-ci seront automatiquement incluses dans la liste déroulante. Pour plus d'info, fais une recherche sur "liste dynamique", par exemple sur ce même forum.
 

Didou59

XLDnaute Nouveau
Re : Lier des macros à des listes déroulantes

Merci pour la réponse, je vais chercher. Après avoir testé, est-il possible lorsque l'on choisit une direction, celle-ci s'affiche complétement avant de chosir un service, j'aimerais afficher le coût total des ommes trouvées pour chaque direction puis pour chaque service. De plus, cette formule "décaler " ou la place tu ?
Merci.
 

Modeste

XLDnaute Barbatruc
Re : Lier des macros à des listes déroulantes

Re,

La formule pour nommer dynamiquement une plage est à placer -sous 2003 et si je me souviens bien!?- dans Insertion > Nom > Définir

Ci-joint une version qui affiche les enregistrements de la direction sélectionnée, avant même qu'un service soit choisi. Pas beaucoup de changements dans le code, mais des formules en H2 et H3.

... à tester aussi!
 

Pièces jointes

  • Listes Didou59.xls
    111.5 KB · Affichages: 87
  • Listes Didou59.xls
    111.5 KB · Affichages: 118
  • Listes Didou59.xls
    111.5 KB · Affichages: 114

Didou59

XLDnaute Nouveau
Re : Lier des macros à des listes déroulantes

Bonjour Modeste,
Après avoir testé et ajouté mes calculs ou affichages automatiques, je te confirme que tout fonctionne. J'ai bien compris la fonction "Décaler" dans la zone de liste. Si je devais ajouter des services, comment devrais-je m'y prendre ? Puis-je les ajouter dans mon tableau qui reprend les services et redéfinir les noms de liste ou dois-je procéder autement ?
Merci pour ta(tes) réponses et pour le code.
 

Modeste

XLDnaute Barbatruc
Re : Lier des macros à des listes déroulantes

Bonsoir Didou59,

Pour les différents services, les laisser (comme c'est le cas actuellement) les uns en-dessous des autres ne va pas faciliter la gestion de listes dynamiques: il me semble que je créerais une série de services par colonne, dans la "Feuil2" (une colonne par Direction), avec à chaque fois une plage nommée dynamique
... ceci n'étant que mon avis :p
 

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 938
Membres
101 844
dernier inscrit
pktla