OVH Cloud OVH Cloud

Pb hardu de calcul sur des dates dans un Userform...

4 réponses
Avatar
news.microsoft.com
Bonjour à tous,
Je me heurte à un pb delicat (pour moi) sur un calcul avec des dates.

TextBox2.Value = CDate(workday(CDate(TextBox1), -10, Range("calendrier")))

Dans un Userform, je calcule dans TextBox2 une valeur égale à la date qui
figure dans TextBox1de laquelle je déduis 10 jours OUVRES, en tenant compte
d'une liste de jours fériés qui figure dans "calendrier".
Cela marche bien, mais en réalité, je voudrais connaitre la date du MARDI
immédiatement inférieure ou égale à TextBox1 - 10 jours ouvrés

Exemples :

Si je met dans Textbox1 le 25/05/05, c'est bon car TextBox2 me propose le
11/05/05 qui est un Mardi
Si je met dans Textbox1 le 05/05/05, je voudrais dans TextBox2 le 19/04/05
(le 1er mardi precedent) au lieu du 21/04/05 calculé actuellement.

Un pro du calcul sur les dates aurait-il la solution à mon problème ?
Merci
Domi

4 réponses

Avatar
LSteph
Bonjour, Domi, scrat83,
;-)
Le 11/05 est plutôt un mercredi!

Faisant abstraction des jours de fête
LMMJV -14 jours
S-12
D-13
pour correspondre à -10 jours ouvrés
voici un exemple de fonction:

'***dans module***
Public Function mXmardi(mad)
Dim ret As Integer
If mad <> "" Then
Select Case Weekday(mad)
Case 1
ret = 13
Case 7
ret = 12
Case Else
ret = 14
End Select

mXmardi = CDate(mad) - ret
Do While Weekday(mXmardi) <> 3
mXmardi = mXmardi - 1
Loop
mXmardi = mXmardi
End If
End Function
'***
'**dans le code du Uf **(exemple)***
Private Sub CommandButton1_Click()
TextBox2 = mXmardi(TextBox1)
End Sub
'***

'lSteph


"news.microsoft.com" a écrit dans le message de news:

Bonjour à tous,
Je me heurte à un pb delicat (pour moi) sur un calcul avec des dates.

TextBox2.Value = CDate(workday(CDate(TextBox1), -10,
Range("calendrier")))

Dans un Userform, je calcule dans TextBox2 une valeur égale à la date qui
figure dans TextBox1de laquelle je déduis 10 jours OUVRES, en tenant
compte
d'une liste de jours fériés qui figure dans "calendrier".
Cela marche bien, mais en réalité, je voudrais connaitre la date du MARDI
immédiatement inférieure ou égale à TextBox1 - 10 jours ouvrés

Exemples :

Si je met dans Textbox1 le 25/05/05, c'est bon car TextBox2 me propose le
11/05/05 qui est un Mardi
Si je met dans Textbox1 le 05/05/05, je voudrais dans TextBox2 le
19/04/05
(le 1er mardi precedent) au lieu du 21/04/05 calculé actuellement.

Un pro du calcul sur les dates aurait-il la solution à mon problème ?
Merci
Domi




Avatar
Domi
Merci,
J'ai été un peu vite et j'ai pas regardé la bonne ligne du calendrier !
J'ai essayé ta solution et cela semble marcher, j'ai tout de même 2 petits
problèmes...
Je dois absolument pouvoir tenir compte des jours de fêtes, c'est pas
possible ?,
Peux-tu me faire une petite explication de texte sur ta soluce ! Je suis
pas fortiche en VBA, tant que j'utilise des fonctions standards ça va mais
si ça sort des sentiers battus je galère un peu...je dois pouvoir modifier
le nombre de jours ouvrés qui sépare les 2 dates et dans ta soluce j'ai du
mal à comprendre comment est définit l'écart...
En tout cas, merci pour ta réponse rapide et sur mesure ;o)
Domi




"LSteph" a écrit dans le message de
news:
Bonjour, Domi, scrat83,
;-)
Le 11/05 est plutôt un mercredi!

Faisant abstraction des jours de fête
LMMJV -14 jours
S-12
D-13
pour correspondre à -10 jours ouvrés
voici un exemple de fonction:

'***dans module***
Public Function mXmardi(mad)
Dim ret As Integer
If mad <> "" Then
Select Case Weekday(mad)
Case 1
ret = 13
Case 7
ret = 12
Case Else
ret = 14
End Select

mXmardi = CDate(mad) - ret
Do While Weekday(mXmardi) <> 3
mXmardi = mXmardi - 1
Loop
mXmardi = mXmardi
End If
End Function
'***
'**dans le code du Uf **(exemple)***
Private Sub CommandButton1_Click()
TextBox2 = mXmardi(TextBox1)
End Sub
'***

'lSteph


"news.microsoft.com" a écrit dans le message de news:

Bonjour à tous,
Je me heurte à un pb delicat (pour moi) sur un calcul avec des dates.

TextBox2.Value = CDate(workday(CDate(TextBox1), -10,
Range("calendrier")))

Dans un Userform, je calcule dans TextBox2 une valeur égale à la date
qui


figure dans TextBox1de laquelle je déduis 10 jours OUVRES, en tenant
compte
d'une liste de jours fériés qui figure dans "calendrier".
Cela marche bien, mais en réalité, je voudrais connaitre la date du
MARDI


immédiatement inférieure ou égale à TextBox1 - 10 jours ouvrés

Exemples :

Si je met dans Textbox1 le 25/05/05, c'est bon car TextBox2 me propose
le


11/05/05 qui est un Mardi
Si je met dans Textbox1 le 05/05/05, je voudrais dans TextBox2 le
19/04/05
(le 1er mardi precedent) au lieu du 21/04/05 calculé actuellement.

Un pro du calcul sur les dates aurait-il la solution à mon problème ?
Merci
Domi








Avatar
LSteph
Re Bonjour,

A noter que:
Il ya des exemples très bien dans le genre par là :
http://frederic.sigonneau.free.fr/calendriers

Je dois absolument pouvoir tenir compte des jours de fêtes, c'est pas
possible ?,


Si tu as installé l'utilitaire d'analyse et utilitaire d'analyse VB dans
tes macros complémentaires
voir la fonction nb.jours.ouvrés, In English Networkdays, (elle doit en être
renseignée: départ,fin,jours_fériés)
jours_fériés : tu dois te les stocker dans une plage ou matrice ...

Peux-tu me faire une petite explication de texte sur ta soluce !
L'exemple de fonction que je te donnais se limitait en effet à revenir

jusqu'au mardi précédent les 10 jours ouvrés demandés
l'argument mad correspond à l'expression de date que ton textbox1 doit
gèrer.

Le select case vérifie le numéro jour renvoyé par la fonction Weekday
1-Dimanche,2-Lundi....7 Samedi
soit hors jours fêtés ou non (ex la pentecôte)
savoir si l'on retire un nombre de 12(samedi),13(dimanche) ou 14(les
autres), jours réels pour en faire 10 ouvrés.

Ensuite la boucle Do while....loop: enlève un jour à la date tant que ce
n'est pas un mardi.

A+.

lSteph








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

Merci,
J'ai été un peu vite et j'ai pas regardé la bonne ligne du calendrier !
J'ai essayé ta solution et cela semble marcher, j'ai tout de même 2 petits
problèmes...
Je dois absolument pouvoir tenir compte des jours de fêtes, c'est pas
possible ?,
Peux-tu me faire une petite explication de texte sur ta soluce ! Je suis
pas fortiche en VBA, tant que j'utilise des fonctions standards ça va mais
si ça sort des sentiers battus je galère un peu...je dois pouvoir modifier
le nombre de jours ouvrés qui sépare les 2 dates et dans ta soluce j'ai du
mal à comprendre comment est définit l'écart...
En tout cas, merci pour ta réponse rapide et sur mesure ;o)
Domi




"LSteph" a écrit dans le message de
news:
Bonjour, Domi, scrat83,
;-)
Le 11/05 est plutôt un mercredi!

Faisant abstraction des jours de fête
LMMJV -14 jours
S-12
D-13
pour correspondre à -10 jours ouvrés
voici un exemple de fonction:

'***dans module***
Public Function mXmardi(mad)
Dim ret As Integer
If mad <> "" Then
Select Case Weekday(mad)
Case 1
ret = 13
Case 7
ret = 12
Case Else
ret = 14
End Select

mXmardi = CDate(mad) - ret
Do While Weekday(mXmardi) <> 3
mXmardi = mXmardi - 1
Loop
mXmardi = mXmardi
End If
End Function
'***
'**dans le code du Uf **(exemple)***
Private Sub CommandButton1_Click()
TextBox2 = mXmardi(TextBox1)
End Sub
'***

'lSteph


"news.microsoft.com" a écrit dans le message de news:

Bonjour à tous,
Je me heurte à un pb delicat (pour moi) sur un calcul avec des dates.

TextBox2.Value = CDate(workday(CDate(TextBox1), -10,
Range("calendrier")))

Dans un Userform, je calcule dans TextBox2 une valeur égale à la date
qui


figure dans TextBox1de laquelle je déduis 10 jours OUVRES, en tenant
compte
d'une liste de jours fériés qui figure dans "calendrier".
Cela marche bien, mais en réalité, je voudrais connaitre la date du
MARDI


immédiatement inférieure ou égale à TextBox1 - 10 jours ouvrés

Exemples :

Si je met dans Textbox1 le 25/05/05, c'est bon car TextBox2 me propose
le


11/05/05 qui est un Mardi
Si je met dans Textbox1 le 05/05/05, je voudrais dans TextBox2 le
19/04/05
(le 1er mardi precedent) au lieu du 21/04/05 calculé actuellement.

Un pro du calcul sur les dates aurait-il la solution à mon problème ?
Merci
Domi












Avatar
Domi
Merci,
J'ai fouillé toutes les macros proposées par Fs et j'ai fini par trouvé la
solution grâce à une Fonction du Grand LL...

Pour ceux que cela pourrait intéresser :

Function LundiCourant()
LundiCourant = Date - ((Date - 2) Mod 7)
End Function 'fs d'après formule LL

Une petite adaptation pour extraire le Mardi courant ...
MardiCourant = Date - ((Date - 3) Mod 7)

Une petite adaptation de ma formule avec le code de LL modifié et le tour
est joué !
TextBox2.Value = CDate(workday(CDate(TextBox1), -10,
Range("calendrier"))) - ((CDate(workday(CDate(TextBox1), -10,
Range("calendrier"))) - 3) Mod 7)

Et Nickel !, cela me renvoie le premier mardi <= à la date de TextBox1 - 20
jours ouvrés en tenant compte de la plage "calendrier".

Reste un petit problème pour le moment, c'est si le mardi renvoyé est
lui-même férié...
Merci à LSteph, Fs et LL ;o)
Domi







"LSteph" a écrit dans le message de
news:
Re Bonjour,

A noter que:
Il ya des exemples très bien dans le genre par là :
http://frederic.sigonneau.free.fr/calendriers

Je dois absolument pouvoir tenir compte des jours de fêtes, c'est pas
possible ?,


Si tu as installé l'utilitaire d'analyse et utilitaire d'analyse VB dans
tes macros complémentaires
voir la fonction nb.jours.ouvrés, In English Networkdays, (elle doit en
être

renseignée: départ,fin,jours_fériés)
jours_fériés : tu dois te les stocker dans une plage ou matrice ...

Peux-tu me faire une petite explication de texte sur ta soluce !
L'exemple de fonction que je te donnais se limitait en effet à revenir

jusqu'au mardi précédent les 10 jours ouvrés demandés
l'argument mad correspond à l'expression de date que ton textbox1 doit
gèrer.

Le select case vérifie le numéro jour renvoyé par la fonction Weekday
1-Dimanche,2-Lundi....7 Samedi
soit hors jours fêtés ou non (ex la pentecôte)
savoir si l'on retire un nombre de 12(samedi),13(dimanche) ou 14(les
autres), jours réels pour en faire 10 ouvrés.

Ensuite la boucle Do while....loop: enlève un jour à la date tant que ce
n'est pas un mardi.

A+.

lSteph








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

Merci,
J'ai été un peu vite et j'ai pas regardé la bonne ligne du calendrier !
J'ai essayé ta solution et cela semble marcher, j'ai tout de même 2
petits


problèmes...
Je dois absolument pouvoir tenir compte des jours de fêtes, c'est pas
possible ?,
Peux-tu me faire une petite explication de texte sur ta soluce ! Je
suis


pas fortiche en VBA, tant que j'utilise des fonctions standards ça va
mais


si ça sort des sentiers battus je galère un peu...je dois pouvoir
modifier


le nombre de jours ouvrés qui sépare les 2 dates et dans ta soluce j'ai
du


mal à comprendre comment est définit l'écart...
En tout cas, merci pour ta réponse rapide et sur mesure ;o)
Domi




"LSteph" a écrit dans le message de
news:
Bonjour, Domi, scrat83,
;-)
Le 11/05 est plutôt un mercredi!

Faisant abstraction des jours de fête
LMMJV -14 jours
S-12
D-13
pour correspondre à -10 jours ouvrés
voici un exemple de fonction:

'***dans module***
Public Function mXmardi(mad)
Dim ret As Integer
If mad <> "" Then
Select Case Weekday(mad)
Case 1
ret = 13
Case 7
ret = 12
Case Else
ret = 14
End Select

mXmardi = CDate(mad) - ret
Do While Weekday(mXmardi) <> 3
mXmardi = mXmardi - 1
Loop
mXmardi = mXmardi
End If
End Function
'***
'**dans le code du Uf **(exemple)***
Private Sub CommandButton1_Click()
TextBox2 = mXmardi(TextBox1)
End Sub
'***

'lSteph


"news.microsoft.com" a écrit dans le message de news:

Bonjour à tous,
Je me heurte à un pb delicat (pour moi) sur un calcul avec des dates.

TextBox2.Value = CDate(workday(CDate(TextBox1), -10,
Range("calendrier")))

Dans un Userform, je calcule dans TextBox2 une valeur égale à la date
qui


figure dans TextBox1de laquelle je déduis 10 jours OUVRES, en tenant
compte
d'une liste de jours fériés qui figure dans "calendrier".
Cela marche bien, mais en réalité, je voudrais connaitre la date du
MARDI


immédiatement inférieure ou égale à TextBox1 - 10 jours ouvrés

Exemples :

Si je met dans Textbox1 le 25/05/05, c'est bon car TextBox2 me
propose




le
11/05/05 qui est un Mardi
Si je met dans Textbox1 le 05/05/05, je voudrais dans TextBox2 le
19/04/05
(le 1er mardi precedent) au lieu du 21/04/05 calculé actuellement.

Un pro du calcul sur les dates aurait-il la solution à mon problème ?
Merci
Domi