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 :

Période entre deux dates


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 12
    Par défaut Période entre deux dates
    Bonjour,

    Je sollicite votre aide car j'ai un petit pépin de programmation excel vba.

    J'ai deux cellules sous le format personnalisé jj/mm/aaaa hh:mm et j'aimerai avoir la période sous le format personnalisé j" jour(s) "hh:mm mais sans prendre en compte les jours non ouvrés et si possible en ignorant le temps entre 20h et 8h si c'est possible bien entendu.

    Voici ma formule actuelle :

    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
    Private Sub CommandButton2_Click()
    Dim i As Integer, j As Integer
    i = 3
    j = 3
     
    Do While Range("C" & i) <> ""
        If Range("L" & i) = "" Then
            Range("O" & i) = "Commande non envoyée"
            Else
            Range("O" & i) = Range("L" & i) - Range("C" & i)
        End If
        Range("O" & i).NumberFormat = "d"" jour(s) ""hh:mm"
        i = i + 1
    Loop
     
    Do While Range("C" & j) <> ""
        If Range("N" & j) <> "" Then
            Range("P" & j) = "Commande annulée"
            ElseIf Range("M" & j) = "" Then
            Range("P" & j) = "Commande non confirmée"
            Else
            Range("P" & j) = Range("M" & j) - Range("L" & j)
        End If
        Range("P" & j).NumberFormat = "d"" jour(s) ""hh:mm"
        j = j + 1
    Loop
     
    End Sub
    Je sais que vous ne me connaissez car je viens tout juste de m'inscrire, mais je vous serais reconnaissant si vous pouviez m'aider

    Cordialement

    Un programmeur néophyte.

  2. #2
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Je ne suis pas un spécialiste de la manipulation de dates, mais as-tu pensé à utiliser la fonction NB.JOURS.OUVRES d'excel ?

    Voir le lien http://office.microsoft.com/fr-fr/ex...005209190.aspx

    après tu peux re-travailler le résultat pour gérer les heures.

    stargates01

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Un exemple à adapter et à bien tester; je calcule la durée entre DateDeb et DateFin.

    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
    Function Calcul(DateDeb As Date, Datefin As Date)
    Dim Ctr As Date
    For i = Int(DateDeb) To Int(Datefin)
        If Weekday(i, 2) < 6 Then
            If i = Int(DateDeb) Then
                If Int(DateDeb) <> Int(Datefin) Then
                    Ctr = #8:00:00 PM# - Application.Max(#8:00:00 AM#, TimeSerial(Hour(DateDeb), Minute(DateDeb), Second(DateDeb)))
                Else
                    Ctr = Application.Min(TimeSerial(Hour(Datefin), Minute(Datefin), Second(DateDeb)), #8:00:00 PM#) _
                    - Application.Max(#8:00:00 AM#, TimeSerial(Hour(DateDeb), Minute(DateDeb), Second(DateDeb)))
                End If
            ElseIf i < Int(Datefin) Then
                Ctr = Ctr + 0.5
            Else
                Ctr = Ctr + Application.Min(TimeSerial(Hour(Datefin), Minute(Datefin), Second(DateDeb)), #8:00:00 PM#) - #8:00:00 AM#
            End If
        End If
    Next i
    Calcul = Ctr
    End Function
    Pour tester:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
        Dim DateDeb As Date, Datefin As Date
        DateDeb = #7/13/2013 7:00:00 AM#
        Datefin = #7/15/2013 5:00:00 PM#
        [A1] = Calcul(DateDeb, Datefin)
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 12
    Par défaut
    Citation Envoyé par stargates01 Voir le message
    Je ne suis pas un spécialiste de la manipulation de dates, mais as-tu pensé à utiliser la fonction NB.JOURS.OUVRES d'excel ?

    Voir le lien http://office.microsoft.com/fr-fr/ex...005209190.aspx

    après tu peux re-travailler le résultat pour gérer les heures.

    stargates01
    Malheureusement mes cellules ne sont pas au format date traditionnel donc je ne peux utiliser cette formule, merci quand même.

    Daniel C. merci pour cette aide je vais de ce pas analyser cela et voir comment utiliser cela dans ma formule

Discussions similaires

  1. [XL-2007] Somme entre deux dates (période)
    Par Olivm dans le forum Excel
    Réponses: 4
    Dernier message: 16/03/2011, 09h15
  2. Macro permettant de créer un période entre deux dates
    Par NewYork dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/03/2011, 17h33
  3. Macro permettant de créer un période entre deux dates
    Par NewYork dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/03/2011, 10h48
  4. Calcul entre deux dates heures
    Par Isa31 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/03/2005, 13h17
  5. comment obtenir l’intervalle de mois entre deux date
    Par looc 6699 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/02/2005, 11h08

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