Mise en forme conditionnelle calendrier / liste données

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

  • Ebauche tableau TTFL 2017-2018 avec macro.xlsm
    123.3 KB · Affichages: 35

chezswan

XLDnaute Occasionnel
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
 

CISCO

XLDnaute Barbatruc
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
 

job75

XLDnaute Barbatruc
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

  • Ebauche tableau TTFL 2017-2018 avec macro(1).xlsm
    108.1 KB · Affichages: 24
Dernière édition:

job75

XLDnaute Barbatruc
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.
 

job75

XLDnaute Barbatruc
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

  • Ebauche tableau TTFL 2017-2018 avec macro(2).xlsm
    107.9 KB · Affichages: 27
Dernière édition:

Discussions similaires

Réponses
12
Affichages
318
Réponses
8
Affichages
239

Statistiques des forums

Discussions
312 884
Messages
2 093 249
Membres
105 658
dernier inscrit
Mario Richard