Fractionner des périodes en jours

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 !

AmelieMelo

XLDnaute Nouveau
Bonjour à tous !

Je suis à la recherche d'une solution à une "interrogation" excel qui me permettrait d'avancer dans mon travail au quotidien. Mon niveau Excel est plus que correct (hors macros), mais je perds un temps fou sur ce sujet en particulier. Je m'explique :

J'ai une liste de personnes avec les dates de leurs congés. Je peux avoir plusieurs lignes pour la même personne si elle a eu plusieurs périodes de congés dans le même mois.
Exemple :
- Mr X : absent du 10/04 au 14/04
- Mr X : absent du 21/04 au 22/04

J'aimerai avoir, pour chaque personne, les absences jour par jour.
Exemple :
- Mr X le 10/04
- Mr X le 11/04
- Mr X le 12/04
- Mr X le 13/04
- Mr X le 14/04
- Mr X le 21/04
- Mr X le 22/04

De plus, le "rendu final" devrait être sous forme de liste (et non pas un style TCD).

Je joins un fichier à cette discussion au cas ou je ne serai pas très claire.
En onglet "BASE" il y a les données "brutes", et en onglet "RENDU" ce vers quoi j'aimerai aller.

Merci d'avance à ceux qui prendront le temps de m'aider et de développer peut être encore plus mes compétences en Excel !

Belle journée !

AmelieMelo
 

Pièces jointes

Hello
un exemple avec ce code
VB:
Sub congés()
Dim tablo() As Variant
Application.ScreenUpdating = False

With Sheets("Base")
    tablo = .UsedRange.Value
End With

For i = LBound(tablo, 1) + 1 To UBound(tablo, 1)
    Fin = tablo(i, 4)
    debut = tablo(i, 3)
    With Sheets("Rendu")
        For j = 1 To (Fin - debut) + 1
            .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0) = tablo(i, 1)
            .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0) = tablo(i, 2)
            .Range("C" & .Rows.Count).End(xlUp).Offset(1, 0) = tablo(i, 3) + j - 1
           
        Next j
    End With
Next i
Application.ScreenUpdating = True
End Sub
 
Bonjour.
Ceci dans le module Feuil2 (RENDU) semble (aussi) faire l'affaire.
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim TE(), LE&, TS(), LS&, D As Date
TE = Feuil1.UsedRange.Value
ReDim TS(1 To 10000, 1 To 3)
For LE = 2 To UBound(TE, 1)
   For D = TE(LE, 3) To TE(LE, 4)
      LS = LS + 1
      TS(LS, 1) = TE(LE, 1)
      TS(LS, 2) = TE(LE, 2)
      TS(LS, 3) = D
      Next D, LE
Me.[A2:C10001].Value = TS
End Sub
 
- 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
20
Affichages
680
Réponses
4
Affichages
697
Retour