Liste deroulante sans doublons
Bonjour le forum
Je résume ma situation, au seins de ma société je viens d'avoir la responsabilité de la gestion du suivi des casques de travail (EPI) au niveau nationale. Donc gestion de plusieurs sites.
Sincèrement, je n'arrive pas à définir exactement le fichier que je dois mettre en place. J'ai donc commencé quelque chose tout de même.
J'ai commencer par effectuer la base (enregistrement) des personnels avec leurs Site et Fonctions (ça je pense y avoir arrivé) mais il me manque une alerte au cas ou un personnel existe déjà.
Sur la feuille "Accueil" j'aimerai avoir des listes déroulante sans doublons qui reprennent les infos des Site et Fonctions de la feuille "Employés". J'ai bien tenté après recherches quelques codes mais n'arrive pas à l'adapter (en tout cas ça ne marche pas).
Dans le VB feuil "Employés" il y le code que j'essais d'adapter. Mon idée est de créer en feuil BDDListes ces fameuses listes sans doublons. (Si il y a plus simple, je suis preneur.)
Je suis preneur également sur l'organisation d'un fichier complet mais le plus simple possible.
Fichier en PJ
Cordialement
Bonsoir,
Si j'ai bien compris ce que tu souhaites faire, il me semble que tu fais exactement ce que tu souhaites !
Sur le fond, pas de meilleure méthode à ma connaissance.
Tu peux seulement réduire le volume de code de l'opération. Si tu la lances à partir de Change, inutile de disperser et tester la même condition pour chaque extraction : tu testes et tu fais tous tes filtrages à la suite. En l'état ça tient en 4 lignes de code : 2 filtrages, 2 tris. Ta ligne filtrage serait plus courte en passant les arguments par position (au lieu de les passer par nom (moi qui n'aime pas écrire plus que nécessaire, je n'utilise que le passage par position, sauf cas particulier), mais j'admets qu'on peut préférer le passage par nom... Pour le tri (là c'est un des rares cas où je passe par nom, car les arguments sont nombreux, on ne les utilise jamais tous et leur ordre n'est pas logique, donc risques d'erreurs à passer par position)... tu as pris un raccourci risqué en ne passant que la clé de tri, l'ordre est le plus souvent ascendant mais il peut arriver qu'on ait fait un tri inverse et c'est celui-là qui serait gardé en mémoire par Excel et alors appliqué si tu ne l'as pas défini explicitement (le tri fait partie des quelques opérations pour lesquelles Excel applique le dernier réglage utilisé pour ce que tu ne définis pas...)
Au-delà de remarques de détails pour discuter... je répète que tu fais ce que tu dis vouloir faire, et donc de ce point de vue je ne vois pas ce qu'on peut t'apporter de plus.
Cordialement.
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
proposition d'amélioration du code feuille employés
Option Explicit
Dim nb_lignes_utilisées As Long
Private Sub Worksheet_Change(ByVal Target As Range)
nb_lignes_utilisées = ActiveSheet.UsedRange.Rows.Count
'site
If Not Intersect(Target, [B:B]) Is Nothing Then
With Sheets("BDDListes").[B:B].Resize(nb_lignes_utilisées)
.Value = [B:B].Resize(nb_lignes_utilisées).Value
.RemoveDuplicates Columns:=1, Header:=xlYes 'suppression doublons
.Sort key1:=.Cells(1), order1:=xlAscending, Header:=xlYes 'tri ascendant
End With
End If
'fonction
If Not Intersect(Target, [E:E]) Is Nothing Then
With Sheets("BDDListes").[D:D].Resize(nb_lignes_utilisées)
.Value = [E:E].Resize(nb_lignes_utilisées).Value
.RemoveDuplicates Columns:=1, Header:=xlYes 'suppression doublons
.Sort key1:=.Cells(1), order1:=xlAscending, Header:=xlYes 'tri ascendant
End With
End If
End SubBonjour dominical,
Tant qu'à améliorer...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim k%, n%, lst As Range
If Target.Row > 1 And Target.Count = 1 Then
k = Target.Column
If k = 2 Or k = 5 Then
n = Me.Cells(Rows.Count, k).End(xlUp).Row
Set lst = IIf(k = 2, [ListSite], [ListFonction])
lst.Offset(1).ClearContents
Me.Cells(1, k).Resize(n).AdvancedFilter xlFilterCopy, , lst.Cells(0, 1), True
lst.Sort key1:=lst.Cells(1, 1), order1:=xlAscending, Header:=xlNo
End If
End If
End SubCordialement.
Bonjour thev, MFerrand
thev, MFerrand, Je vois que la bataille est rude
Cela va certainement me donner des idées dans la création du fichier, car j'avoue que je n'arrive pas à avoir de projection sur la mise en place de ce fichier.
Merci de votre aide les 2 solutions fonctionne a merveille.
Je vais pouvoir essayer de poursuivre l'évolution de mon projet.
Merci à vous
Cordialement
Bonjour tardif...
car j'avoue que je n'arrive pas à avoir de projection sur la mise en place de ce fichier.
Pour ça, tu es seul en piste !
A+