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 :

verifier s'il y a eu une certaine date+temps entre 2 dates


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Points : 24
    Points
    24
    Par défaut verifier s'il y a eu une certaine date+temps entre 2 dates
    Bonjour,

    J'aimerais programmer cet algorithme en VBA Excel mais je cale completement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Function retourne_temps_a_soustraire(ByVal Date_ancienne, ByVal Date_nouvelle) as Integer
     
    Si entre Date_ancienne et Date_nouvelle, il y a eu un Samedi entre 11h00 et 23h00 alors retourne_temps_a_soustraire = 1
    Si entre Date_ancienne et Date_nouvelle, il y a eu un Dimanche entre 11h00 et 23h00 alors retourne_temps_a_soustraire = 1
    Si entre Date_ancienne et Date_nouvelle, il y a eu un Samedi entre 11h00 et 23h00 et un Dimanche entre 11h00 et 23h00 alors retourne 12h00, alors retourne 2
     
    Si entre Date_ancienne et Date_nouvelle, il y a eu deux Samedi entre 11h00 et 23h00 et un Dimanche entre 11h00 et 23h00 alors retourne_temps_a_soustraire = 3
     
    Si entre Date_ancienne et Date_nouvelle, il y a eu deux Samedi entre 11h00 et 23h00 et deux Dimanche entre 11h00 et 23h00 alors retourne_temps_a_soustraire = 4
     
    Sinon retourne_temps_a_soustraire = 0
     
    End Function


    Exemple 1 :
    Date_ancienne(code par un now()) = 39969.5833333333 (Vendredi 5/06 14h00)
    Date_nouvelle(code par un now()) = 39973.4166666667 (Mardi 9/06 10h00)

    Je veux obtenir : retourne_temps_a_soustraire = 2 (car il y a eu le samedi 6/06 entre 11h00 et 23h00 ET le dimanche 7/06 entre 11h00 et 23h00)

    Exemple 2 :
    Date_ancienne(code par un now()) = 39969.5833333333 (Vendredi 5/06 14h00)
    Date_nouvelle(code par un now()) = 39971.375 (Dimanche 7/06 9h00)

    Je veux obtenir : retourne_temps_a_soustraire = 1 (car il y a eu le samedi 6/06 entre 11h00 et 23h00)

    Exemple 3 :
    Date_ancienne(code par un now()) = 39969.5833333333 (Vendredi 5/06 14h00)
    Date_nouvelle(code par un now()) = 39978.375 (Dimanche 14/06 9h00)

    Je veux obtenir : retourne_temps_a_soustraire = 3 (car il y a eu le samedi 6/06 entre 11h00 et 23h00 ET le dimanche 7/06 entre 11h00 et 23h00) et le samedi 13/06 entre 11h00 et 23h00)


    Merci pour votre aide

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    Visiblement tu n'as pas eu beaucoup de succés voila quelque piste pour ton programme
    La FAQ VBA Acesse (même principe qu pour VBA Excel) pour les Dates et Heures

    Tu devrais pouvoir y trouver comment récupérer le jour de la semaine et ainsi pouvoir tester s'il y a bien eu des samedi et dimanche (tu peux même avoir les jour férié, mais ca je ne sais pas si cela te sera utile)
    Bonne chance pour ton code

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 48
    Points : 24
    Points
    24
    Par défaut
    Merci pour le lien, a vrai dire c'est plutot l'algo qui me pose probleme plutot que les fonctions excel que je commence a bien connaitre maintenant.
    Sur des dates precises j'ai reussi la detection mais pour tous les samedis et dimanches j'y arrive pas meme avec weekday.
    Faut que je creuse encore je vais bien finir par y arriver

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

    Je n'ai pas cherché très loin, mais j'ai fait quelques essais, est-ce que ce code pourrais convenir ?

    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
    datd = "06/06/09"
    datf = "24/06/09"
    nbj1 = DateDiff("d", datd, datf)
    nbj2 = nbj1
    hrd = "11:00"
    hrf = "23:00"
    jd = Weekday(datd, 2)
    jf = Weekday(datf, 2)
     
    For i = 1 To nbj1
        If i = 1 And jd = 6 And hrd >= "11:00" And hrf <= "23:00" Then
        nbj2 = nbj2 - 1
        ElseIf i = 1 And jf = 6 And hrd >= "11:00" And hrf <= "23:00" Then
        nbj = nbj - 1
        Else
        j = DateAdd("d", i - 1, datd)
        j = Weekday(j, 2)
            If j = 6 And hrd >= "11:00" And hrf <= "23:00" Then
            nbj2 = nbj2 - 1
            End If
     
            If j = 7 And hrd >= "11:00" And hrf <= "23:00" Then
            nbj2 = nbj2 - 1
            End If
     
    End If
    Next
    Même si c'est le cas, c'est sans doute à améliorer.

    J'ai réalisé que cette partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    And hrd >= "11:00" And hrf <= "23:00" Then
    ne devait fonctionner que par hasard, mais je n'ai plus le temps ce soir.
    Dernière modification par AlainTech ; 21/06/2009 à 11h48. Motif: Fusion de 2 messages

  5. #5
    Invité
    Invité(e)
    Par défaut
    En fait, après rectification :
    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
     
    datd = "06/06/09"
    datf = "24/06/09"
    nbj1 = DateDiff("d", datd, datf)
    nbj2 = nbj1
    hrd = "10:00"
    hrf = "23:00"
    jd = Weekday(datd, 2)
    jf = Weekday(datf, 2)
     
    For i = 1 To nbj1
        If i = 1 And jd = 6 And hrd >= "11:00" And hrf <= "23:00" Then
        nbj2 = nbj2 - 1
        ElseIf i = 1 And jf = 6 And hrd >= "11:00" And hrf <= "23:00" Then
        nbj = nbj - 1
        Else
        j = DateAdd("d", i - 1, datd)
        j = Weekday(j, 2)
            If j = 6 Then
            nbj2 = nbj2 - 1
            End If
     
            If j = 7 Then
            nbj2 = nbj2 - 1
            End If
     
    End If
    Next
    A vérifier.

Discussions similaires

  1. [phpMyAdmin] Comment vider une table entre deux dates ou entre deux id avec phpMyAdmin
    Par patrmich dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 24/05/2014, 14h48
  2. Réponses: 6
    Dernier message: 29/06/2012, 09h24
  3. Réponses: 0
    Dernier message: 31/05/2011, 19h13
  4. Réponses: 16
    Dernier message: 16/05/2008, 17h39

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