Transformation formule en VBA

4 réponses
Avatar
Brat'ac
Bonjour,

La formule suivante trouve les "mardi" (pas de moi la formule)

="1/1/2022"-JOURSEM("1/1/2022"-3)+7*LIGNE()

J'aimerais la transposer sur du VBA et je galère, un peu d'aide serait
la bienvenue

Merci

4 réponses

Avatar
MichD
La formule suivante trouve les "mardi"  (pas de moi la formule)
="1/1/2022"-JOURSEM("1/1/2022"-3)+7*LIGNE()

Bonjour,
La formule que tu cites devrait s'écrire de cette manière si tu veux
qu'Excel te trouve la réponse.
="01/01/22"*1-JOURSEM("01/01/22"*1-3)+7
Dans les exemples donnés, je n'a pas compris l'usage de "*ligne" et je
n'en ai pas tenu compte.
Dans ce type de formule Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
D2 représente l'adresse d'une cellule contenant une date dans un format
"DATE" reconnu par Excel. Tu dois ajouter le nom de la feuille si la
cellule appartient Í  une feuille différente de la feuille active.
'----------------------------------
Sub test()
Dim D As Date
D = "01/01/2022"
'Pour trouver le jour
MsgBox Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
'Pour trouver la date
MsgBox CDate(Evaluate("D2-WEEKDAY(D2-3)+7"))
'pour retourner la formule dans une cellule
Range("D5").Formula = "Ò-WEEKDAY(D2-3)+7"
'Pour utiliser une variable "D" représentant une date dans
'une formule que tu veux retourner dans une cellule...
'la cellule D10 doit au format date que tu veux obtenir
Range("D10") = "=""" & D & """*1-WEEKDAY(""" & D & """*1-3)+7"
End Sub
'----------------------------------
MichD
Avatar
Brat'ac
MichD a pensé très fort :
La formule suivante trouve les "mardi"  (pas de moi la formule)
="1/1/2022"-JOURSEM("1/1/2022"-3)+7*LIGNE()

Bonjour,
La formule que tu cites devrait s'écrire de cette manière si tu veux qu'Excel
te trouve la réponse.
="01/01/22"*1-JOURSEM("01/01/22"*1-3)+7
Dans les exemples donnés, je n'a pas compris l'usage de "*ligne" et je n'en
ai pas tenu compte.
Dans ce type de formule Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
D2 représente l'adresse d'une cellule contenant une date dans un format
"DATE" reconnu par Excel. Tu dois ajouter le nom de la feuille si la cellule
appartient Í  une feuille différente de la feuille active.
'----------------------------------
Sub test()
Dim D As Date
D = "01/01/2022"
'Pour trouver le jour
MsgBox Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
'Pour trouver la date
MsgBox CDate(Evaluate("D2-WEEKDAY(D2-3)+7"))
'pour retourner la formule dans une cellule
Range("D5").Formula = "Í’-WEEKDAY(D2-3)+7"
'Pour utiliser une variable "D" représentant une date dans
'une formule que tu veux retourner dans une cellule...
'la cellule D10 doit au format date que tu veux obtenir
Range("D10") = "=""" & D & """*1-WEEKDAY(""" & D & """*1-3)+7"
End Sub
'----------------------------------
MichD

Merci du retour,
Je pense que je me suis mal expliqué :o)
Ce que je cherche Í  faire en fait c'est de trouver tous les "mardis"
d'un mois donné
avec la formule que j'avais trouvée en la tirant vers le bas c'était
bon
Avatar
MichD
Le 16/09/22 Í  06:43, Brat'ac a écrit :
MichD a pensé très fort :
La formule suivante trouve les "mardi"  (pas de moi la formule)
="1/1/2022"-JOURSEM("1/1/2022"-3)+7*LIGNE()

Bonjour,
La formule que tu cites devrait s'écrire de cette manière si tu veux
qu'Excel te trouve la réponse.
="01/01/22"*1-JOURSEM("01/01/22"*1-3)+7
Dans les exemples donnés, je n'a pas compris l'usage de  "*ligne" et
je n'en ai pas tenu compte.
Dans ce type de formule Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
D2 représente l'adresse d'une cellule contenant une date dans un
format "DATE" reconnu par Excel. Tu dois ajouter le nom de la feuille
si la cellule appartient Í  une feuille différente de la feuille active.
'----------------------------------
Sub test()
Dim D As Date
D = "01/01/2022"
'Pour trouver le jour
MsgBox Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
'Pour trouver la date
MsgBox CDate(Evaluate("D2-WEEKDAY(D2-3)+7"))
'pour retourner la formule dans une cellule
Range("D5").Formula = "Ò-WEEKDAY(D2-3)+7"
'Pour utiliser une variable "D" représentant une date dans
'une formule que tu veux retourner dans une cellule...
'la cellule D10 doit au format date que tu veux obtenir
Range("D10") = "=""" & D & """*1-WEEKDAY(""" & D & """*1-3)+7"
End Sub
'----------------------------------
MichD

Merci du retour,
Je pense que je me suis mal expliqué :o)
Ce que je cherche Í  faire en fait c'est de trouver tous les "mardis"
d'un mois donné
avec la formule que j'avais trouvée en la tirant vers le bas c'était bon

Soit une date en A1, la formule suivante retourne le premier mardi du
mois. Pour les autres "mardi", tu ajoutes au résultat de la date
précédente 7 ainsi de suite pour trouver tous les mardis du mois.
si tu inscris en b1 la formule :
=$A$1-JOUR($A$1)+8-JOURSEM($A$1-JOUR($A$1)-2) mardi 1
Pour les autres mardis, tu fais : en B2 : B1+7 ainsi de suite.
=$A$1-JOUR($A$1)+8-JOURSEM($A$1-JOUR($A$1)-2) mardi 1
=$A$1-JOUR($A$1)+15-JOURSEM($A$1-JOUR($A$1)-2) Mardi 2
=$A$1-JOUR($A$1)+22-JOURSEM($A$1-JOUR($A$1)-2) Mardi 3
=$A$1-JOUR($A$1)+29-JOURSEM($A$1-JOUR($A$1)-2) Mardi 4
=$A$1-JOUR($A$1)+36-JOURSEM($A$1-JOUR($A$1)-2) Mardi 5
Pour le mardi 5, cela peut arriver occasionnellement. Il faut vérifier
si le mois de la date retrouvée et égale au moins du mois courant.
MichD
Avatar
Brat'ac
MichD a couché sur son écran :
Le 16/09/22 Í  06:43, Brat'ac a écrit :
MichD a pensé très fort :
La formule suivante trouve les "mardi"  (pas de moi la formule)
="1/1/2022"-JOURSEM("1/1/2022"-3)+7*LIGNE()

Bonjour,
La formule que tu cites devrait s'écrire de cette manière si tu veux
qu'Excel te trouve la réponse.
="01/01/22"*1-JOURSEM("01/01/22"*1-3)+7
Dans les exemples donnés, je n'a pas compris l'usage de  "*ligne" et je
n'en ai pas tenu compte.
Dans ce type de formule Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
D2 représente l'adresse d'une cellule contenant une date dans un format
"DATE" reconnu par Excel. Tu dois ajouter le nom de la feuille si la
cellule appartient Í  une feuille différente de la feuille active.
'----------------------------------
Sub test()
Dim D As Date
D = "01/01/2022"
'Pour trouver le jour
MsgBox Day(Evaluate("D2-WEEKDAY(D2-3)+7"))
'Pour trouver la date
MsgBox CDate(Evaluate("D2-WEEKDAY(D2-3)+7"))
'pour retourner la formule dans une cellule
Range("D5").Formula = "Í’-WEEKDAY(D2-3)+7"
'Pour utiliser une variable "D" représentant une date dans
'une formule que tu veux retourner dans une cellule...
'la cellule D10 doit au format date que tu veux obtenir
Range("D10") = "=""" & D & """*1-WEEKDAY(""" & D & """*1-3)+7"
End Sub
'----------------------------------
MichD


Soit une date en A1, la formule suivante retourne le premier mardi du mois.
Pour les autres "mardi", tu ajoutes au résultat de la date précédente 7 ainsi
de suite pour trouver tous les mardis du mois.
si tu inscris en b1 la formule :
=$A$1-JOUR($A$1)+8-JOURSEM($A$1-JOUR($A$1)-2) mardi 1
Pour les autres mardis, tu fais : en B2 : B1+7 ainsi de suite.
=$A$1-JOUR($A$1)+8-JOURSEM($A$1-JOUR($A$1)-2) mardi 1
=$A$1-JOUR($A$1)+15-JOURSEM($A$1-JOUR($A$1)-2) Mardi 2
=$A$1-JOUR($A$1)+22-JOURSEM($A$1-JOUR($A$1)-2) Mardi 3
=$A$1-JOUR($A$1)+29-JOURSEM($A$1-JOUR($A$1)-2) Mardi 4
=$A$1-JOUR($A$1)+36-JOURSEM($A$1-JOUR($A$1)-2) Mardi 5
Pour le mardi 5, cela peut arriver occasionnellement. Il faut vérifier si le
mois de la date retrouvée et égale au moins du mois courant.
MichD

OK; Merci