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 :

comment faire pr mettre a mon code les jours de la semaine sans le week end [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut comment faire pr mettre a mon code les jours de la semaine sans le week end
    Bonjour,

    Pour expliquer au mieux mon problème, j'ai une cellule avec une date de transaction et une cellule avec une date de settlement. (C5 et C8)

    Ces dates me permettent si elles respectent certaines conditions de remplir une autre cellule dans un onglet Sh .Voici le code de départ pour que vous voyez mieux .

    Est il possible que ces Today + 1 ou + 2 ou > 3, ne soit compris qu entre lundi et vendredi inclut ?

    (Peut etre je ne l exprime pas au mieux donc je laisse un exemple concret )
    Dans le cas ou Today serait vendredi ....

    Par Exemple C5 (= vendredi 11 Fevrier) et que C8 (= Lundi 14 Fevrier); la cellule C7 devrait renvoyer TOM ? (Car ça serait Today + 1 )


    Dans mon code le probleme c est qu elle renvoie Forward ....

    Merci d'avance

    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
     
                   Sh.Range("C5").Value = today
                   Sh.Range("C8").Value = .Cells(c.Row, "F").Value
     
    If Sh.Range("C8").Value = Range("C5") Then
    Sh.Range("C7").Value = "TODAY"
    End if
     
    If  Sh.Range("C8") = today + 1 Then
    Sh.range("C7").value = "TOM"
    End if 
     
    If Sh.Range("C8") = today + 2 Then
    Sh.range("C7").value = "SPOT"
    End if 
     
    If Sh.Range("C8") >= today + 3 Then
    Sh.range("C7").value  = "FORW"
    End If

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Il y a la fonction Weekday... Voici un exemple :
    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 DeuxSemainesJoursOuvrables()
        Dim cellule As Range
        Dim CeJour As Date
        Dim i As Integer
        i = 0
        CeJour = Date
        For Each cellule In Range("A1:A10")  ' plage de 10 cellules
            cellule.Value = CeJour + i
            i = i + 1
            If Weekday(cellule) = 1 Then        ' dimanche
                ' quoi qu'il y ait peut de chances de passer par ici
                cellule.Value = cellule.Value + 1
                i = i + 1
              ElseIf Weekday(cellule) = 7 Then  ' samedi
                cellule.Value = cellule.Value + 2
                i = i + 2
            End If
            cellule.NumberFormat = "yyyy/MM/dd"
        Next
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut
    Merci mais je vois pas trop comment le faire varier entre le lundi et le vendredi ... en faite c est l'adapter à mon code où j'ai du mal ...

    arfff vba , Il y a de quoi s'arracher les cheveux lol

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Cet exemple
    1. entre la date du jour (au format numérique d'abord),
    2. vérifie si la date entrée dans la cellule est un dimanche ou un samedi,
    3. la corrige en conséquence,
    4. et modifie le format de cellule pour afficher année-mois-jour : 2011-02-09


    Et il faudra adapter.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2011
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 97
    Par défaut
    Un truc me chagrine sur cet exemple, c'est que ma date entrée dans la cellule ne sera jamais un week end, un samedi et un dimanche... donc pourquoi tester cela ...

    en faite, j'ai du mal m'exprimer, mon problème c est ça ;

    C5 (= vendredi 11 Fevrier) et que C8 (= Lundi 14 Fevrier); la cellule C7 devrait renvoyer TOM ? (Car ça serait Today + 1 )

    Dans mon code le probleme c est qu elle renvoie Forward ....

    Je cherche à exclure le samedi et le dimanche en faite

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir a vous deux.

    Une suggestion : Si le samedi n'était pas neutralisé, on aurait pu utiliser la fonction de feuille NB.JOURS.OUVRES.
    Mais on peut se faire une fonction perso
    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
    Function fNbJoursSem(ByVal DateDeb As Date, ByVal DateFin As Date) As Variant
    Dim dte As Date
     
    Application.Volatile
     
    If DateDeb >= DateFin Then
        fNbJoursSem = "!Erreur!"
    Else
        fNbJoursSem = 0
        For dte = DateDeb + 1 To DateFin
            If Weekday(dte, vbMonday) < 6 Then fNbJoursSem = fNbJoursSem + 1
        Next dte
    End If
     
    End Function
    Bien sûr, il faudrait voir s'il ne faut pas neutraliser aussi les jours fériés. Et si oui de quel pays!

    Ensuite ça peut s'utiliser comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Select Case fNbJoursSem(Date, sh.Range("C8"))
        Case 0
            sh.Range("C7") = "TODAY"
        Case 1
            sh.Range("C7") = "TOM"
        Case 2
            sh.Range("C7") = "SPOT"
        Case Is >= 3
            sh.Range("C7") = "FORW"
    End Select
    J'aurais bien utilisé un CHOOSE, mais le >= 3 gêne.

    Cordialement,

    PGZ

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une proposition
    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
    Function DiffJour(Dte1 As Date, Dte2 As Date) As Integer
     
    If Weekday(Dte1, vbSaturday) <= 2 Then Dte1 = DateAdd("d", 3 - Weekday(Dte1, vbSaturday), Dte1)
    If Weekday(Dte2, vbSaturday) <= 2 Then Dte2 = DateAdd("d", -Weekday(Dte2, vbSaturday), Dte2)
    DiffJour = DateDiff("d", Dte1, Dte2, vbMonday) - 2 * DateDiff("ww", Dte1, Dte2, vbMonday)
    End Function
     
    Sub Test()
    Dim Sh As Worksheet
     
    Set Sh = Sheets("Feuil1")
    With Sh
       Select Case DiffJour(.Range("C5").Value, .Range("C8").Value)
          Case 0: .Range("C7").Value = "TODAY"
          Case 1: .Range("C7").Value = "TOM"
          Case 2: .Range("C7").Value = "SPOT"
          Case Is >= 3: .Range("C7").Value = "FORW"
       End Select
    End With
    End Sub

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2014, 09h46
  2. Comment faire pour mettre les tables flocon?
    Par Elise49 dans le forum Mondrian
    Réponses: 6
    Dernier message: 13/05/2009, 16h18
  3. Réponses: 4
    Dernier message: 29/03/2007, 19h39
  4. Comment faire une division par 5 avec les decalages
    Par Zaion dans le forum Assembleur
    Réponses: 7
    Dernier message: 05/11/2004, 17h33
  5. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25

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