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 :

Exclure le samedi et le dimanche dans un calcul de date


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    J'explique ce que je cherche à faire. J'ai actuellement un formulaire sur lequel j'entre une date de début, et une date de fin de formation au format 00/00/0000 gràçe à des calendriers.

    Une formation ne peut durer plus d'une semaine (donc 5 jours). J'ai donc des contrainte m'empechant de valider une formation si elle dure plus de 5 jours.
    Actuellement, je n'ai pas ainsi de soucis si celle-ci s'étend sur une même semaine, mais le soucis est si je veut une formation, par exemple du mercredi au mardi de la semaine suivante...Il me dit que ça fait plus de 5 jours, forcement, il me compte mercredi, jeudi ,vendredi, samedi, dimanche, lundi, mardi....

    Seulement, il n'y a bien sur aucune formation possible le week-end. Alors comment faire pour qu'il ne prenne pas en compte le samedi et le dimanche, et que donc si je choisi une date de début le mercredi , et une date de fin le mardi d'après, il me compte bien:
    Mercredi, jeudi, Vendredi, lundi, mardi..

    J'aimerais rajouter aussi que j'ai une ligne qui affiche tous les jours dans cet intervalle.

    Par exemple, si j'ai une formation du mercredi 18 avril au mardi 24, je voudrais avoir dans la ligne A:

    A1
    Mercredi 18 avril 2012

    A2
    Jeudi 19 avril 2012

    A3
    Vendredi 20 avril 2012

    A4
    Lundi 21 avril 2012

    A5
    Mardi 22 avril 2012


    Merci d'avance pour votre aide!

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Alors, il y a deux choses dans ta question.

    - Calcul du nombre de jours : Tu as regardé du coté de WorkDays ? Je crois qu'elle n'est pas disponible pas défaut selon les version d'Excel, mais google est ton ami.
    - Affichage des dates : C'est en formule Excel ou en VBA ? Dans tous les cas, une petite condition devrait suffir avec un WeekDay. Si c'est vendredi tu ajoutes 3 jours, sinon 1 seul.

    Je ne pourrais pas t'en dire plus car je manque un peu de détails sur le fonctionnement de ton outil.
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Bon alors pour faire simple, j'ai un formulaire qui par deux calendriers, me permet d'avoir deux dates, une date de début et une date de fin (DTPicker1 et DTPicker2)


    J'ai pensé à Workday, mais quand je fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    datedebut= DTPicker1.Value
    datefin=DTPicker2.Value
    WorksheetFunction.WorkDay(Datedebut, DateFin)
    j'obtient un résultat étrange, du style 98451, et non un intervalle.

    Et pour afficher les dates de l'intervalle, l'outils fait un truc tout moche (ça a été fait par un débutant en vb :p):

    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
    '---Recuperation, mise en forme et ajout des dates
    DateDebut = Format(DTPicker1.Value, "dd mmmm yyyy")
    DateFin = Format(DTPicker2.Value, "dd mmmm yyyy")
     
    DateJour1 = Format(DTPicker1.Value, "dddd dd mmmm yyyy")
    DateJour2 = Format(DateAdd("d", 1, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour3 = Format(DateAdd("d", 2, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour4 = Format(DateAdd("d", 3, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour5 = Format(DTPicker2.Value, "dddd dd mmmm yyyy")
     
    Range("C5").Value = DateJour1
     
    If DTPicker1.Value <> DTPicker2.Value Then
    Range("E5").Value = DateJour2
     
    If DTPicker2.Value - DTPicker1.Value > 1 Then
    Range("G5").Value = DateJour3
     
    If DTPicker2.Value - DTPicker1.Value > 2 Then
    Range("I5").Value = DateJour4
     
    If DTPicker2.Value - DTPicker1.Value > 3 Then
    Range("K5").Value = DateJour5
    End If
    End If
    End If
    End If

    Il doit y avoir un moyen de faire mieux que ça pour afficher les dates dans l'intervalle de datedebut et datefin, tout en excluant les samedi et dimanche?

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    voir du coté de "NETWORKDAYS" en VBA ou "NB.JOURS.OUVRES" avec excel

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, par curiosité vas voir ici tu y verras un calendrier annuel sans Samedi Dimanche ni jours fériés et l'utilisation de Weekday

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Pour compléter tout ce qui vient de se dire, un petit exemple de l'utilisation de la fonction NB.JOURS.OUVRES en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim Ddeb As Date, Dfin As Date, Jferie As Range
     
    Ddeb = "26/04/2012" '<-- date de début
    Dfin = "03/05/2012" '<-- date de fin
    Set Jferie = Sheets("Feuil2").Range("A1:A10") '<-- plage contenant les jours fériés (par exemple le 01/05/2012)
     
    'résultat sans tenir compte des jours fériés
    MsgBox Application.WorksheetFunction.NetworkDays(Ddeb, Dfin)
     
    'résultat en tenant compte des jours fériés
    MsgBox Application.WorksheetFunction.NetworkDays(Ddeb, Dfin, Jferie)
     
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Effectivement, je viens d'essayer la fonction NetWorkDay, cela fonctionne. Mon premier soucis est donc réglé, merci beaucoup .

    Maintenant, reste ma 2nd question, qui je vous rappele concerne l'affichage dans une ligne d'un tableau de tous les jours de la formation au format "Vendredi 26 avril 2012".

    Pour le moment, ça fonctionne ainsi (c'est moche^^) et ça affiche même les samedi et dimanches...:

    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
    '---Recuperation, mise en forme et ajout des dates
    DateDebut = Format(DTPicker1.Value, "dd mmmm yyyy")
    DateFin = Format(DTPicker2.Value, "dd mmmm yyyy")
     
    DateJour1 = Format(DTPicker1.Value, "dddd dd mmmm yyyy")
    DateJour2 = Format(DateAdd("d", 1, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour3 = Format(DateAdd("d", 2, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour4 = Format(DateAdd("d", 3, DTPicker1.Value), "dddd dd mmmm yyyy")
    DateJour5 = Format(DTPicker2.Value, "dddd dd mmmm yyyy")
     
    Range("C5").Value = DateJour1
     
    If DTPicker1.Value <> DTPicker2.Value Then
    Range("E5").Value = DateJour2
     
    If DTPicker2.Value - DTPicker1.Value > 1 Then
    Range("G5").Value = DateJour3
     
    If DTPicker2.Value - DTPicker1.Value > 2 Then
    Range("I5").Value = DateJour4
     
    If DTPicker2.Value - DTPicker1.Value > 3 Then
    Range("K5").Value = DateJour5
    End If
    End If
    End If
    End If
    Comment améliorer ça en n'affichant pas les week-ends?

  8. #8
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, égalment pour infos voir ceci

  9. #9
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Et tu ne pouvais pas adapter ce que je t'ai déjà donné, en ajoutant une condition ?

    http://www.developpez.net/forums/d12...ine-caractere/
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  10. #10
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Si justement, c'est ce que je suis en train d'essayer de faire^^. Au passage j'ai oublié de te remercier hier .

    Mais c'est justement au niveau de la condition que je bloque (gros débutant en vb).

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    A adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub remplirdates()
    Dim x As Long, tb(), y As Long
    y = 0
    For x = Range("A1") To Range("B1")
      If WorksheetFunction.Weekday(x, 2) <> 6 And WorksheetFunction.Weekday(x, 2) <> 7 Then
        y = y + 1
        ReDim Preserve tb(1 To y)
        tb(y) = x
      End If
    Next x
    Range("C1:C" & UBound(tb)) = WorksheetFunction.Transpose(tb)
     
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    Merci casefayere , cela repond à ce que je cherche. Par contre, pour une raison qui m'échappe encore, cela bug quand je selectionne une plage de 5 jours (il ne m'affiche que les 3 premiersà, alors que si je selectionne une plage de 1 à 4 jours aucun soucis.

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    quand je selectionne une plage de 5 jours (il ne m'affiche que les 3 premiers
    tout dépend de tes dates, exemple :
    - Nous sommes le jeudi 26/4
    - ta date de depart = 25/4
    - ta date de fin = 29/4
    tu n'auras que 3 jours

    Est-ce le problème ?
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 50
    Points : 34
    Points
    34
    Par défaut
    C'est bon, j'ai finallement réussi ce que je cherchais faire. Merci pour votre aide

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/06/2015, 10h45
  2. [PHP 5.3] [Dates] Afficher les samedis et les dimanches
    Par beegees dans le forum Langage
    Réponses: 5
    Dernier message: 27/08/2009, 13h49
  3. exclure un path du servlet-mapping dans web.xml
    Par Loceka dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 08/08/2008, 10h57
  4. Exclure tout ce qui ce trouve dans une table
    Par Babssss dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/08/2007, 10h25
  5. Exclure le jour numéro 7 (dimanche)?
    Par Leesox dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/09/2005, 23h11

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