2 Listes déroulantes en conflit ?

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

[Inline

]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

[/Inline]

Oli

5annexe-11.xlsm (63.15 Ko)

Bonjour,

Tu utilise 2 fois Liste, d'où le souci.

Un essai ... en utilisant aussi Liste2 ...

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Lst As Range
Dim Lst2 As Range
Dim Liste As String
Dim Liste2 As String ' << ajout
Dim Plg As Range

   If Not Intersect(Target, Range("A18:B63")) Is Nothing Then
      ' Si l'intersection entre la plage modifiée : Target
      '  et la plage utile : c15:d60
      '  n'est pas vide. On appelle donc la procédure : Trier_Numeroter
      '  avec ces deux arguments (nom de la feuiller et adresse' de la plage utile)
      Trier_Numeroter "Rec", "A18:B63"
   End If

   With Worksheets("Profs")
      Set Lst = .Range(.Cells(2, 2), .Cells(.Rows.Count, 2).End(xlUp))
   End With
   ThisWorkbook.Names.Add "Liste2", "=Profs!" & Lst.Address  ' << Modif

   With Worksheets("Rec").Range("B18:B63").Validation
      .Delete  
      .Add xlValidateList, , , "=Liste2"  ' << Modif
      .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

End Sub

ric

Re Ric

Merci pour la correction...

J'ai ajouter ceci et j'ai un erreur impossible de lire la propriété VLookup de la classe worksheet fonction......

Set Plg = Sheets("Profs").Range(.Cells(1, 1), .Cells(.Rows.Count, 6).End(xlUp)) With Sheets("Rec") If .Range("B18").Value <> "" Then .Range("C18").Value = WorksheetFunction.VLookup(.Range("B18").Value, Plg, 3, False) Else .Range("B18") = "" End If End With

Oli

Bonjour,

Je ne comprends pas où l'intégrer ou quoi remplacer.

ric

re Ric,

je pensais le mettre après le code de la liste déroulante.....

L'idée, c'est quand je sélectionne un nom, il affiche aussi la fonction, le nombre de période et le statut de la personne....

Oli

Bonjour,

Je comprends vite. Mais avant, il faut m'expliquer longtemps.

Un essai dynamique ...

À placer juste avant le End Sub .

   '' ###########
Application.EnableEvents = False
   Set Plg = Sheets("Profs").Range("B2:F" & Sheets("Profs").Cells(Rows.Count, 6).End(xlUp).Row)

   With Sheets("Rec")
      If .Cells(Target.Row, "B").Value <> "" Then
         .Cells(Target.Row, "C").Value = WorksheetFunction.VLookup(.Cells(Target.Row, "B").Value, Plg, 3, False)
      End If
   End With

Application.EnableEvents = True

ric

Re Ric,

J'ai ajouté ceci pour que cela soit complet

[Inline

].Cells(Target.Row, "D").Value = WorksheetFunction.VLookup(.Cells(Target.Row, "B").Value, Plg, 3, False)

.Cells(Target.Row, "E").Value = WorksheetFunction.VLookup(.Cells(Target.Row, "B").Value, Plg, 4, False)

.Cells(Target.Row, "H").Value = WorksheetFunction.VLookup(.Cells(Target.Row, "B").Value, Plg, 5, False)

End If

[/Inline]

Cela fonctionne mais quand j'introduit un nouveau, il trie(ce qu'il faut faire mais la sélection ne suit pas), le nom est trié mais la fonction, le nombre de période, le statut.... ne suivent pas.... de la col C à W

j'ai effacer toutes les cellules fusionnées et j'ai ajouter le nouveau fichier au poste...

En fait c'est toute la ligne qui doit suivre le tri et le n°

Oli

1annexe-11.xlsm (63.66 Ko)

Bonjour,

Ouupppssss!!!! j'ai oublié de le mentionner.

Au début du code, c'est là la ligne trieuse qui pose problème.

   If Not Intersect(Target, Range("A18:B63")) Is Nothing Then
      ' Si l'intersection entre la plage modifiée : Target
      '  et la plage utile : c15:d60
      '  n'est pas vide. On appelle donc la procédure : Trier_Numeroter
      '  avec ces deux arguments (nom de la feuiller et adresse' de la plage utile)
''      Trier_Numeroter "Rec", "A18:B63"  ' <<< Modif
   End If

ric

Re Ric,

J'ai modifié cette ligne,jusque la col W

le problème c'est qu'il modifie automatiquement avec le tri , j'ai pas le temps d'introduire toute la ligne...

je devrais introduire toute la ligne et puis ensuite il devrait faire le tri

Oli

Bonjour,

Si tu tiens à faire effectuer le trie ... place la ligne en dernier, juste avant le Application.EnableEvents = True

Je ne l'ai pas testé, mais je crois que ça devrait faire l'affaire.

...
...
...
Trier_Numeroter "Rec", "A18:W63"
Application.EnableEvents = True
End Sub

ric

re Ric,

Nickel, cela fonctionne correctement....

Merci beaucoup Ric pour ton aide....

@+

Oli

ric

Rechercher des sujets similaires à "listes deroulantes conflit"