Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment comptabiliser des jours ?

4 réponses
Avatar
bartez
Bonjour à tous,

J'ai encore un problème pour comptabiliser les jours.
Je souhaiterais compter le nombre de LUNDI qu'il y a entre 2 dates.

Alain VALLON m'a rapidement aidé en me fournissant la formule suivante :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(DateDéb&":"&DateFin)))=2)*1)

Cette formule fonctionne très bien si je saisie la date de début et celle de
fin sur un classeur. Le problème c'est que je souhaiterais utiliser un
formulaire pour récupérer ces dates, sans être obligé ensuite de les déposer
sur une feuille de calcul pour pouvoir obtenir un résultat en utilisant
cette formule. (ce que je fais pour le moment)

Est-il possible de transformer cette formule en VBA ou de l'éxécuter à
partir d'une macro écrite en VBA afin d'obtenir le résultat sans passer par
une feuille de calcul ?

Merci de votre aide....
Philippe

Ps : je sais pas si j'ai été très claire :(

4 réponses

Avatar
michdenis
Bonjour Bartez,

Je te propose ceci en remplacement de ce que tu utilises déjà :

'---------------------------------------
Sub NombreDeLundiEntre2Dates()

Dim DateDeb As Long
Dim datefin As Long
Dim Jour As Integer

DateDeb = CLng(CDate("1/1/2004"))
datefin = CLng(CDate("1/1/2005"))
Jour = 1

'Formule proposée par Daniel Maher qui est compatible
'avec le calendrier 1900 et 1904
'=ENT((DateFin-JOURSEM(DateFin-JourDeLaSemaine)-DateDébut+8)/7)

'Traduit pour le vba :
MsgBox Evaluate("INT((" & datefin & "-WEEKDAY(" & _
datefin & "-(" & Jour & "-1),2)-" & DateDeb & "+8)/7)")

End Sub
'---------------------------------------


Salutations!


"bartez" a écrit dans le message de news:
Bonjour à tous,

J'ai encore un problème pour comptabiliser les jours.
Je souhaiterais compter le nombre de LUNDI qu'il y a entre 2 dates.

Alain VALLON m'a rapidement aidé en me fournissant la formule suivante :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(DateDéb&":"&DateFin)))=2)*1)

Cette formule fonctionne très bien si je saisie la date de début et celle de
fin sur un classeur. Le problème c'est que je souhaiterais utiliser un
formulaire pour récupérer ces dates, sans être obligé ensuite de les déposer
sur une feuille de calcul pour pouvoir obtenir un résultat en utilisant
cette formule. (ce que je fais pour le moment)

Est-il possible de transformer cette formule en VBA ou de l'éxécuter à
partir d'une macro écrite en VBA afin d'obtenir le résultat sans passer par
une feuille de calcul ?

Merci de votre aide....
Philippe

Ps : je sais pas si j'ai été très claire :(
Avatar
bartez
Bonjour Michdenis et merci pour ton code.

C'est bien le résultat que je cherchais à obtenir :-) même si je pensais en
réalité, qu'il existait en VBA une commande qui permettait d'interpréter la
ligne d'Alain VALLON tel qu'elle était écrite initialement sans retouche
nécessaire.

1 petite question suplémentaire.

Pourquoi utiliser CLng pour définir la variable DateDeb ? J'ai testé avec et
sans et le résultat semble être le même.

@+
Philippe

"michdenis" a écrit dans le message de news:

Bonjour Bartez,

Je te propose ceci en remplacement de ce que tu utilises déjà :

'---------------------------------------
Sub NombreDeLundiEntre2Dates()

Dim DateDeb As Long
Dim datefin As Long
Dim Jour As Integer

DateDeb = CLng(CDate("1/1/2004"))
datefin = CLng(CDate("1/1/2005"))
Jour = 1

'Formule proposée par Daniel Maher qui est compatible
'avec le calendrier 1900 et 1904
'=ENT((DateFin-JOURSEM(DateFin-JourDeLaSemaine)-DateDébut+8)/7)

'Traduit pour le vba :
MsgBox Evaluate("INT((" & datefin & "-WEEKDAY(" & _
datefin & "-(" & Jour & "-1),2)-" & DateDeb & "+8)/7)")

End Sub
'---------------------------------------


Salutations!


"bartez" a écrit dans le message de news:

Bonjour à tous,

J'ai encore un problème pour comptabiliser les jours.
Je souhaiterais compter le nombre de LUNDI qu'il y a entre 2 dates.

Alain VALLON m'a rapidement aidé en me fournissant la formule suivante :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(DateDéb&":"&DateFin)))=2)*1)

Cette formule fonctionne très bien si je saisie la date de début et celle
de
fin sur un classeur. Le problème c'est que je souhaiterais utiliser un
formulaire pour récupérer ces dates, sans être obligé ensuite de les
déposer
sur une feuille de calcul pour pouvoir obtenir un résultat en utilisant
cette formule. (ce que je fais pour le moment)

Est-il possible de transformer cette formule en VBA ou de l'éxécuter à
partir d'une macro écrite en VBA afin d'obtenir le résultat sans passer
par
une feuille de calcul ?

Merci de votre aide....
Philippe

Ps : je sais pas si j'ai été très claire :(





Avatar
michdenis
Bonjour Bartez,

Avec La formule d'Alain on peut faire ceci :

Copie là dans la cellule d'une feuille de calcul de ton choix
Récupère le résultat dans une variable
Efface la cellule :

Pour copier sa formule dans une cellule :

with Range("A10")
.Formula = "=SUMPRODUCT((WEEKDAY(ROW(INDIRECT(" & CLng(CDate(DateDeb)) & _
"&" & """:""" & "&" & CLng(CDate(DateFin)) & ")))=2)*1)"
MyVar = .value
.Clear
End with
Msgbox MyVar


| Pourquoi utiliser CLng pour définir la variable DateDeb ?

Clng permet de faire la conversion des Date() par la valeur numérique qu'elle représente.

Comme tu dis, cela fonctionne sans ... mais attention, comme les variables ont reçu le type "Long", donc la date est "entreposé"
sous sa forme numérique. De façon générale, c'est bien de renvoyer à une variable le type de valeur attendu. Comme mes variables
sont de type Long, je me suis arrangé pour que les valeurs renseingnants ces dernières soient aussi du type Long.


Salutations!





"bartez" a écrit dans le message de news: uyf%
Bonjour Michdenis et merci pour ton code.

C'est bien le résultat que je cherchais à obtenir :-) même si je pensais en
réalité, qu'il existait en VBA une commande qui permettait d'interpréter la
ligne d'Alain VALLON tel qu'elle était écrite initialement sans retouche
nécessaire.

1 petite question suplémentaire.

Pourquoi utiliser CLng pour définir la variable DateDeb ? J'ai testé avec et
sans et le résultat semble être le même.

@+
Philippe

"michdenis" a écrit dans le message de news:

Bonjour Bartez,

Je te propose ceci en remplacement de ce que tu utilises déjà :

'---------------------------------------
Sub NombreDeLundiEntre2Dates()

Dim DateDeb As Long
Dim datefin As Long
Dim Jour As Integer

DateDeb = CLng(CDate("1/1/2004"))
datefin = CLng(CDate("1/1/2005"))
Jour = 1

'Formule proposée par Daniel Maher qui est compatible
'avec le calendrier 1900 et 1904
'=ENT((DateFin-JOURSEM(DateFin-JourDeLaSemaine)-DateDébut+8)/7)

'Traduit pour le vba :
MsgBox Evaluate("INT((" & datefin & "-WEEKDAY(" & _
datefin & "-(" & Jour & "-1),2)-" & DateDeb & "+8)/7)")

End Sub
'---------------------------------------


Salutations!


"bartez" a écrit dans le message de news:

Bonjour à tous,

J'ai encore un problème pour comptabiliser les jours.
Je souhaiterais compter le nombre de LUNDI qu'il y a entre 2 dates.

Alain VALLON m'a rapidement aidé en me fournissant la formule suivante :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(DateDéb&":"&DateFin)))=2)*1)

Cette formule fonctionne très bien si je saisie la date de début et celle
de
fin sur un classeur. Le problème c'est que je souhaiterais utiliser un
formulaire pour récupérer ces dates, sans être obligé ensuite de les
déposer
sur une feuille de calcul pour pouvoir obtenir un résultat en utilisant
cette formule. (ce que je fais pour le moment)

Est-il possible de transformer cette formule en VBA ou de l'éxécuter à
partir d'une macro écrite en VBA afin d'obtenir le résultat sans passer
par
une feuille de calcul ?

Merci de votre aide....
Philippe

Ps : je sais pas si j'ai été très claire :(





Avatar
bartez
OK, cette fois, je crois que j'ai compris ;-)
Merci de ton aide !
@+
Philippe

"michdenis" a écrit dans le message de news:

Bonjour Bartez,

Avec La formule d'Alain on peut faire ceci :

Copie là dans la cellule d'une feuille de calcul de ton choix
Récupère le résultat dans une variable
Efface la cellule :

Pour copier sa formule dans une cellule :

with Range("A10")
.Formula = "=SUMPRODUCT((WEEKDAY(ROW(INDIRECT(" & CLng(CDate(DateDeb))
& _
"&" & """:""" & "&" & CLng(CDate(DateFin)) &
")))=2)*1)"
MyVar = .value
.Clear
End with
Msgbox MyVar


| Pourquoi utiliser CLng pour définir la variable DateDeb ?

Clng permet de faire la conversion des Date() par la valeur numérique
qu'elle représente.

Comme tu dis, cela fonctionne sans ... mais attention, comme les variables
ont reçu le type "Long", donc la date est "entreposé"
sous sa forme numérique. De façon générale, c'est bien de renvoyer à une
variable le type de valeur attendu. Comme mes variables
sont de type Long, je me suis arrangé pour que les valeurs renseingnants
ces dernières soient aussi du type Long.


Salutations!





"bartez" a écrit dans le message de news:
uyf%
Bonjour Michdenis et merci pour ton code.

C'est bien le résultat que je cherchais à obtenir :-) même si je pensais
en
réalité, qu'il existait en VBA une commande qui permettait d'interpréter
la
ligne d'Alain VALLON tel qu'elle était écrite initialement sans retouche
nécessaire.

1 petite question suplémentaire.

Pourquoi utiliser CLng pour définir la variable DateDeb ? J'ai testé avec
et
sans et le résultat semble être le même.

@+
Philippe

"michdenis" a écrit dans le message de news:

Bonjour Bartez,

Je te propose ceci en remplacement de ce que tu utilises déjà :

'---------------------------------------
Sub NombreDeLundiEntre2Dates()

Dim DateDeb As Long
Dim datefin As Long
Dim Jour As Integer

DateDeb = CLng(CDate("1/1/2004"))
datefin = CLng(CDate("1/1/2005"))
Jour = 1

'Formule proposée par Daniel Maher qui est compatible
'avec le calendrier 1900 et 1904
'=ENT((DateFin-JOURSEM(DateFin-JourDeLaSemaine)-DateDébut+8)/7)

'Traduit pour le vba :
MsgBox Evaluate("INT((" & datefin & "-WEEKDAY(" & _
datefin & "-(" & Jour & "-1),2)-" & DateDeb & "+8)/7)")

End Sub
'---------------------------------------


Salutations!


"bartez" a écrit dans le message de news:

Bonjour à tous,

J'ai encore un problème pour comptabiliser les jours.
Je souhaiterais compter le nombre de LUNDI qu'il y a entre 2 dates.

Alain VALLON m'a rapidement aidé en me fournissant la formule suivante :
=SOMMEPROD((JOURSEM(LIGNE(INDIRECT(DateDéb&":"&DateFin)))=2)*1)

Cette formule fonctionne très bien si je saisie la date de début et celle
de
fin sur un classeur. Le problème c'est que je souhaiterais utiliser un
formulaire pour récupérer ces dates, sans être obligé ensuite de les
déposer
sur une feuille de calcul pour pouvoir obtenir un résultat en utilisant
cette formule. (ce que je fais pour le moment)

Est-il possible de transformer cette formule en VBA ou de l'éxécuter à
partir d'une macro écrite en VBA afin d'obtenir le résultat sans passer
par
une feuille de calcul ?

Merci de votre aide....
Philippe

Ps : je sais pas si j'ai été très claire :(