IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Calcul sur dates [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut Calcul sur dates
    Bonjour,

    Je cherche à calculer le temps de rétablissement d'un incident sous certaines contraintes, qui me posent quelques problèmes.
    On doit prendre en compte 4 arguments :
    dateIncident : date à laquelle l'incident a été signalé
    dateCloture : Date à laquelle l'incident a été clôturé
    hOuverture : heure à partir de laquelle on ne peut intervenir
    hFermeture : heure à partir de laquelle on peut de nouveau intervenir

    (Pour info, hFermeture-hOuverture = 3h)
    La date est au format J/M/A h/m/s

    Les contraintes sont : Si l'incident est signalé pendant la plage où il n'est pas possible d'intervenir alors on retranche cette plage ie :
    La plage de non-intervention est entre 2h et 5h du matin, si l'incident est signalé à 2h01 et résolu à 5h30, la durée de rétablissement est de 30 minutes.
    De même si l'incident est signalé à 1h et résolu à 5h30, la durée de rétablissement est de 1h30

    Donc le code ci-dessous est censé faire ça, seulement il ne prend pas en compte le jour. C'est à dire que si l'incident est à 23h et qu'il est résolu à 1h -> ne fonctionne pas.
    Aussi, si l'incident est signalé à 23h le 5 du mois et est résolu à 23h30 le 6 du mois, il va donner une durée de rétablissement de 30 minutes (bien sûr si je donne une heure de rétablissement avant 23h il ne fonctionne pas non plus )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    Public Function dureeIncident(dateIncident, dateCloture, hOuverture, hFermeture)
     
    Dim hIncident, hCloture, dureeJour, debugage As Double
     
    hIncident = dateIncident - Int(dateIncident)
    hCloture = dateCloture - Int(dateCloture)
     
    If Day(dateIncident) < Day(dateCloture) Then
    dureeIncident = (24 - (hFermeture - hOuverture)) + (hCloture - hIncident)
    Else
    If hIncident < hOuverture And hCloture > hFermeture Then
    dureeIncident = (hCloture - hIncident) - (hFermeture - hOuverture)
     
    Else
    If hIncident > hOuverture And hIncident < hFermeture And dateCloture > hFermeture Then
    dureeIncident = hCloture - hFermeture
     
     
    Else: dureeIncident = hCloture - hIncident
    End If
    End If
    End If
    End Function
    Voilà mon problème, j'aimerai que mon code prenne correctement en compte ces contraintes simples mais je suis un grand débutant en info...
    Merci pour votre aide éventuelle.

    Bien cordialement.

  2. #2
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut
    Pas résolu en fait.

    Le fichier en PJ :
    Fichiers attachés Fichiers attachés

  3. #3
    Membre chevronné
    Homme Profil pro
    Ctrl Gestion
    Inscrit en
    Octobre 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ctrl Gestion
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2011
    Messages : 177
    Par défaut
    Bonjour piloob, Le Forum,

    Bien que cette discussion soit fermée, je te donne le code que j'aurais utilisé dans ce cas de figure.
    Le code peut être amélioré.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    Public Sub dureeIncident()
     
      Dim dIncident As Date, hIncident As Date
      Dim intNbJours As Integer, strJours As String
      Dim dCloture As Date, hCloture As Date
      Dim hOuverture As Date, hFermeture As Date, hDay As Date
     
      Cells(2, 1).Select
      Do While Not IsEmpty(ActiveCell.Value)
        dIncident = Cells(ActiveCell.Row, 1).Value
        dCloture = Cells(ActiveCell.Row, 3).Value
        hIncident = Format(dIncident, "hh:mm:ss")
        hCloture = Format(dCloture, "hh:mm:ss")
        hOuverture = Cells(2, 7).Value
        hFermeture = Cells(2, 8).Value
        hDay = Cells(2, 9).Value
     
        intNbJours = dCloture - dIncident
     
        If hIncident < hOuverture Then
          Cells(ActiveCell.Row, 5).Value = Format(hOuverture - hIncident + hCloture - hFermeture, "hh:mm:ss")
        ElseIf hIncident > hOuverture And hIncident < hFermeture Then
          Cells(ActiveCell.Row, 5).Value = Format(hCloture - hFermeture, "hh:mm:ss")
        ElseIf hIncident > hFermeture Then
          If hIncident > hCloture Then
            Cells(ActiveCell.Row, 5).Value = Format(hDay - Abs(hCloture - hIncident), "hh:mm:ss")
            intNbJours = intNbJours - 1
          Else
            Cells(ActiveCell.Row, 5).Value = Format(hCloture - hIncident, "hh:mm:ss")
          End If
        End If
     
        If intNbJours >= 2 Then
          strJours = intNbJours & " jours et "
        ElseIf intNbJours = 1 Then
          strJours = intNbJours & " jour et "
        Else
          strJours = ""
        End If
        Cells(ActiveCell.Row, 5).Value = strJours & Format(Cells(ActiveCell.Row, 5).Value, "hh:mm:ss")
        ActiveCell.Offset(1, 0).Select
      Loop
    En pièce jointe, le fichier excel donnant le résultat.

    Slts
    Fichiers attachés Fichiers attachés

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA : calcul sur date
    Par stefane26 dans le forum Excel
    Réponses: 2
    Dernier message: 29/06/2007, 11h23
  2. Calcul sur date dans SQL
    Par Tchupacabra dans le forum WinDev
    Réponses: 4
    Dernier message: 27/02/2006, 19h23
  3. [débutant] calcul sur date
    Par Regis.C dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 04/01/2005, 10h51
  4. Resutlat de calcul sur date formaté
    Par neness dans le forum SQL
    Réponses: 6
    Dernier message: 16/06/2004, 15h34
  5. Calcul sur date
    Par Thomad dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/09/2003, 08h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo