Problème somme entre plusieurs plages
Bonjour le forum,
Sur le fichier Excel joint, j'ai un bouton qui me permet de lister l'objectif écrit dans la cellule C10 dans les différentes plages de la colonne B ("objectif").
Le processus commence à partir de la plage horaire correspondant à l'heure actuelle, puis se termine à la plage horaire de fin de poste prévue, sélectionnée par l'utilisateur dans la cellule D13.
Dans l'exemple ci-joint, j'ai un objectif global de 2 388. Lorsque je lance le code et que le début et la fin de poste sont dans le même poste (matin, après-midi, nuit), la somme totale calculée est bien de 2 388.
Cependant, si la période couvre deux postes différents, le code me retire l'équivalent d'une plage horaire d'objectif. Par exemple, si c'est de 11h-12h à 20h-21h (donc matin et après-midi), je n'obtiens pas la somme de 2 388 dans la colonne B objectif par heure.
voici le fichier :
Voici le code :
Sub RepartirObjectif()
Dim ws As Worksheet
Dim heureActuelle As Date
Dim finPoste As String
Dim objectif As Double
Dim heureDebut As Range
Dim heureFin As Range
Dim heure As Range
Dim heuresValides As Integer
Dim objectifParHeure As Double
Dim reliquat As Double
Dim heureDebutStr As String
Dim heureFinStr As String
Dim heureDebutTime As Date
Dim heureFinTime As Date
Dim cellulesValides As Collection
Set cellulesValides = New Collection
' Initialisation des variables
Set ws = ThisWorkbook.Sheets("Dashboard")
heureActuelle = TimeValue(Now)
finPoste = ws.Range("D13").Value
objectif = ws.Range("C10").Value
ws.Range("B18:B24,B31:B38,B45:B53").ClearContents
' Trouver l'heure de début en fonction de l'heure actuelle
For Each heure In ws.Range("A18:A24,A31:A38,A45:A53")
heureDebutStr = Trim(Split(heure.Value, "-")(0))
heureFinStr = Trim(Split(heure.Value, "-")(1))
If IsNumeric(Replace(heureDebutStr, "h", "")) And IsNumeric(Replace(heureFinStr, "h", "")) Then
heureDebutTime = TimeSerial(CInt(Replace(heureDebutStr, "h", "")), 0, 0)
heureFinTime = TimeSerial(CInt(Replace(heureFinStr, "h", "")), 0, 0)
If heureActuelle >= heureDebutTime And heureActuelle < heureFinTime Then
Set heureDebut = heure.Offset(0, 1)
Exit For
End If
End If
Next heure
' Vérifier si heureDebut a été définie
If heureDebut Is Nothing Then
MsgBox "L'heure de début n'a pas pu être déterminée. Veuillez vérifier les plages horaires."
Exit Sub
End If
' Trouver l'heure de fin en fonction de la fin de poste
For Each heure In ws.Range("A18:A24,A31:A38,A45:A53")
If heure.Value = finPoste Then
Set heureFin = heure.Offset(0, 1)
Exit For
End If
Next heure
' Vérifier si heureFin a été définie
If heureFin Is Nothing Then
MsgBox "L'heure de fin n'a pas pu être déterminée. Veuillez vérifier la fin de poste sélectionnée."
Exit Sub
End If
' Collecter les cellules valides (non vides en colonne A)
Dim currentRange As Range
Set currentRange = ws.Range(heureDebut, heureFin)
For Each heure In currentRange
If Not IsEmpty(heure.Offset(0, -1).Value) Then
cellulesValides.Add heure
End If
Next heure
' Calculer l'objectif par cellule valide
heuresValides = cellulesValides.Count
If heuresValides = 0 Then
MsgBox "Aucune cellule valide trouvée pour la répartition de l'objectif."
Exit Sub
End If
objectifParHeure = objectif / heuresValides
reliquat = objectif - (Int(objectifParHeure) * heuresValides)
' Répartir l'objectif dans les cellules valides
For Each heure In cellulesValides
heure.Value = Int(objectifParHeure)
Next heure
' Ajouter le reliquat à la première cellule valide
If cellulesValides.Count > 0 Then
cellulesValides(1).Value = cellulesValides(1).Value + reliquat
End If
MsgBox "Objectif réparti avec succès !"
End SubMerci d'avance pour votre aide,
Cordialement,
Bonjour,
En regardant de plus près, l'erreur vient du fait que le nombre d'heures calculé n'est pas bon, il faut retrancher 1 heure.
De plus, modifiez vos formules de la colonne C, il faut remplacer le résultat "" par 0, exemple:
=SI(B19="";0;C18+B19)
Cdlt
Arturo,
Merci beaucoup, oui c'est aussi meilleur comme ça pour la colonne C, merci.
Cdlt,
Re bonjour,
J’ai remarqué que, lorsque l’objectif est lissé sur les trois postes (matin, après-midi et nuit), la somme affichée dans la colonne B est inférieure au besoin réel (cellule C10).
Pouvez-vous essayer de voir ce problème svp ?
Cdlt,
Bonjour,
"J’ai remarqué que, lorsque l’objectif est lissé sur les trois postes (matin, après-midi et nuit), la somme affichée dans la colonne B est inférieure au besoin réel (cellule C10)". Pourriez-vous me fournir un ou des exemples concrets?

