Fractionner des périodes en jours

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

  • Absences en mars.xlsx
    9.4 KB · Affichages: 26

vgendron

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

Dranreb

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

vgendron

XLDnaute Barbatruc
voir PJ
tu cliques sur le bouton, et hop.résultat direct dans la feuille
pour voir le code
Alt+F11 pour ouvrir l'éditeur vba
à gauche double clic sur "module1"
et à droite le code
 

Pièces jointes

  • Absences en mars.xlsm
    19.8 KB · Affichages: 18

Discussions similaires

Réponses
6
Affichages
657

Statistiques des forums

Discussions
311 733
Messages
2 082 015
Membres
101 868
dernier inscrit
pierreselo33