Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 14 sur 14
  1. #1
    Futur Membre du Club
    Inscrit en
    avril 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 50
    Points : 18
    Points
    18

    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 Sebastien L
    Ingénieur Financier
    Inscrit en
    mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Nom : Homme Sebastien L
    Âge : 35
    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 190
    Points
    2 190

    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 : 18
    Points
    18

    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 :
    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 :
    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 Dominique LEMAIRE
    Salarié Champagne
    Inscrit en
    décembre 2006
    Messages
    3 575
    Détails du profil
    Informations personnelles :
    Nom : Homme Dominique LEMAIRE
    Âge : 59
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Salarié Champagne
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 3 575
    Points : 7 602
    Points
    7 602

    Par défaut

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

    Bonne journée
    Cordialement,
    Dom

    N'oubliez pas que les membres qui vous répondent sont des participants bénévoles !
    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

  5. #5
    Expert Confirmé Sénior
    Homme Profil pro Philippe
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    2 347
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 347
    Points : 5 813
    Points
    5 813

    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. ( Pouces en bas à la droite de Répondre avec citation )
    Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
    Autres utilitaires : MZ Tools 3.0 VBA et 7Zip

    Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator

  6. #6
    Rédacteur/Modérateur
    Avatar de fring
    Homme Profil pro Fred Thomas
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Nom : Homme Fred Thomas
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

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

    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 :
    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 : 18
    Points
    18

    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 :
    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
    Homme Profil pro Philippe
    ex Observeur CGG / Analyste prog.
    Inscrit en
    juin 2006
    Messages
    2 347
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : juin 2006
    Messages : 2 347
    Points : 5 813
    Points
    5 813

    Par défaut

    Salut, égalment pour infos voir ceci
    Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Répondre avec citation )
    Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
    Autres utilitaires : MZ Tools 3.0 VBA et 7Zip

    Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator

  9. #9
    Expert Confirmé Sénior Avatar de casefayere
    Homme Profil pro Dominique LEMAIRE
    Salarié Champagne
    Inscrit en
    décembre 2006
    Messages
    3 575
    Détails du profil
    Informations personnelles :
    Nom : Homme Dominique LEMAIRE
    Âge : 59
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Salarié Champagne
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 3 575
    Points : 7 602
    Points
    7 602

    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

    N'oubliez pas que les membres qui vous répondent sont des participants bénévoles !
    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

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

    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 Dominique LEMAIRE
    Salarié Champagne
    Inscrit en
    décembre 2006
    Messages
    3 575
    Détails du profil
    Informations personnelles :
    Nom : Homme Dominique LEMAIRE
    Âge : 59
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Salarié Champagne
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 3 575
    Points : 7 602
    Points
    7 602

    Par défaut

    A adapter
    Code :
    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

    N'oubliez pas que les membres qui vous répondent sont des participants bénévoles !
    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

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

    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 Dominique LEMAIRE
    Salarié Champagne
    Inscrit en
    décembre 2006
    Messages
    3 575
    Détails du profil
    Informations personnelles :
    Nom : Homme Dominique LEMAIRE
    Âge : 59
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : Salarié Champagne
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 3 575
    Points : 7 602
    Points
    7 602

    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

    N'oubliez pas que les membres qui vous répondent sont des participants bénévoles !
    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

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

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •