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

108gestion-casques.xlsm (51.77 Ko)

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.

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 Sub

Bonjour 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 Sub

Cordialement.

Bonjour thev, MFerrand

thev, MFerrand, Je vois que la bataille est rude au moins ça fais avancer le schmilblick et fais améliorer les compétences de chacun . (humour bien sur)

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+

Rechercher des sujets similaires à "liste deroulante doublons"