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 :

Différence entre deux dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Par défaut Différence entre deux dates
    Bonjour

    Sur une feuille de calcul j'ai plusieurs colonnes dont deux avec date et heures je calcule la différence entre ces deux colonnes.
    J'applique la règle suivante : ActiveCell.FormulaR1C1 = "=RC[+2]-RC[-1]" qui me donne un nombre d'heures minutes et secondes sous le format suivant : 216:14:34 je veux dans cette règle de calcul exclure les dimanches et certaines heures de la journée .
    Merci à tous

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une solution possible avec cette fonction :

    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
    Function DureeEntreDeuxDates(ByVal DateDebut As Date, ByVal DateFin As Date) As Date
     
    Dim JourEnCours As Date
    Dim HeuresARetrancher As Double
     
             Application.Volatile
     
     
             DureeEntreDeuxDates = 0
             HeuresARetrancher = 0
     
             If DateDebut > DateFin Then Exit Function
     
             For JourEnCours = DateDebut To DateFin
                 Select Case Weekday(JourEnCours, 2)
                        Case 1 ' Lundi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.3888
                        Case 2 ' Mardi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.5666
                        Case 3 ' Mercredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.15555
                        Case 4 ' Jeudi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.1111
                        Case 5 ' Vendredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.5555
                        Case 6 ' Samedi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 1.333
                        Case 7 ' Dimanche
     
                 End Select
             Next JourEnCours
     
            DureeEntreDeuxDates = DureeEntreDeuxDates - (HeuresARetrancher / 24)
     
    End Function
    Les heures à retrancher pour chaque journée sont bien entendu à redéfinir.

    Le format personnalisé des cellules contenant la fonction est "[h]:mm:ss"

    Cordialement.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Tu soustrait la date fin a la date de début Ok,

    Si tu ajoute à la date de début le nombre d'heures trouvé mais en utilisant la fonction qui va bien pour le jours ouvrables tu dois trouver la même valeur!

  4. #4
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Par défaut Suite
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Une solution possible avec cette fonction :

    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
    Function DureeEntreDeuxDates(ByVal DateDebut As Date, ByVal DateFin As Date) As Date
     
    Dim JourEnCours As Date
    Dim HeuresARetrancher As Double
     
             Application.Volatile
     
     
             DureeEntreDeuxDates = 0
             HeuresARetrancher = 0
     
             If DateDebut > DateFin Then Exit Function
     
             For JourEnCours = DateDebut To DateFin
                 Select Case Weekday(JourEnCours, 2)
                        Case 1 ' Lundi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.3888
                        Case 2 ' Mardi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.5666
                        Case 3 ' Mercredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.15555
                        Case 4 ' Jeudi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.1111
                        Case 5 ' Vendredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 2.5555
                        Case 6 ' Samedi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 1.333
                        Case 7 ' Dimanche
     
                 End Select
             Next JourEnCours
     
            DureeEntreDeuxDates = DureeEntreDeuxDates - (HeuresARetrancher / 24)
     
    End Function
    Les heures à retrancher pour chaque journée sont bien entendu à redéfinir.

    Le format personnalisé des cellules contenant la fonction est "[h]:mm:ss"

    Cordialement.

    Bonjour

    Tout d'abord merci pour cette aide mais une petite spécification et pas des moindre la différence de date se fait sur des dates antérieur à aujourd'hui donc comment dois je spécifier dans ma macro ?
    Merci par avance .

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Si je soustrais la date de début a la date de fin je trouve un certain nombre d'heures!

    Si additionne la date de début avec le nombre d'heures mais en utilisant la fonction de jours ouvrés, je retrouve la date de fin plus les dimanches!

    Si je prend la date deb + 7 jours ouvrés ca me donne 8 jours.

    Maintenant si je compte date deb + 8 jours ouvrés je trouve 9 donc 1 dimanche

    En conclusion tu calcul le nombre de jours entre deux date puis tu calcul un autre date de fin en tenant compte des jours ouvrés. Si dt compares les deux date de fin tu as le nombre de dimanche
    Dernière modification par AlainTech ; 26/03/2016 à 11h31. Motif: Fusion de 2 messages

  6. #6
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Par défaut
    Bonjour Eric
    En fait je fais une extraction Business Object et j'obtiens un fichier EXCEL avec différentes colonnes j'insére une colonne via VBA et je calcule la différence entre deux dates et heures précises (colonne + 2 - colonne _1) ce qui me donne un nombre d'heure seulement je désire supprimer les dimanches et un certain nombres d'heures dans ce résultat (EX: je veux supprimer les dimanches plus tous les jours de 02h15 à 06h15 et pour le samedi en plus de 19h45 à minuit)
    Merci pour votre aide

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Incident()
    Dim DerCel As String
    DerCel = Range("J4").End(xlDown).Address
    Columns(10).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Range("J4").Select
    ActiveCell.FormulaR1C1 = "Difference"
    Range("J5").Select
    ActiveCell.FormulaR1C1 = "=RC[+2]-RC[-1]"
    Selection.NumberFormat = "[hh]:mm:ss "
    Selection.AutoFill Destination:=Range("J5:" & DerCel)

  7. #7
    Invité
    Invité(e)
    Par défaut
    Nom : Sans titre.png
Affichages : 352
Taille : 3,9 Ko

  8. #8
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2016
    Messages : 16
    Par défaut
    Merci Rdurupt

    Mais y a t il cette formule directement sous VBA car je veux qu'elle s'execute quand j'active ma requête ! Sorry mais je patoge un peu !!!

  9. #9
    Invité
    Invité(e)
    Par défaut
    j'ai pas cherché ,mais elle existe toutes alors tu peux les imbrique dans un seule formule!

    de plus il y à a fonction evaluate!

    Code formule : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("C3").FormulaR1C1 = "=NETWORKDAYS.INTL(R[-1]C[-2],R[-1]C[-1])" 
    ]Range("C3").value=]Range("C3").value
    Dernière modification par Invité ; 21/03/2016 à 12h14.

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,


    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
     
    Function DureeEntreDeuxDates(ByVal DateDebut As Date, ByVal DateFin As Date) As Date
     
    Dim JourEnCours As Date
    Dim HeuresARetrancher As Double
     
             Application.Volatile
     
             If DateDebut > DateFin Then Exit Function
             DureeEntreDeuxDates = 0
             HeuresARetrancher = 0
     
             For JourEnCours = DateDebut To DateFin
                 Select Case Weekday(JourEnCours, 2)
                        Case 1 ' Lundi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4
                        Case 2 ' Mardi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4
                        Case 3 ' Mercredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4
                        Case 4 ' Jeudi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4
                        Case 5 ' Vendredi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4
                        Case 6 ' Samedi
                             DureeEntreDeuxDates = DureeEntreDeuxDates + 1
                             HeuresARetrancher = HeuresARetrancher + 4 + 4.25
                        Case 7 ' Dimanche
     
                 End Select
             Next JourEnCours
     
            DureeEntreDeuxDates = DureeEntreDeuxDates - (HeuresARetrancher / 24)
     
    End Function
    Attention la date début est prise à 00:00:00 h et la date fin à 24:00:00

    Pièce jointe 204508


    Pour rdurupt
    Avais-tu vu qu'il y avait des heures à retrancher dans chaque journée ? Sans cela, on est bien d'accord que c'est ta formule qu'il fallait prendre.


    Cordialement.

  11. #11
    Invité
    Invité(e)
    Par défaut
    oui je l'avais vue mais le coup de tournevis on l'active quand le raisonnent est assimilé!

    deux chose l'une soit nous disposons des heures pour chaque journée, dan ce cas la date fin on sans fiche,

    soit nous disposent de la date et l'heure de début et la date et l'heur de fin la ma méthode fonctionne si on oubli pas de prendre la différence des heure soit un jour si + 1 minute + nbHeures!
    Dernière modification par Invité ; 21/03/2016 à 12h43.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/07/2006, 14h04
  2. Nombre de minutes de différence entre deux dates
    Par Oberown dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 05/05/2006, 15h41
  3. Différence entre deux dates
    Par Azharis dans le forum Access
    Réponses: 3
    Dernier message: 11/01/2006, 10h58
  4. Différence entre deux dates
    Par pittzz dans le forum Oracle
    Réponses: 5
    Dernier message: 18/07/2005, 12h24
  5. Comment obtenir la différence entre deux dates ?
    Par jbat dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2005, 09h34

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