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 :

Trouver le dernier jeudi et mardi avant une date saisie en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    apprentie
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : apprentie
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Par défaut Trouver le dernier jeudi et mardi avant une date saisie en VBA
    Bonjour,
    je dois trouver une fonction qui renvoie le dernier jeudi ou mardi de la semaine avant une date entrée.
    j'ai réalisé cette fonction mais (ca ne prend pas en compte la decrementation des jours (vue que c'est pas du meme type).
    Si vous avez d'autres solutions à proposer n'hesitez pas à les partager, cela pourrait m'aider.
    Merci davance pour vos aides.
    Cdlt,
    Sabrine
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    With Sheets("Data") ' je définis Nomjours selon la valeur num
     
    '****************************************************************
    ' je définis "Nomjours" selon la valeur "num" (voir onglet Data)
    '********************************************************************
     
    If Range("G19").Value = "1" Then
    Range("H19") = "Dimanche"
     
    ElseIf Range("G19").Value = "2" Then
    Range("H19").Value = "Lundi"
    ElseIf Range("G19").Value = "3" Then
    Range("H19").Value = "Mardi"
     
    ElseIf Range("G19").Value = "4" Then
    Range("H19").Value = "Mercredi"
     
     
    ElseIf Range("G19").Value = "5" Then
    Range("H19").Value = " Jeudi"
     
    ElseIf Range("G19").Value = "6" Then
    Range("H19").Value = "Vendredi"
    MsgBox Range("H19").Value
    'MsgBox Range("F19").Value
    ElseIf Range("G19").Value = "7" Then
    Range("H19").Value = " Samedi"
    End If
    ' MsgBox Range("F19").Value
     
    If Range("G19").Value = "2" Then
     
    Date_BAR = (Range("F19").Value) - 4
    ElseIf Range("G19").Value = "3" Then
    Date_BAR = Range("F19").Value - 5
    ElseIf Range("G19").Value = "6" Then
    Date_BAR = Range("F19").Value - 1
    ElseIf Range("G19").Value = "4" Then
    Date_BAR = Range("F19").Value - 1
    ElseIf Range("G19").Value = "5" Then
    Date_BAR = Range("F19").Value - 2
     
    End If
    MsgBox Date_BAR
    MsgBox Range("F19").Value

  2. #2
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Bonjour,

    Quand tu écris du code utilise le bouton # c'est plus simple à lire.

    Ensuite je ne comprend pas ta question.

    Tu veux si la date est un jeudi ou un mercredi avoir la date du mardi précédent.

    Tu veux si la date n'est pas un mercredi ou un jeudi avoir la date du jeudi précédent.

    F19 te sert à déclaré ta date d'entrée?

    Est-ce que je t'ai bien compris?

    Où veux-tu afin le résultat?

    A quoi te sert ce code après?

    Cordialement

  3. #3
    Membre averti
    Femme Profil pro
    apprentie
    Inscrit en
    Février 2014
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : apprentie
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2014
    Messages : 37
    Par défaut
    Bonjour,
    Merci pour votre réponse. Je dois entrer "une date quelconque" à l'aide d'un formulaire et il faut trouver le dernier mardi ou jeudi avant cette date pour envoyer une invitation.
    exemple ( si la date entrée est 29/07/2014, la fonction envoie le 24/07/2014 dans ce cas c'est un jeudi.)
    J'ai inseré une formule qui convertit la date entrée en un nombre ( dans la cellule G19) puis j'ai utilisé ces nombres pour trouver le derneir jeudi ou mardi avant cette date entrée. ( pour trouver le dernier jeudi ou mardi il faut décrementer -x selon la date entrée : si c'est un lundi c'est à dire G19=2 DONC POUR TROUVER LE DERNIER JEUDI OU MARDI AVANT CETET DATE FAUT DECREMENTER DE 4JOURS cela tombe un jeudi car c'est le plus proche que mardi. Voilà j'espere que c'ela est assez clair

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    With Sheets("Data") ' je définis Nomjours selon la valeur num
     
    '****************************************************************
    ' je définis "Nomjours" selon la valeur "num" (voir onglet Data)
    '********************************************************************
     
    If Range("G19").Value = "1" Then
    Range("H19") = "Dimanche"
     
    ElseIf Range("G19").Value = "2" Then
    Range("H19").Value = "Lundi"
    ElseIf Range("G19").Value = "3" Then
    Range("H19").Value = "Mardi"
     
    ElseIf Range("G19").Value = "4" Then
    Range("H19").Value = "Mercredi"
     
     
    ElseIf Range("G19").Value = "5" Then
    Range("H19").Value = " Jeudi"
     
    ElseIf Range("G19").Value = "6" Then
    Range("H19").Value = "Vendredi"
    MsgBox Range("H19").Value
    'MsgBox Range("F19").Value
    ElseIf Range("G19").Value = "7" Then
    Range("H19").Value = " Samedi"
    End If
    ' MsgBox Range("F19").Value
     
    If Range("G19").Value = "2" Then
     
    Date_BAR = (Range("F19").Value) - 4
    ElseIf Range("G19").Value = "3" Then
    Date_BAR = Range("F19").Value - 5
    ElseIf Range("G19").Value = "6" Then
    Date_BAR = Range("F19").Value - 1
    ElseIf Range("G19").Value = "4" Then
    Date_BAR = Range("F19").Value - 1
    ElseIf Range("G19").Value = "5" Then
    Date_BAR = Range("F19").Value - 2
     
    End If
    MsgBox Date_BAR
    MsgBox Range("F19").Value
    F19 contient la date entrée

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu dois donc trouver le mardi ou le jeudi qui précède une date donnée.
    Tu peux facilement faire cela sans un code VBA (cDate est la cellule qui contient la date du jour en question, +1 pour lundi, +2 pour mardi, etc.); Attention que si cette date est un mardi, il donnera la même date. Il y a donc lieu de faire un test)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =cDate-JOURSEM(cDate-1)+2
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Je rejoins Philippe

    J'ai testé son code en modifiant la valeur numérique dans la parenthèse pour obtenir ça.

    Tu rentres ta date dans la case G 13 tu as le résultat en H 13.

    Classeur1.xlsx

  6. #6
    Invité
    Invité(e)
    Par défaut Bonjour, regardes ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Mardi = JeudiEtMardi("28/07/2014", False) ''False le mardi
    Jeudi = JeudiEtMardi("28/07/2014", True)  'True le jeudi
    End Sub
    Function JeudiEtMardi(D As Date, Jeudi As Boolean) As Date
    Dim J As Integer
    J = Weekday(D) - 2 'je recherche le lundi de la semaine
    If Jeudi = False Then JeudiEtMardi = D - J + 1 Else JeudiEtMardi = D - J + 3 'je retourne le mardi ou le jeudi de la semaine
    If DateDiff("d", D, JeudiEtMardi) > 0 Then JeudiEtMardi = JeudiEtMardi - 7 si la date retournée est supérieure a la date passé en paramètre, je retire 7 jours
    End Function

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour enrichir la répone de Robert que je salue au passage, et si on veut vraiment passer par du VBA là où Excel offre cela d'une façon native.
    Une fonction nommée PreviousDay qui renvoie le jour qui précède une date en passant comme argument le jour souhaité
    Si l'argument optionnel WeekDayNum n'est pas utilisé, c'est le mardi qui précède la date qui est renvoyé.
    Si la date de référence est égal au jour précédent demandé c'est la jour de la semaine préécdente qui est renvoyé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function PreviousDay(ThisDate As Date, Optional WeekDayNum As Byte = vbTuesday) As Date
     ' ThisDate (Date)   : Date de référence
     ' WeekDayNum (byte) : (1 = Dimanche, 2 = Lundi, etc.
     '            (On peut aussi utiliser les constantes de Date vbSumday, vbMonday, etc.
     PreviousDay = ThisDate - WeekDay(ThisDate - WeekDayNum + 1, vbMonday)
    End Function
    Une procédure test en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TestJourPrecedent()
     MsgBox Format(PreviousDay(Date, vbSunday), "ddd dd/mm") ' Le dimanche qui précède Date
     MsgBox Format(PreviousDay(Date), "ddd dd/mm") ' Le mardi qui précède Date
    End Sub
    La fonction utilisée comme fonction personnalisée dans excel (où D15 contient la date de référence et $F$13 le numéro du dernier jour de la semaine qui précède D15 (1 = Dimanche, 2 Lundi, Etc.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =PreviousDay(D15;$F$13)
    ou si l'on veut le dernier mardi qui précède D15
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/07/2014, 16h32
  2. Calculer le dernier jeudi avant une date entrée.
    Par sabrine1311 dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/07/2014, 17h29
  3. [AC-2010] Requête dernier paramètre non vide avant une date
    Par docjo dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 22/05/2013, 14h58
  4. trouver le "nom" d'un jour avec une date
    Par misterdev007 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/03/2007, 14h19
  5. Afficher des lignes d'avant une date
    Par grenoult dans le forum Requêtes
    Réponses: 4
    Dernier message: 12/12/2006, 07h55

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