1. #1
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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 Expert Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    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 106
    Points
    2 106

    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
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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 Confirmé Sénior Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 229
    Points : 7 917
    Points
    7 917

    Par défaut

    Bonjour,
    voir du coté de "NETWORKDAYS" en VBA ou "NB.JOURS.OUVRES" avec excel

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    pensez à cliquer sur si votre problème l'est
    Merci de votre visite et ... n’oubliez pas le guide, en cliquant (en bas des réponses) sur si content, sur rien du tout si pas satisfait, sinon sur si pas content mais alors pas content du tout
    Et n'oubliez pas que les membres qui vous répondent sont des participants bénévoles !

  5. #5
    Expert Confirmé Sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    3 391
    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 : 3 391
    Points : 8 480
    Points
    8 480

    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
    Pensez à Voter, d'avance merci. @+ Philippe
    Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
    Autres utilitaires : MZ Tools 3.0 VBA 7Zip et Compacter projets VBA

    Contributions : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator et Téléchargements

  6. #6
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 759
    Points
    7 759

    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 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.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  7. #7
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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 Confirmé Sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    3 391
    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 : 3 391
    Points : 8 480
    Points
    8 480

    Par défaut

    Salut, égalment pour infos voir ceci
    Pensez à Voter, d'avance merci. @+ Philippe
    Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
    Autres utilitaires : MZ Tools 3.0 VBA 7Zip et Compacter projets VBA

    Contributions : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator et Téléchargements

  9. #9
    Expert Confirmé Sénior Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 229
    Points : 7 917
    Points
    7 917

    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
    _____________________________________________
    pensez à cliquer sur si votre problème l'est
    Merci de votre visite et ... n’oubliez pas le guide, en cliquant (en bas des réponses) sur si content, sur rien du tout si pas satisfait, sinon sur si pas content mais alors pas content du tout
    Et n'oubliez pas que les membres qui vous répondent sont des participants bénévoles !

  10. #10
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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 Confirmé Sénior Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 229
    Points : 7 917
    Points
    7 917

    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
    _____________________________________________
    pensez à cliquer sur si votre problème l'est
    Merci de votre visite et ... n’oubliez pas le guide, en cliquant (en bas des réponses) sur si content, sur rien du tout si pas satisfait, sinon sur si pas content mais alors pas content du tout
    Et n'oubliez pas que les membres qui vous répondent sont des participants bénévoles !

  12. #12
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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 Confirmé Sénior Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    4 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ardennes (Champagne Ardenne)

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

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 229
    Points : 7 917
    Points
    7 917

    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
    _____________________________________________
    pensez à cliquer sur si votre problème l'est
    Merci de votre visite et ... n’oubliez pas le guide, en cliquant (en bas des réponses) sur si content, sur rien du tout si pas satisfait, sinon sur si pas content mais alors pas content du tout
    Et n'oubliez pas que les membres qui vous répondent sont des participants bénévoles !

  14. #14
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 19
    Points
    19

    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.

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