Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Calcul du taux d'occupation hebdomadaire d'une activité

Fab117

XLDnaute Impliqué
Hello,
Je travaille sur un projet assez complexe pour lequel je souhaiterais obtenir un graphique histogramme empilé.
J'ai essayé de présenter toutes mes problématiques dans un seul post (lien). Avec le recul, ce n'était pas une bonne approche, beaucoup trop d'informations diverses demandées.
Je vais donc reformuler mes demandes d'aide une à une => désolé pour mon premier post, qui du coup fait un peu doublon, mais qui d'un autre coté permet de voir où je souhaite arriver.

Ici, je cherche à déterminer le taux d'occupation hebdomadaire d'une activités qui chevauche plusieurs semaine. P. ex. entre le 5 avril 2022 à 5h12 et le 12 avril 2022 à 7h40 (à cheval entre semaine 14 et semaine 15).
Ce que j'attends de macro est qu'elle me dise :
Tu as utilisé:
  • 83 % de la semaine 14
  • 19% de la semaine 15
En effectuant le calcul suivant:
Début de l'activité dans semaine 14Fin de la semaine 14DuréePourcentage de la semaine 14 utilisé pour l'activité
05.04.2022 05:12:0110.04.2022 23:59:595.78 jours83% (5.78/7 jours)
Début dans semaine 15Fin de l'activité pendant la semaine 14DuréePourcentage de la semaine 15 utilisé pour l'activité
11.04.2022 00:00:0012.04.2022 07:40:481.32 jours19% (1.32/7 jours)


Mon approche :
1. Identifier la semaine de la date de début et la semaine de la date de fin
VB:
    DateDebut = Range("A3")
    DateFin = Range("B3")
    SemaineDebutActivite = Format(DateDebut, "ww", vbMonday, vbFirstFourDays)
    SemaineDFinActivite = Format(DateFin, "ww", vbMonday, vbFirstFourDays)
2. Calculer le nombre de semaine touchant mon intervalle
Code:
NBSemainesTouchees = SemaineDFinActivite - SemaineDebutActivite + 1
3. Ensuite c'est plus flou. Je pensais faire des scénarios différents selon le nombre de semaines touchées (normalement, je ne devrais pas avoir d'activité étalées sur plus de 4 semaines) => :
Code:
    'Cas où l'activité n'est que sur une semaine
    If NBSemainesTouchees = 1 Then

    End If
    
    'Cas où l'activité est à cheval sur 2 semaines
    If (NBSemainesTouchees = 2  Then
    
    End If
    '... jusqu'à NBSemainesTouchees = 4
4. Je n'arrive pas à mettre dans une variable les dates de fin de semaine ou de début de semaine
Code:
' Dans mon exemple, pour la semaine 14, la date de début est dans la cellule "A3" (05.04.2022  05:12:01) et le dernier jour de cette semaine est le dimanche 10 avril
' Si j'arrivais à lui faire déterminer cette date dans une variable (DateDeFinSemaineRegardee), ensuite je pourais faire:
IntervalleSemaineRegardee = DateDeFinSemaineRegardee - Range("A3)"

Quelqu'un saurait-il comment déterminer le jour de fin d'une semaine bien précise (et aussi le premier jour d'une semaine bien précise ?

Je joins un fichier démo qui peut-être est plus clair.

Merci d'avance et excellent week-end

Fab
 

Pièces jointes

  • Exemple v4.xlsm
    236.6 KB · Affichages: 9

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans votre ancien post vous disiez ne pas vouloir de macro sans vba.
J'avais commencé quelque chose par Power query.
Je laisse tomber ?

Au fait ! Vous prenez en compte l'heure dans le calcul du pourcentage ou seulement la date ?

Cordialement
 
Dernière édition:

Fab117

XLDnaute Impliqué
Bonjour Hasco,
Initialement, j’espérais pourvoir me passer de VBA, mais comme je n'ai pas eu de réponse à mon message, je pensais que cela serait beaucoup trop compliqué => j'ai pensé qu'il fallait reformater les données => mon 2ème message dans mon post initial.
Et pour cela, je ne voyais pas comment me passer de VBA => j'ai commencé un projet VBA (pour aboutir au même but que ma demande du 1er post)

NB : Je suis ouvert à n'importe quelle solution => s'il est possible de répondre à mon premier post sans VBA, je suis preneur.

En tous les cas, merci d'avoir pris le temps de regarder ma problématique.

Très bon week-end

Fab

NB : Je prends aussi en compte l'heure dans mes calculs
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Continuons dans cette discussion et mettez un lien vers celle-ci dans l'autre avec quelques explications. Que les répondeurs sachent où donner de la tête

Vous trouverez ci-dessous le début de quelque chose par power query.
Pour voir la requête : onglet 'Données' bouton 'Requêtes et connexions'.
Dans le panneau qui s'ouvre à droite, click-droit sur le nom 'Essais' puis 'Modifier'

A droite de la nouvelle fenêtre, les étapes de transformation
L'étape sélectionnée affiche ses résultats au centre de la fenêtre et la barre de formule au dessus (éventuellement Menu Affichage/Barre de formule) affiche la formule de construction de l'étape.

Si vous laisser traîner la souris sur le nom des étapes dans le volet droit, vous verrez une bulle de description s'afficher. Pour sélectionner l'étape, cliquez sur son nom.

A gauche vous verrez un panneau avec le nom des requêtes du classeur.

Dans le fichier joint, j'ai calculé les Taux d'activités en fonction du nombre de jours sur durée totale de l'activité
Ce taux ne prends pas en compte les heures, uniquement les jours.

Toutes ces étapes peuvent être ramener à quelques unes mais pour le moment, si vous ne connaissez pas trop Power query, laissons les.

Comme PQ aime les tableaux structurés j'ai transformé votre tableau de données en tableau structuré.

cordialement
 

Pièces jointes

  • PQ-Fab117 Exemple.xlsx
    38.1 KB · Affichages: 14

Fab117

XLDnaute Impliqué
Bonjour Hasco,
Merci beaucoup du temps investit pour m'aider.

Je découvre un monde complétement nouveau pour moi :
  • Les tableaux structurés (lien)
  • Power query (lien)

En parcourant le contenu de ces 2 liens, les possibilités semblent effectivement être grandes.
Toutefois, je pars de très très loin.
Je ne trouve même pas le 'Requêtes et connexions' dans l'onglet 'Données' 'Datas' (s'agit-il bien d'une typo?


Je pense qu'au stade où je suis, il sera plus rapide pour moi d'arriver à mon but en VBA où je suis relativement à l'aide. Désolé pour la confusion créée dans le titre de mon précédent post
Dès que j'aurais un peu de temps, j'approfondirai avec plaisir les tableaux structurés et Power Query.

=> sauriez-vous comment en VBA déterminer la date du premier et dernier jour d'une semaine donnée ?
Quelque chose comme
VB:
' Si le numéro de la semaine de 2022 est dans la varibale "NumeroDeSemaine"
PremierJourDeLaSemaineRegardee =
DernierJourDeLaSemaineRegardee =


Très bon dimanche

Fab
 

ChTi160

XLDnaute Barbatruc
Bonjour Fab117
Bonjour le fil
une autre version parmi d'autres !
Pour déterminer le Lundi et le Dimanche d'une semaine a partir d'une date.
VB:
Option Explicit
Dim madate As Date
Dim Lundi As Date
Dim Dimache As Date
Sub DateLundi()
   LaDate = Date 'ici date du jour
   Lundi = LaDate - Weekday(LaDate, vbMonday) + 1
   MsgBox Lundi & vbCrLf & Lundi + 6 & vbCrLf & "Sem : " & NuméroSemaine(Lundi)
End Sub
'fonction pour déterminer le Numéro de Semaine à partit du Lundi(ici)
Public Function NuméroSemaine(ByVal DateContrôlée As Date)
           NuméroSemaine = DatePart("ww", DateContrôlée, vbMonday, vbFirstFourDays)
    If NuméroSemaine > 52 Then
        If DatePart("ww", DateContrôlée + 7, vbMonday, vbFirstFourDays) = 2 Then
           NuméroSemaine = 1
       End If
    End If
           NuméroSemaine = Right("0" & NuméroSemaine, 2)
End Function
Bonne journée
Jean marie
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,
Je ne trouve même pas le 'Requêtes et connexions' dans l'onglet 'Données' 'Datas' (s'agit-il bien d'une typo?
Pour voir la requête : onglet 'Données' bouton 'Requêtes et connexions'.
Onglet 'Données' pas onglet 'Outils de tableaux' (votre image)

C'est parce qu'on est dimanche que j'ai le sentiment de parler Latin ?

Cordialement
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil

[aparté - juste pour saluer Hasco ]
Entre la matrice et le latin, faut choisir, camarade
NB: je dis camarade, parce que ma prof de latin était membre de la LCR
Et on causait plus politique que latin dans sa classe !
(Mais c'était encore à l'époque du franc et du Petit Rapporteur, le monde a bien changé depuis !!!)
[aparté]
Par politesse(*), je passe aussi le bonjour à tous dans le fil
(*): tante Henriette me disait toujours quand j'étais petit :"Dis, bonjour à la dame", alors ca m'est resté
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…