Fonction prenant en compte le jour d'aujourd'hui

Bonjour à tous !

Mon problème du jour est que je travaille avec un excel qui analyse les valeurs de la veille. Problème lorsque nous sommes lundi, il faudrait travailler avec les données de vendredi . C'est à dire que je travaille à AUJOURDHUI -1 du mardi au vendredi et AUJOURDHUI -3 le vendredi.

Mon code actuel n'est peut-être pas optimiser mais il fonctionne très bien à J-1, le voici joint :

    'SI ON EST LUNDI FAIRE TODAY-3, SINON FAIRE TODAY-1 ------------------------------
    Range("A1").Select
    ActiveCell.FormulaR1C1 = "=TODAY()-1"

    Sheets("DépassementJ+1").Select
    Columns("B:C").Select
    Selection.EntireColumn.Hidden = True
    Columns("E:E").Select
    Selection.EntireColumn.Hidden = True
    Columns("I:I").Select
    Selection.EntireColumn.Hidden = True
    Columns("K:O").Select
    Selection.EntireColumn.Hidden = True
    Columns("T:T").Select
    Selection.EntireColumn.Hidden = True
    Range("W2").Select
    Selection.AutoFill Destination:=Range("W2:X2"), Type:=xlFillDefault
    Range("X2").Select
    ActiveCell.FormulaR1C1 = "Comparaison"
    Range("X3").Select
    ActiveCell.FormulaR1C1 = "=IF(RC[-6]=R1C1,1,0)"
    Range("X3").Select
    Selection.AutoFill Destination:=Range("X3:X3500")

    'Trie des lignes afin de garder que la veille
    Supprimerligne

    '---------------------------------------------
    '------------ SPT&QDS  ------------------------
    '---------------------------------------------

    Sheets("SPT&QDS").Select
    derniere_ligne = Range("A1048576").End(xlUp).Row

    'Colonne S Date sortie
    Range("R2").Select
    Selection.AutoFill Destination:=Range("R2:S2"), Type:=xlFillDefault
    Range("S2").Select
    ActiveCell.FormulaR1C1 = "DATE SORTIE"
    Range("S3").Select
    ActiveCell.FormulaR1C1 = "=RC[-4]*1"
    Range("S3").Select
    Selection.AutoFill Destination:=Range("S3:S3200")

    'Colonne J-1 T
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:T2"), Type:=xlFillDefault
    Range("T2").Select
    ActiveCell.FormulaR1C1 = "J-1"
    Range("T3").Select
    'SI ON EST LUNDI FAIRE TODAY-3, SINON FAIRE TODAY-1 ------------------------------
    '-----------------------------------------------------------------
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=TODAY()-1,RC[-2])"
    '-----------------------------------------------------------------
    

Je vous transmets seulement le début du code avec les deux lignes à traiter, je vous ai mis des commentaires afin de mieux vous repérer.

Bonjour,

Il faut faire quelque chose comme ceci:

    'SI ON EST LUNDI FAIRE TODAY-3, SINON FAIRE TODAY-1 ------------------------------
    If Format(Date, "ddd") = "Lun" Then
        Range("A1").Value = Date - 3 '-3
    Else
        Range("A1").Value = Date - 1 'sinon, -1
    End If

Je n'ai pas touché à votre code, mais il est bien certain qu'il est largement améliorable, déjà en ne sélectionnant pas les cellules avec "Select" mais en inscrivant les valeurs directement, exemple:

Range("T2").value="J-1"

Cdlt

Bonjour,
Une autre piste :

Worksheetfunction.WorkDay_Intl(vba.Date,-1,1)

Ne prend pas en compte les jours fériés.

Cdlt.

Merci à vous deux pour votre réponse rapide !

Pouvez vous m'aider sur une seconde partie du code ?

'SI ON EST LUNDI FAIRE TODAY-3, SINON FAIRE TODAY-1 -------------------------------------------------------------------------------------------
    'Colonne J-1 T
    Range("S2").Select
    Selection.AutoFill Destination:=Range("S2:T2"), Type:=xlFillDefault
    Range("T2").Select
    ActiveCell.FormulaR1C1 = "J-1"
    Range("T3").Select

    '-----------------------------------------------------------------
    ActiveCell.FormulaR1C1 = "=IF(RC[-1]=TODAY()-1,RC[-2])"
    '-----------------------------------------------------------------

    Range("T3").Select
    Selection.AutoFill Destination:=Range("T3:T3200")

Bonne journée !

Bonjour,

Votre formule qui se recopiera de T3à T3200:

    Range("T3:T3200").FormulaR1C1 = "=IF(WEEKDAY(RC[-1],2)=1,TODAY()-3,TODAY()-1)"

si le jour de la date du jour est un lundi alors on prend la date du jour =3 sinon on prend la date du jour -1

Pour moi, ça ne veut pas dire grand chose.

**********************************************************************************************************************

Le problème, c'est que vous nous donnez votre code avec une formule , mais on ne sait pas ce qu'il faut récupérer.

Votre formule dit: si la cellule de la colonne de gauche =la date de la veille, alors on prend la valeur de la cellule située 2 colonnes avant.

ça manque cruellement de clarté sur le but à atteindre.

Ne cherchez pas à nous donner un code, dites-nous plutôt ce que vous souhaitez obtenir avec un exemple à l'appui si possible.

Cdlt

Bonjour,

Voici le fichier sur lequel je travaille :

La formule que j'aimerais modifier permet de générer la colonne T.

- Exemple on est lundi :

Si la date ( colonne S ) = AUJOURDHUI - 3 alors recopier valeur de la colonne R.

- Exemple on est mardi, mercredi, jeudi ou vendredi :

Si la date ( colonne S ) = AUJOURDHUI - 1 alors recopier valeur de la colonne R

En espérant avoir été clair.

Bonne journée !

10classeur4.zip (391.24 Ko)

donc, dans tous les cas on récupère la valeur de R!

Si je suis votre raisonnement cela ferait ceci:

=SI(JOURSEM(S3;2)>5;R3;R3)

et si c'est bien cela alors, ceci suffirait:

=R3

Mais j'ai de gros doutes

En effet c'est une solution mais j'ai besoin que ce raisonnement soit en VBA ://

bonjour le fil,

je n'ai pas lu tout, mais je suppose ceci

With Range("T3:T3200")
          .FormulaR1C1 = "=IF(OR(AND(WEEKDAY(TODAY(),2)=1,RC[-1]=TODAY()-3),AND(WEEKDAY(TODAY(),3)<=4,RC[-1]=TODAY()-1)),RC[-2],""-"")"
          .Value = .Value
     End With

oubien

With Range("T3:T3200")
.FormulaR1C1 = "=RC[-2]"
.Value = .Value
End With

Vous n'avez pas répondu à ma question, faut-il récupérer la valeur de R quel que soit le jour? donnez un exemple concret de ce qu'il faut récupérer suivant qu'on soit un lundi ou un autre jour de la semaine!

sinon:

    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Range("T3:T" & DerLig).FormulaR1C1 = "=RC[-2]"

Salut BsAlv

Oui dans tout les cas on récupère la valeur de R

Je crois que j'ai compris, si la date du jour est un lundi, alors on récupère la valeur du vendredi sinon, on récupère la valeur de la veille, c'est bien ça?

si c'est bien ce que je pense, alors le code serait:

    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Range("T3:T" & DerLig).FormulaR1C1 = "=IFERROR(IF(WEEKDAY(R[-2]C[-1],2)>5,#REF!,R[-2]C[-2]),"""")"

Edit; n'en tenez pas compte, c'est faux, je n'avais pas fait attention que les dates ne se suivaient pas. ,Essayez plutôt ceci:

    DerLig = Range("A" & Rows.Count).End(xlUp).Row
    Range("T3:T" & DerLig).FormulaR1C1 = "=IFERROR(SUBSTITUTE(VALUE(IF(WEEKDAY(RC[-1],2)>1,INDEX(R[-2]C[-2]:R" & DerLig & "C[-1],MATCH(RC[-1]-IF(WEEKDAY(RC[-1],2)>1,1,3),R[-2]C[-1]:R" & DerLig & "C[-1],0),1))),""FAUX"",""""),"""")"
    Range("T3:T" & DerLig).Value = Range("T3:T" & DerLig).Value

salut Arturo83

Bonjour,

Finalement j'ai réussi à faire une boucle simple en fonction du numéro du jour.

Quand on est lundi, ça ressort le chiffre 1 dans une cellule et donc fait aujourd'hui -3. Sinon je fais aujourd'hui -1.

Merci pour votre aide !

Rechercher des sujets similaires à "fonction prenant compte jour aujourd hui"