Power Pivot Date de début - date de fin

yvkagi

XLDnaute Nouveau
Bonjour à tous,
J'ai une base de données format Excel dans laquelle se trouve une date de début et une date de fin pour différents cas de maladie.
J'aimerai pouvoir, dans un tableau dynamique croisé, avoir une répartition automatique par mois.

Ex: Un cas de maladie de 15.01.23 - 28.02.23.
Dans un tdc j'aurais un nombre de jours pour les mois de janvier 2023 - ici 17 jours et février 2023 étant donné que le cas se trouve entre ses deux dates.

J'ai voulu créer des dates manuellement en prenant soit le début d'un cas soit la fin mais du moment ou le cas est à cheval sur plusieurs mois ou plusieurs années, les résultats sont faussés.

Merci d'avance pour votre aide!
Yves
 

yvkagi

XLDnaute Nouveau
Bonjour,
Oui j'ai ceci. Comme mentionné, j'ai tenté de créer une date mais je me suis rendu compte que si la période est à cheval sur deux ans, les résultats ne sont pas justes.
J'aimerai à partir de la base de données, savoir par exemple sur un tdc
- Combien de cas il y a eu par année et par mois
- Combien de jours d'absence par années et par mois
- Combien de cas sont en cours et combien terminés toujours par mois
-...

Mais vu que j'ai une date de début et de fin je suis bloqué.
Merci pour votre aide :)
YK
 

Pièces jointes

  • TEST.xlsx
    14.7 KB · Affichages: 9

job75

XLDnaute Barbatruc
Bonjour yvkagi, JHA, cp4,

En L2 à tirer à droite et vers le bas :
Code:
=MAX(;MIN(FIN.MOIS(L$1;0);$F2)-MAX(L$1;$E2)+1)
Voyez aussi les formules pour les mois en ligne 1.

A+
 

Pièces jointes

  • TEST.xlsx
    16.2 KB · Affichages: 10

yvkagi

XLDnaute Nouveau
Bonjour à tous,
Un début de réponse avec Power query.
Cordialement.
Bonjour, désolé pour mon retard de réponse.
Merci beaucoup pour cette solution, c'est vers ceci que j'aimerai me diriger.
Je ne connais pas du tout Power Query mais j'ai tenté de refaire vos manipulations vis PQ sur mon fichier en ajoutant des colonnes à l'étape "choisir des colonnes".

Au niveau de l'étape 3 - "Personnalisée Colonne"- j'ai une erreur, en effet je ne retrouve pas de liste comme vous mais un "erreur".
Voici la formule que j'ai:
Table.AddColumn(#"Choisir des colonnes", "Personnalisé", each Liste.Dates([From],Duration.Days([To]-[From])+1,#duration(1,0,0,0)))

Désolé du dérangement et merci pour votre aide.
Yves
 

yvkagi

XLDnaute Nouveau
Bonjour,
En enlevant le "e" de List, peut-être?
VB:
Table.AddColumn(#"Choisir des colonnes", "Personnalisé", each List.Dates([From],Duration.Days([To]-[From])+1,#duration(1,0,0,0)))
Bonne journée
Aïe aïe aïe, toutes mes excuses... Effectivement cela fonctionne mieux.
Par contre autre question, comment avez-vous isolé le mois et l'année?
En ajoutant une colonne personnalisée?
Merci pour votre patience
Yves
 

Cousinhub

XLDnaute Barbatruc
Re-,
Sinon, sans passer par l'extraction des mois et des années, tu peux, dès la génération de cette List, "Transformer", choisir "Date/Mois/Début du mois", et tu obtiendras des 01/11/2022, etc
Puis Grouper par ID et "personnalisé", compter les lignes distinctes.
Et dans la requête chargée, mettre au format "mmm-aa"
Bon courage
 

Cousinhub

XLDnaute Barbatruc
Re-,
Re,
La première solution que vous m'avez proposée fonctionne parfaitement, merci beaucoup pour vos conseils.
Rendons à César ce qui appartient à @goube ...
Ce n'est point mon travail, mais bien celui de goube.
Dans le fichier joint, j'ai mis les 2 solutions dans l'onglet "TCD" (tu peux supprimer celle que tu veux)
Lorsque tu sélectionnes l'onglet, une mise à jour est effectuée automatiquement via l'évènement "activate" :
VB:
Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub
Il ne te reste qu'à entrer tes données dans le tableau structuré nommé "T_Data", et dès que tu viendras sur cet onglet, les périodes d'absence seront mises à jour.
Bonne apm
 

Pièces jointes

  • PQ_Décompte absence.xlsm
    29.4 KB · Affichages: 20

yvkagi

XLDnaute Nouveau
Re-,

Rendons à César ce qui appartient à @goube ...
Ce n'est point mon travail, mais bien celui de goube.
Dans le fichier joint, j'ai mis les 2 solutions dans l'onglet "TCD" (tu peux supprimer celle que tu veux)
Lorsque tu sélectionnes l'onglet, une mise à jour est effectuée automatiquement via l'évènement "activate" :
VB:
Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub
Il ne te reste qu'à entrer tes données dans le tableau structuré nommé "T_Data", et dès que tu viendras sur cet onglet, les périodes d'absence seront mises à jour.
Bonne apm
Bonjour c'est superbe, merci!
Je vais tenter de copier le VBA sur mon fichier source dans ce cas.
 

yvkagi

XLDnaute Nouveau
Re-,

Rendons à César ce qui appartient à @goube ...
Ce n'est point mon travail, mais bien celui de goube.
Dans le fichier joint, j'ai mis les 2 solutions dans l'onglet "TCD" (tu peux supprimer celle que tu veux)
Lorsque tu sélectionnes l'onglet, une mise à jour est effectuée automatiquement via l'évènement "activate" :
VB:
Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub
Il ne te reste qu'à entrer tes données dans le tableau structuré nommé "T_Data", et dès que tu viendras sur cet onglet, les périodes d'absence seront mises à jour.
Bonne apm
Bonjour, j'ai tenté d'enregistrer le code VBA dans mon fichier.
Je vois bien qu'il y a une action sur l'onglet Tableau1 mais lorsque je fais une modification sur l'onglet Absence Cases, la modification n'est pas prise en compte.
Je vous joins une copie d'écran.
Merci pour votre aide,
Yves
 

Pièces jointes

  • Capture d’écran 2023-03-07 à 09.34.08.png
    Capture d’écran 2023-03-07 à 09.34.08.png
    339.6 KB · Affichages: 19

yvkagi

XLDnaute Nouveau
Bonjour, j'ai tenté d'enregistrer le code VBA dans mon fichier.
Je vois bien qu'il y a une action sur l'onglet Tableau1 mais lorsque je fais une modification sur l'onglet Absence Cases, la modification n'est pas prise en compte.
Je vous joins une copie d'écran.
Merci pour votre aide,
Yves
J'ai une précision, finalement la MàJ fonctionne mais seulement lorsque j'ouvre le VBA puis le referme.
Je ne comprends pas trop à quoi cela est dû.
Je vous remercie encore pour votre patience.
Yves
 

goube

XLDnaute Impliqué
Bonjour,
Essaie d'utiliser, sur l'onglet Absence cases, une macro de ce type à mettre dans la feuille correspondante.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A1")) Is Nothing Then
        ActiveWorkbook.RefreshAll
    End If
End Sub
Modifie le A1 par la plage modifiée. Toute modification sur cette plage activera l'actualisation.
Cordialement.
 

Discussions similaires

Réponses
11
Affichages
473
Réponses
14
Affichages
491
Réponses
3
Affichages
351