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 nombre de jours sur un intervalle [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable HSE
    Inscrit en
    Février 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Responsable HSE

    Informations forums :
    Inscription : Février 2013
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Calcul nombre de jours sur un intervalle
    Bonjour,

    J'ai des événements qui ont des periodes de temps qui peuvent durer un temps aléatoire de 0 jours à + de 600 jours.

    Je cherche à calculer pour un intervalle précis (un mois) combien de jours j'ai cumulés sur plusieurs évennements. Je suis un peu dépourvu et je voie pas quelle fonction utiliser.

    En faite j'ai une DateDébutEvennement, DateFinEvennement, DateDébutPériode et DateFinPériode. Il faut que je compte le nombre de jours pour les évennements ou la DateDébutEvennement<DateFinPériode et la DateFinEvennement>DateDébutPériode en prenant pour calculer la DateDébutEvennement=DateDébutPériode si DateDébutEvennement<DateDébutPériode et DateFinEvennement=DateFinPériode si DateFinEvennement>DateFinPériode

    Merci pour votre aide

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Je ne suis pas sûr d’avoir bien compris ton problème.
    A priori, il suffit de poser pour chaque événement :
    Si Date_Début_Evénement < Date_Début_Période alors Date_Début_Evénement = Date_Début_Période
    Si Date_Fin_Evénement > Date_Fin_Période alors Date_Fin_Evénement = Date_Fin_Période
    Puis calculer la différence avec la fonction DateDiff
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateDiff("j", Date_Début_Evénement, Date_Fin_Evénement)
    Et cumuler s’il y a plusieurs évènements.

    Cordialement.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Responsable HSE
    Inscrit en
    Février 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Responsable HSE

    Informations forums :
    Inscription : Février 2013
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour gFZT82,

    C'est pour faire un tableau de synthèse, j'ai une liste d'évennements dans une feuille. Je voudrais dans mon tableau de synthèse faire la somme par mois du nombre de jours de tous les évennements.

    Exemple:

    Liste d'evennements
    Evennement 1 du 01/01/13 au 02/03/13
    Evennement 2 du 26/12/12 au 02/01/13
    Evennement 3 du 06/01/13 au 15/01/13

    Periode du 01/01/13 au 31/01/13

    Evennement 1 31jours
    Evennement 2 2jours
    Evennement 3 10jours
    Soit 43jours (c'est ce resultat que je veux calculer)

    Cordialement,

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Voici un exemple de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Option Explicit
    Sub Test()
    Dim Cel As Range
    Dim DateDébut As Date, DateFin As Date
        With Worksheets("Feuil1")
            For Each Cel In .Range("A6:A" & .Range("A" & Rows.Count).End(xlUp).Row)
                DateDébut = Cel.Offset(0, 1)
                DateFin = Cel.Offset(0, 2)
                If .Range("A3") > DateDébut Then DateDébut = .Range("A3")
                If .Range("B3") < DateFin Then DateFin = .Range("B3")
                Cel.Offset(0, 3) = DateDiff("d", DateDébut, DateFin) + 1
            Next Cel
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Responsable HSE
    Inscrit en
    Février 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Responsable HSE

    Informations forums :
    Inscription : Février 2013
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour gFZT82,

    Merci pour ton aide précisieuse

    J'ai bien réussit à adapter ton code.

    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
    Sub CalculNombreJours()
    Dim Cel As Range
    Dim DateDébut As Date, DateFin As Date
        With Worksheets("AT")
            For Each Cel In .Range("H8:H" & .Range("H" & Rows.Count).End(xlUp).Row)
                DateDébut = Cel.Offset(0, 3)
                DateFin = Cel.Offset(0, 4)
                If .Range("AH8") > DateDébut And Range("AH8") < DateFin Then DateDébut = .Range("AH8")
                If .Range("AH8") > DateDébut And Range("AH8") > DateFin Then DateDébut = 0 And DateFin = 0
                If .Range("AI8") < DateFin And Range("AI8") > DateDébut Then DateFin = .Range("AI8")
                If .Range("AI8") < DateFin And Range("AI8") < DateDébut Then DateFin = 0 And DateDébut = 0
                Cel.Offset(0, 11) = DateDiff("d", DateDébut, DateFin) + 1
            Next Cel        
        End With
        End Sub
    Mais au lieu de zero j'aimerai mettre un Null ou une cellule vide mais ça fonctionne pas. Je pense qu'il ya un erreur de synthaxe...

    Je suis pas expert en vba

    cordialement,

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le sujet de cette discussion me semble identique à celui-ci
    J'ai donc une solution sans VBA
    Où les mois sont en ligne 2 commençant en colonne C sous le format (1/jj/AAAA - exemple en C2, 1/10/2012, D2 1/11/2012 etc ...)
    En ligne 3 et suivante, colonne A date de début d'événement colonne B date de fin d'événement.
    Le nombre de jours dans le mois tient compte des jours fériés et week-end mais bien sûr, le faire sans est possible.
    Les formules à placer à partir de C3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =($B3>=C$2)*($A3<=DATE(ANNEE(C$2);MOIS(C$2)+1;0))*NB.JOURS.OUVRES(MAX($A3;C$2);MIN($B3;DATE(ANNEE(C$2);MOIS(C$2)+1;0));jFerie)
    jFerie est la plage nommée contenant la liste des jours fériés
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Responsable HSE
    Inscrit en
    Février 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Responsable HSE

    Informations forums :
    Inscription : Février 2013
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Merci pour cette solution, mais j'ai tout fait en vba et cela me va bien. J'ai juste le problème pour mettre une valeur null aux dates qui sont hors de ma periode.

    Une idée?

    Cdlt,

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Une solution
    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
    Sub CalculNombreJours()
    Dim Cel As Range
    Dim DateDébut As Date, DateFin As Date
        With Worksheets("AT")
            For Each Cel In .Range("H8:H" & .Range("H" & Rows.Count).End(xlUp).Row)
                DateDébut = Cel.Offset(0, 3)
                DateFin = Cel.Offset(0, 4)
     
                If (.Range("AH8") > DateDébut And Range("AH8") > DateFin) Or _
                (.Range("AI8") < DateFin And Range("AI8") < DateDébut) Then
                    Cel.Offset(0, 11) = ""
                Else
                    If .Range("AH8") > DateDébut And Range("AH8") < DateFin Then DateDébut = .Range("AH8")
                    If .Range("AI8") < DateFin And Range("AI8") > DateDébut Then DateFin = .Range("AI8")
                    Cel.Offset(0, 11) = DateDiff("d", DateDébut, DateFin) + 1
                End If
     
            Next Cel
        End With
    End Sub
    Cordialement.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Responsable HSE
    Inscrit en
    Février 2013
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Responsable HSE

    Informations forums :
    Inscription : Février 2013
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Bonjour gFZT82,

    Merci pour ton aide

    @+

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

Discussions similaires

  1. [AC-2010] Calcul nombre de jour sur deux années
    Par jclm230759 dans le forum VBA Access
    Réponses: 3
    Dernier message: 10/12/2014, 09h03
  2. calcul nombre de jours entre deux dates
    Par charlene44 dans le forum Langage
    Réponses: 7
    Dernier message: 21/08/2012, 14h06
  3. [WD12] calcul nombre de jours par semaine
    Par heiti dans le forum WinDev
    Réponses: 6
    Dernier message: 30/10/2008, 21h11
  4. Calcul nombre de jours commun à 2 périodes
    Par msalque dans le forum Excel
    Réponses: 4
    Dernier message: 13/08/2007, 16h06
  5. Calcul Nombre De Jour Entre 2 Dates infopath2007
    Par syntony dans le forum InfoPath
    Réponses: 11
    Dernier message: 01/05/2007, 15h33

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