Mise en forme conditionnelle calendrier / liste données

  • Initiateur de la discussion Initiateur de la discussion PierreBst
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

PierreBst

XLDnaute Nouveau
Bonjour à tous !

J'espère ne pas créer un doublon, mais je n'ai pas trouvé de réponse à ma question sur les autres threads.

Je vais essayer d'expliquer ma requête, mais j'ai moi-même du mal à la formuler à la visualiser.

Je dispose de 4 colonnes : Date / Choix joueur / Liste de joueurs / Disponibilité du joueur.

De base, j'ai 2 colonnes qui ne bougeront pas, la date, et la liste des joueurs.

L'objectif est de choisir un joueur à une date t, et qu'ils ne soit plus disponible sur les 30 prochains jours. Mais, mettons que l'on soit au 1er juin, si je le rentre dans le tableau au 7 juin, qu'il ne puisse pas être dispo antérieurement. Je n'ai pas du tout la formation ni les compétences excel pour même imaginer la forme que cela doit prendre.


Je pensais peut être à un TCD, mais je suis tout sauf sûr.

Je vous mets mon fichier, et espère que ma demande n'est pas trop farfelue 🙂

Merci à tous et bonne journée,

Pierre
 

Pièces jointes

Bonjour,

Si je comprends :

- Entre le 1er janvier et le 7 juin, le joueur n'est pas dispo.
- Entre le 7 juin et le 31 décembre il est potentiellement dispo.
- S'il je l'inscris dans cet interval, il ne sera plus dispo pendant 30 jours.

Sera-t'il dispo à l'issue de ces 30 jours, ou indispo jusqu'au 7 juin de l'année suivante ?

Je n'ai pas forcément la réponse à ta question, mais il y a quelques interrogations préalables .

Bonne soirée.

Swan
 
Bonjour

J'ai comme quelques difficultés à comprendre ta demande : Je pense qu'il doit manquer une petite information dans ta demande... Par exemple, pourrais-tu nous dire pourquoi 1/07 + 30 (comme tu l'écris) donne comme période d'indisponibilité 1/07 au 14/08 ?

@ plus
 
Bonsoir PierreBst, chezswan, CISCO,

Ce qu'il faut éviter c'est le chevauchement des plages de 30 jours pour un même joueur.

Voyez le fichier joint avec une liste de validation en colonne B de la feuille 'Calendrier'.

Elle est créée par cette macro dans le code de la feuille :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s As Boolean, t, d As Object, i&, acr&
s = ThisWorkbook.Saved
[B:B].Validation.Delete 'RAZ
If ActiveCell.Row > 1 And ActiveCell.Column = 2 Then
  With Feuille1 'CodeName de la feuille "Joueurs à traiter"
    .[A:B].Sort .[A1], xlAscending, Header:=xlNo 'tri de la liste des joueurs
    t = .[A1].CurrentRegion.Resize(, 2) 'au moins 2 éléments
    Set d = CreateObject("Scripting.Dictionary")
    d.CompareMode = vbTextCompare 'la casse est ignorée
    For i = 1 To UBound(t): d(t(i, 1)) = "": Next 'liste des joueurs sans doublon
    acr = ActiveCell.Row
    t = Range("B1:B" & acr + 29)
    For i = Application.Max(1, acr - 29) To acr + 29
      If d.exists(t(i, 1)) And i <> acr Then d.Remove t(i, 1) 'supprime les joueurs indisponibles
    Next
    If d.Count Then
      .Columns("D") = "" 'RAZ
      .[D1].Resize(d.Count) = Application.Transpose(d.keys)
      .[D1].Resize(d.Count).Name = "Liste" 'plage nommée
      ActiveCell.Validation.Add xlValidateList, Formula1:="=Liste" 'crée la liste de validation
    Else
      ActiveCell.Validation.Add xlValidateTextLength, Formula1:=0, Formula2:=0 'interdit l'entrée de toute donnée
    End If
  End With
End If
If s Then ThisWorkbook.Saved = True 'évite l'invite à la fermeture si aucune autre modification
End Sub
Edit 1 : acr - 29 et acr + 29 pour une occupation de 30 jours.

Edit 2 : ajouté la variable booléenne s.

A+
 

Pièces jointes

Dernière édition:
Bonjour PierreBst, le forum,

Bien entendu la solution précédente n'est qu'une aide pour l'entrée des données.

Elle ne constitue en aucun cas une protection de ces données.

Si l'on craint que des personnes mal intentionnées sabotent le fichier il faut protéger son ouverture avec un mot de passe.

Et ne pas le laisser ouvert sans surveillance.

Bonne journée.
 
Re,

Avec ce fichier (2) on peut inscrire plusieurs joueurs sur une même journée :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim s As Boolean, acr, acc%, t, d As Object, i&, dercol%, j%
s = ThisWorkbook.Saved
Cells.Validation.Delete 'RAZ
acr = ActiveCell.Row: acc = ActiveCell.Column
If acr > 1 And acc > 1 Then
  With Feuille1 'CodeName de la feuille "Joueurs à traiter"
    .[A:B].Sort .[A1], xlAscending, Header:=xlNo 'tri de la liste des joueurs
    t = .[A1].CurrentRegion.Resize(, 2) 'au moins 2 éléments
    Set d = CreateObject("Scripting.Dictionary")
    d.CompareMode = vbTextCompare 'la casse est ignorée
    For i = 1 To UBound(t): d(t(i, 1)) = "": Next i 'liste des joueurs sans doublon
    dercol = Me.UsedRange.Column + Me.UsedRange.Columns.Count - 1
    t = Range("A1", Cells(acr + 29, dercol))
    For i = Application.Max(1, acr - 29) To acr + 29
      For j = 2 To dercol
        If d.exists(t(i, j)) And (i <> acr Or j <> acc) Then d.Remove t(i, j) 'supprime les joueurs indisponibles
    Next j, i
    If d.Count Then
      .Columns("D") = "" 'RAZ
      .[D1].Resize(d.Count) = Application.Transpose(d.keys)
      .[D1].Resize(d.Count).Name = "Liste" 'plage nommée
      ActiveCell.Validation.Add xlValidateList, Formula1:="=Liste" 'crée la liste de validation
    Else
      ActiveCell.Validation.Add xlValidateTextLength, Formula1:=0, Formula2:=0 'interdit l'entrée de toute donnée
    End If
  End With
End If
If s Then ThisWorkbook.Saved = True 'évite l'invite à la fermeture si aucune autre modification
End Sub
A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
72
Affichages
1 K
Réponses
6
Affichages
160
Réponses
25
Affichages
620
Réponses
4
Affichages
135
Réponses
3
Affichages
138
Réponses
12
Affichages
624
Retour