2 Listes déroulantes en conflits ?

thespeedy20

XLDnaute Occasionnel
Bonjour,

j'ai deux listes déroulantes distinctes, une pour la plage B18:B63 et une pour la plage P18:63....dans la feuille Rec

Dans la plage B18:B63 j'obtiens la liste de colonne P18:63 !!!!

Les valeurs de la liste de la B18:B63 se trouve dans la feuille Profs et celle P18:63 dans la feuille Evenements.
les deux listes se retrouvent dans la feuille Rec

VB:
Dim Lst As Range
Dim Lst2 As Range
Dim Liste As String

With Worksheets("Profs")
        Set Lst = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))
    End With
    ThisWorkbook.Names.Add "Liste", "=Profs!" & Lst.Address
   
With Worksheets("Rec").Range("B18:B63").Validation
        .Delete
        .Add xlValidateList, , , "=Liste"
        .InputTitle = "Sélection"
        .InputMessage = "Recherche rapide"
    End With
   
   
With Worksheets("Evenements")
        Set Lst2 = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))
    End With
    ThisWorkbook.Names.Add "Liste", "=Evenements!" & Lst2.Address
   
With Worksheets("Rec").Range("P18:P63").Validation
        .Delete
        .Add xlValidateList, , , "=Liste"
        .InputTitle = "Sélection"
        .InputMessage = "Recherche rapide"
    End With
 

Pièces jointes

  • Annexe 11.xlsm
    63.2 KB · Affichages: 11

sylvanu

XLDnaute Barbatruc
Supporter XLD
Dans le cas où j'aurais bien compris, collez ce module dans la feuille Rec. ( après les Private Sub Worksheet_Activate )
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a, b, IndexP
  On Error Resume Next
' Activation si colonne=2 (B) et ligne compris entre 18 et 63 incluses.
  If Target.Column = 2 And Target.Row > 17 And Target.Row < 64 Then
' On prélève le nom du prof
    NomProf = Target.Value
' On recherche dans la liste où il se trouve
    IndexP = 1
    While NomProf <> Worksheets("Profs").Cells(IndexP, 2)
        IndexP = IndexP + 1
    Wend
' On copie les données
    Worksheets("Rec").Cells(Target.Row, 1) = Worksheets("Profs").Cells(IndexP, 1)   ' N°
    Worksheets("Rec").Cells(Target.Row, 3) = Worksheets("Profs").Cells(IndexP, 3)   ' Insere fonction
    Worksheets("Rec").Cells(Target.Row, 4) = Worksheets("Profs").Cells(IndexP, 4)   ' Nombre de périodes
    Worksheets("Rec").Cells(Target.Row, 5) = Worksheets("Profs").Cells(IndexP, 5)   ' Matricule
    Worksheets("Rec").Cells(Target.Row, 6) = Worksheets("Profs").Cells(IndexP, 6)   ' Situation administrative
  End If
End Sub
Mais cela suppose qu' aucune cellule du tableau soit fusionnée car je copie colonne de Profs dans colonne de Rec pour leprof concerné.
Cette macro est activée lorsqu'une cellule de Nom est modifié.
( J'ai supposé que N° de Rec correspond à N° de Profs )
 

thespeedy20

XLDnaute Occasionnel
re,

oui, visible dans la liste, mais pas sur la feuille (même nom), la différence se fera au niveau de la fonction sur la feuille, et des autres données...

en résumé:

nom différent sur la listé déroulante , après le click, le nom normal, et les renseignement qui vont avec avec....

ex: anaelle-géo : devient anaelle - client - 11 période - D - 120000000
et: anaelle-français : devient anaelle - stagiaire - 6 période - D - 120000000

= deux fonctions différentes...pour la même personne
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Vous êtes compliquée. Donc si je résume :
Liste déroulante, j'ai deux anaelle avec deux noms différents.
Quand on copie les caractéristiques alors on "ecrase" anaelle-géo pour le remplacer par anaelle.
Si c'est ça, alors il faut rajouter une colonne dans profs avec nom affiché nom entré car le VAB ne fera pas la différence.
Ou alors se figer une règle stricte, par ex. Toujours - entre prénom et fonction. Dans ce cas le VBA supprimera tout ce qui est à gauche du -.
C'est ça ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bien le bonjour. Voilà c'est fait. Comme la liste déroulante ne peut pointer qu'une colonne, j'ai créer en automatique une colonne à afficher ( Col8 de Profs mise à jour lors du tri automatique.)
Pour l'anecdote, c'est devenu vicieux : Si le modifie un prénom en colonne 2 j'active la macro de mise à jour, qui maintenant modifie le prénom donc la colonne 2 ... qui lance la macro .... boucle infinie donc plantage.
J'utilise donc une astuce ( lignes à ne pas toucher) : Si macro MAJ activé, le met "N" dans la première colonne. Quand je remet à jour le prénom je trouve N et donc je ne fais rien. Quand j'ai mis à jour le Prénom, je nettoie le "N".
Si c'est fini ... penser à :
1- supprimer feuille "A lire"
2- réactiver si vous le voulez le f=flag Application.DisplayAlerts = False dans ThisWorbook.
3- Nettoyer toutes les listes.
Bonne journée.
 

Pièces jointes

  • Annexe 11(V5).xlsm
    61.7 KB · Affichages: 4

thespeedy20

XLDnaute Occasionnel
Bonjour Sylvanu,

Voilà la boucle est bouclée, votre recherche et vos idées sont excellentes, je te tiens encore à vous remercier pour votre temps et investissement dans mon projet....Très beau travail....

je clôture ici le poste
Je vous souhaite une excellente journée
 

Discussions similaires

Réponses
7
Affichages
404

Statistiques des forums

Discussions
311 725
Messages
2 081 940
Membres
101 845
dernier inscrit
annesof