XL 2019 Liste déroulante

chinel

XLDnaute Impliqué
Bonjour tout le monde, je cherche à faire une liste déroulante dans ma feuille (Comptage) avec tous les prénoms des gens de la feuille (Personnel) mais sachant qu'une liste déroulante ne peut se faire que, en ligne ou en colonne, je ne sais pas comment faire. Merci de votre aide !
 

Pièces jointes

  • Planning d'équipe Melvin.xlsm
    53.6 KB · Affichages: 15

TooFatBoy

XLDnaute Barbatruc
Tiens, en parlant de protection de feuille, est-ce qu'il n'y a pas une macro qui déprotège une feuille au début, et au lieu de reprotéger la feuille à la fin, protège une autre feuille ?

Il y a ça ou ce sont encore mes neurones qui marchent mal ??? 😢
 

cp4

XLDnaute Barbatruc
comme ceci
VB:
With Sheets("Comptage")
      .Unprotect "manu01"   ' remplace mot_de_passe par ton mot de passe
      With .Range("B1").Validation
         .Delete
         .Add Type:=xlValidateList, _
              Operator:=xlBetween, _
              AlertStyle:=xlValidAlertStop, _
              Formula1:=liste
      End With
      .Protect "manu01"   ' remplace mot_de_passe par ton mot de passe
   End With
 

chinel

XLDnaute Impliqué
comme ceci
VB:
With Sheets("Comptage")
      .Unprotect "manu01"   ' remplace mot_de_passe par ton mot de passe
      With .Range("B1").Validation
         .Delete
         .Add Type:=xlValidateList, _
              Operator:=xlBetween, _
              AlertStyle:=xlValidAlertStop, _
              Formula1:=liste
      End With
      .Protect "manu01"   ' remplace mot_de_passe par ton mot de passe
   End With
 

Pièces jointes

  • erreur.png
    erreur.png
    54.9 KB · Affichages: 10

TooFatBoy

XLDnaute Barbatruc
Merci pour ton soutien, je regarde ça en rentrant chez moi. Bonne journée
Eh Manu, toujours pas rentré chez oit ??? 😁

Si tu as le temps de regarder le fichier, ce serait sympa de faire un retour, parce que j'ai essayé de :
- mettre en place trois listes (chefs, brigadiers, ouvriers) facilement modifiables,
- colorier en noir et vider les cellules, pour tous les cas possibles,
- enlever le coloriage noir pour tous les cas possibles,
- mettre, dans le tableau de comptage, une liste déroulante à jour et complète des ouvriers,
- mettre les bonnes formules dans le tableau de comptage,
- modifier la macro qui remplie le tableau de la BDD dans la feuille "Personnel",
- corriger toutes les indentations fantaisistes,
- corriger tous les Range à rallonge,
- corriger quelques coquilles.
 
Dernière édition:

cp4

XLDnaute Barbatruc
Bonjour, si pourquoi ? 🤔 mais ici déjà reparti 😁
Bonjour,
@chinel:mad: : C'est ce qu'on appelle communément du "mépris". Notre ami @TooFatBoy a eu la gentillesse de faire ton boulot. En retour, il a le droit d'attendre un minimum de reconnaissance, ne serait-ce qu'en lui faisant un retour à sa proposition.
Enlève ta tétine et grandi un peu. Tu viens de prendre un jeton pour que je te rajoutes à ma liste des membres à ignorer. à bon entendeur, je te salue.

@TooFatBoy ;): Finalement, tu avais raison, j'aurai dû passer mon chemin et ignorer cette discussion. Je suis très déçu par le comportement de @chinel . Bonne journée à toi.
 

chinel

XLDnaute Impliqué
@cp4 ton fichier est vraiment super, c'est vraiment ça que je désirais mais malgré que j'ai suivi tes conseils, j'ai toujours un bug quand je protège la feuille. (Voir plus haut, image à l'appui) merci de ton soutien ! Désolé 🙏 pour la réponse un peu tardive mais j'ai aussi une vie après le boulot 😏
 

cp4

XLDnaute Barbatruc
@cp4 ton fichier est vraiment super, c'est vraiment ça que je désirais mais malgré que j'ai suivi tes conseils, j'ai toujours un bug quand je protège la feuille. (Voir plus haut, image à l'appui) merci de ton soutien ! Désolé 🙏 pour la réponse un peu tardive mais j'ai aussi une vie après le boulot 😏
Je t'ai donné la solution au post#33
Chez-moi ça fonctionne bien (démo ci-dessous)
Chinel.gif

Je n'ai aucun bug.
 

cp4

XLDnaute Barbatruc
Merci beaucoup mais chez moi j'ai un bug 🥲
Voici le code complet.
VB:
Option Explicit
Option Compare Text
Dim d As Object

Sub ValidationDico()
   Dim dl As Integer, Tb(), i As Integer, j As Integer, cle, liste

   Set d = CreateObject("scripting.dictionary")
   With Sheets("personnel")
      dl = .Range("A" & Rows.Count).End(xlUp).Row
      Tb = .Range("B2:AE" & dl).Value
   End With

   For i = LBound(Tb) To UBound(Tb)
      For j = LBound(Tb, 2) To UBound(Tb, 2)
         If Tb(i, j) <> "" Then d(Tb(i, j)) = ""
      Next j
   Next i

   DicoTri d      'tri
    
For Each cle In d.keys
      liste = liste & "," & cle
   Next
   With Sheets("Comptage")
      .Unprotect "manu01"   ' remplace mot_de_passe par ton mot de passe
      With .Range("B1").Validation
         .Delete
         .Add Type:=xlValidateList, _
              Operator:=xlBetween, _
              AlertStyle:=xlValidAlertStop, _
              Formula1:=liste
      End With
      .Protect "manu01"   ' remplace mot_de_passe par ton mot de passe
   End With
End Sub
Sub DicoTri(dico)
Dim i As Integer, Tbl
   Tbl = d.keys                           ' Transfert Dictionnaire dans Array
   Tri Tbl, LBound(Tbl), UBound(Tbl)   ' Tri Array
   d.RemoveAll                           ' Création du dictionnaire
   For i = LBound(Tbl) To UBound(Tbl)
      d(Tbl(i)) = ""
   Next i
End Sub
Sub Tri(a, gauc, droi)          ' Quick sort
Dim ref As String, g As Integer, d As Integer, temp
   ref = a((gauc + droi) \ 2)
   g = gauc: d = droi
   Do
      Do While a(g) < ref: g = g + 1: Loop
      Do While ref < a(d): d = d - 1: Loop
      If g <= d Then
         temp = a(g): a(g) = a(d): a(d) = temp
         g = g + 1: d = d - 1
      End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub
 

chinel

XLDnaute Impliqué
Voici le code complet.
VB:
Option Explicit
Option Compare Text
Dim d As Object

Sub ValidationDico()
   Dim dl As Integer, Tb(), i As Integer, j As Integer, cle, liste

   Set d = CreateObject("scripting.dictionary")
   With Sheets("personnel")
      dl = .Range("A" & Rows.Count).End(xlUp).Row
      Tb = .Range("B2:AE" & dl).Value
   End With

   For i = LBound(Tb) To UBound(Tb)
      For j = LBound(Tb, 2) To UBound(Tb, 2)
         If Tb(i, j) <> "" Then d(Tb(i, j)) = ""
      Next j
   Next i

   DicoTri d      'tri
   
For Each cle In d.keys
      liste = liste & "," & cle
   Next
   With Sheets("Comptage")
      .Unprotect "manu01"   ' remplace mot_de_passe par ton mot de passe
      With .Range("B1").Validation
         .Delete
         .Add Type:=xlValidateList, _
              Operator:=xlBetween, _
              AlertStyle:=xlValidAlertStop, _
              Formula1:=liste
      End With
      .Protect "manu01"   ' remplace mot_de_passe par ton mot de passe
   End With
End Sub
Sub DicoTri(dico)
Dim i As Integer, Tbl
   Tbl = d.keys                           ' Transfert Dictionnaire dans Array
   Tri Tbl, LBound(Tbl), UBound(Tbl)   ' Tri Array
   d.RemoveAll                           ' Création du dictionnaire
   For i = LBound(Tbl) To UBound(Tbl)
      d(Tbl(i)) = ""
   Next i
End Sub
Sub Tri(a, gauc, droi)          ' Quick sort
Dim ref As String, g As Integer, d As Integer, temp
   ref = a((gauc + droi) \ 2)
   g = gauc: d = droi
   Do
      Do While a(g) < ref: g = g + 1: Loop
      Do While ref < a(d): d = d - 1: Loop
      If g <= d Then
         temp = a(g): a(g) = a(d): a(d) = temp
         g = g + 1: d = d - 1
      End If
   Loop While g <= d
   If g < droi Then Call Tri(a, g, droi)
   If gauc < d Then Call Tri(a, gauc, d)
End Sub
Merci beaucoup !!!!!!!!!!!! j'ai dû juste modifier ceci dans le code de la feuille "Comptage"
Private Sub Worksheet_Activate()
ValidationDico
End Sub

car sans cela, j'avais encore un bug ! Tu es mon sauveur, un grand merci et bonne soirée et merci d'être resté à mes côtés !
 

Discussions similaires

Statistiques des forums

Discussions
314 497
Messages
2 110 239
Membres
110 708
dernier inscrit
novy16