Créer des valeurs "1" dans un calendrier à partir de début d'une période

Bonjour,

Ma demande est un peu "complexe" à exprimer.

En quelques mots, je travaille sur des certificats médicaux pour une mutuelle. Je dois analyser ceux-ci et j'ai pas loin de 250.000 lignes.

Le fichier des certificats, c'est un matricule, une date de début et une date de fin. C'est ce qui est en rouge dans mon ficher. Le reste c'est en gris le résultat et en autres couleurs des ajouts.

Je voudrais transposer ces certificats dans un calendrier annuel du 1er janvier au 31 décembre. Cela pourrait être sur 2 ans ou 3 si j'ai assez de colonnes.

J'ai donc dans le fichier attaché créé les dates en haute 01/01/2025 au 31/12/2025. Ceci est très simple.

Ensuite, j'ajoute pour des questions de tri, l'année. Pas compliqué non plus.

Par contre et c'est ici que j'aurais besoin de vos précieux conseils.

Je voudrais garnir avec des "1" les jours repris entre les dates du certificat. De manière par exemple à ce que quelqu'un malade du 01/02/2025 au 08/02/2025 ait au regard des jours du calendrier des "1" qui vont se mettre entre ces deux dates. Je l'ai fait en gris pour les deux premières lignes.

Pour le moment, j'essaie de faire ceci manuellement mais c'est presque impossible vu le nombre.

J'ai pensé essayée de partir du 1er janvier par exemple en 2025 avec un nombre de jours qui correspond à la date de début du certificat. Mais je ne sais aps s'il est possible de pointer alors automatiquement sur le 15 janvier dans mon exemple et garnir ensuite pour 15 jours les 1 jusqu'à la date de fin du certificat. S'il y a des à la place de cellule vide ce n'est pas un souci.Je ne vois pas ou plutôt je ne connais pas des formule de renvoi vers une colonne ...

Donc si possible... HELP me.

Merci d'avance.

A.G.

Bonjour

Ma solution par macro

A+ François

Bonjour,

Ci-après une macro pour faire le job. Attention, pas de vérification que les dates sont dans le tableau (si jamais, la ligne devrait rester vide).

Lancer le Sub RemplirPlanning

Option Explicit

Public Sub RemplirPlanning()
  Dim ws As Worksheet: Set ws = ThisWorkbook.Worksheets("Feuil1")

  Dim rngDates As Range
  Set rngDates = ws.Range(ws.Range("I1"), ws.Range("I1").End(xlToRight))

  Dim data As Variant
  data = ws.Range(ws.Range("B2"), ws.Range("B2").End(xlDown)).Resize(, 2).Value

  ' nettoyage
  rngDates.Offset(1).Resize(UBound(data, 1)).Clear

  Dim i As Long
  Dim dateStart As Date, dateEnd As Date
  Dim rngStart As Range, rngEnd As Range, rngToFill As Range
  For i = LBound(data, 1) To UBound(data, 1)
    Set rngStart = Nothing: Set rngEnd = Nothing: Set rngToFill = Nothing

    dateStart = data(i, 1)
    dateEnd = data(i, 2)

    On Error Resume Next
    Set rngStart = rngDates.Find(What:=dateStart, LookIn:=xlValues)
    Set rngEnd = rngDates.Find(What:=dateEnd, LookIn:=xlValues)
    On Error GoTo 0

    If Not (rngStart Is Nothing) And Not (rngEnd Is Nothing) Then
      Set rngToFill = Range(rngStart, rngEnd).Offset(i)
    End If

    If Not rngToFill Is Nothing Then
      Application.ScreenUpdating = False
      rngToFill.Value2 = GetFillRow(rngToFill.Value2)
      rngToFill.Interior.Color = 10855845 'gray
      Application.ScreenUpdating = True
    End If
  Next i

End Sub

Private Function GetFillRow(rng As Variant) As Variant
  Dim arrFill() As Long
  ReDim arrFill(1 To 1, LBound(rng, 2) To UBound(rng, 2))

  Dim i As Long
  For i = LBound(rng, 2) To UBound(rng, 2)
    arrFill(1, i) = 1
  Next i

  GetFillRow = arrFill
End Function

EDIT : salut fanfan, pris de vitesse

EDIT2 : MAJ plus robuste.

Ouh là merci

Mais la va falloir m'aider avec la macro.

Je devrai la reproduire dans mon fichier

Bonjour tooniesgamer, fanfan38, saboh12617, le forum,

Je ne sais pas si j'ai bien compris la demande, mais avec une formule très simple :

=--ET($B2<=I$1;$C2>=I$1)

et deux mises en forme conditionnelle on arrive au résultat escomptés sans macro !

Le classeur :

Cordialement.

AL 22

Merci à tous pour votre aide. Je ne maîtrise pas assez les macros.

Je vous avoue que le plus simple pour moi est le mieux !

Le résultat de AL me convient parfaitement.

AL pourrais tu me donner la manière ce sera plus profitable que de reporter la formule - ?

Tu utilises ET ?

Re,

• La formule : --ET($B2<=I$1;$C2>=I$1) positionnée en I2, puis tirée vers la droite puis vers le bas, retournera 1 si la cellule I1 est comprise entre les bornes B2 et C2.

Le ET() permet donc de placer ici deux conditions ($B2<=I$1) et ($C2>=I$1) et renverra des VRAI ou des FAUX si les conditions sont remplies. Ce ET est précédé de deux moins qui transformeront le résultat en 1 ou 0, ce qui permettra d'utiliser une mise en forme conditionnelle avec des couleurs par rapport à des numéros. Également, la position des $, qui permettent de figer ou non les cellules est déterminante.

• Deux mises en forme conditionnelles colorent donc les résultats:

image

Le 1 (VRAI) avec le remplissage en gris et le 0 (FAUX) en police blanche.

PS : pour les posts ayant reçu des réponses et si celles-ci résolvent vos demandes, prenez l'habitude de valider ces réponses en utilisant le petit 'V' (check vert) à droite de la page.

Cordialement.

AL 22

Bonjour et félicitations AL22. je connaissais pas le --

Preuve qu'à 72 ans on apprend encore....

A+ François

Merci à tous et en particulier à AL22.

J'ai validé la bonne conclusion de cette question.

TG

Rechercher des sujets similaires à "creer valeurs calendrier partir debut periode"