|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Bonjour à tous et à toutes ..
Tout d'abord je vous souhaite mes meilleurs voeux pour 2012 =) .... et beaucoup de santé ,d'argent et de code en perspective Alors je cherche à soustraire deux dates mais le resultat doit faire en sorte de ne pas compter les jours feriés et les weeks end .. Petit exemple Difference de 31 /10 et 28 /10 doit afficher 1 car le 29,30 c'est le week ends autre exemple : la différence entre le 30/12/2009 et le 04/01/2010 doit m'afficher 2 car le 1er janvier est férié et le 2 et 3 c'est le week end.. Quelqu'un aurait une idée ?? Merci par avance .. |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Et la fonction NB.JOURS.OUVRES ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#3 |
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Salut ZebreLoup,
j'ai essayé ceci NombreDeJoursOuvres = NB.JOURS.OUVRES((Cells(ligne, 16).Value), (Cells(ligne, 18).Value) mais visiblement ce n'est pas la bonne synthaxe ... Merci à toi |
|
|
00
|
|
|
#4 |
![]() ![]() |
Pourquoi vouloir faire cela en VBA ? utilise la fonction indiquée plus haut directement dans excel ..
__________________
page à bbil : dernières entrées : Débuter en VB6 Mes contributions en téléchargement Les pages VB : FAQs, Tutoriels VB, Outils , Sources, WIKI Impératif "A LIRE AVANT DE POSTER"
|
|
00
|
|
|
#5 |
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Salut bbil ,
En faite je dois absolument utiliser une macro c'est pour cela que je cherche à savoir comment calculer le nombre de jours entre deux dates sans prendre en compte les jours feries et les week ends. Merci à toi =) |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Tu as la fonction workday en VBA qui normalement est disponible si tu coches atpvbaen.xls dans les références. Mais je crois que ça dépend de la version d'Excel.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
Bonjour à tous.
Tout d'abord, je vous adresse mes meilleurs voeux pour 2012. Longue vie au Forum! La fonction suivante Work_Days retourne le nombre de jours ouvrés en tenant compte des bornes comprises. (à adapter) Code :
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
||
|
|
00
|
|
|
#8 |
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Merci à tous,j'ai compris pour les jours fériés et les week ends =) !
En faite maintenant pour corsé un peu =) une journée est égale à 10 heures de temps ( de 8heures à 18 heures ) exemple ouverture d'un incident le 2/01/2012 à 14h48 et fermeture de celui-ci le 3/01/2012 à 9 heures le 2/01 de 14heures 48 à 18heures il y a 3 heures et 12 minutes le 3/01 de 8heures à 9 heures il y a qu'une heures donc 3heures et 12 minutes + 1 heures = 4heures et 12 minutes donc ca correspond pas a une journéeLa ou ca se corse : exemple ouverture d'un incident le 28/10/2010 à 12 heures et fermeture de celui-ci le 2/11/2010 à 9 heures le 28/10/2010 de 12heures à 18heures il y a 6 heures le 29 il y a 10 heures qui se passe (de 8heures à 18 heures )donc une journée Le 30,31 c"'est le week end donc on ne calcul pas les heures si ça avait été aussi un jour férié on n'aurait pas calculé également. Le 01/11/2010 il se passe 10 heures (de 8 heures a 18heures ) donc une journée. le 2/11/2010 de 8 heures à 14 heures il y a 6 heures donc si on calcule le nombre de jours entre le 2/11/2010 et le 28/10/2010 il y a 6heures +10 heures + 10 heures + 6 heures ce qui fait 3 jours + 2 heures ou 32 heures donc en gros la je suis dans un cas supérieur à 3 jours .. Je ne vois vraiment pas comment coder cela !!!! Je sais c'est complexe !!!!!! Merci à tous en tout cas pour votre aide =) |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Marcel GALANODéveloppeur informatique Inscription : juillet 2009 Messages : 644 ![]() |
__________________
Bien Cordialement. Marcel Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.![]()
|
|
|
00
|
|
|
#10 | ||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
salut,
Code :
|
||
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Regarde une petite adaptation. Attention, ce n'est pas optimisé, c'est pour bien comprendre la démarche. Je renvoie un double ici car je rajoute les minutes après la virgules.
Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
00
|
|
|
#12 | ||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
bonjour,
Visiblement lorsque j'execute la macro il indique le message d'erreur suivant : Qualificateur incorrect en soulignant date 1 ceci concerne la fonction ci dessous : Code :
|
||
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Euh c'est bizarre tu parles d'une erreur sur une ligne qui n'existe pas dans le code, tu l'as modifié ?
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#14 | ||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Bonjour zebre loup,
j'ai effectivement modifié pour essayer de réadapter le code mais cela ne fonctionne pas. j'ai aussi laissé la ligne de code que tu avais proposé initialement mais cela ne change rien visiblement ,je vais poster mon code pour que ce soit plus parlant Code :
En gros il faudrait que lorsque je récupere les cellules contenant la date et l'heure ,il que je recupere l'heure et les minutes, que je fasse la sousctraction entre les deux cellules et que je récupere le temps écoulés entre ces deux horraires ,par contres seules les heures entre la plage 8heures -18 heures doivent compter ,et les heures faisant partie des week end et jours féries sont a exclures également donc pour remettre un exemple concret exemple ouverture d'un incident le 28/10/2010 à 12 heures et fermeture de celui-ci le 2/11/2010 à 9 heures le 28/10/2010 de 12heures à 18heures il y a 6 heures le 29 il y a 10 heures qui se passe (de 8heures à 18 heures )donc une journée Le 30,31 c"'est le week end donc on ne calcul pas les heures Le 01/11/2010 c'est un jour férié on ne compte pas également. le 2/11/2010 de 8 heures à 14 heures il y a 6 heures donc si on calcule le nombre de jours entre le 2/11/2010 et le 28/10/2010 il y a 6heures +10 heures +6 heures ce qui fait 24 heures donc deux jours et 4 heures...Je ne vois vraiment pas comment faire cela !!! Merci en tout cas pour ton aide =) |
||
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Fais attention quand tu donnes des exemples concrêts : tu parles d'abord de 9h le dernier jour, puis de 14h. De plus 10 + 6 + 6 = 22 et non 24 !
Sinon désolé, je me croyais en C# avec mon date1.Hour, c'est Hour(date1). De plus, il y avait un problème avec la fonction Work_Days de MarcelG quand il y a une heure dans la date, j'ai donc rajouté le DateValue. Voici un code qui fonctionne : Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
00
|
|
|
#16 | ||||||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
Re =)
Il est vrai que je commence a m'y perdre lool donc je reposte le code ici Code :
le calcul se fait entre le 28/10/2010 17 heures 07 minutes et le 02/11/2010 9heures 30 le 28/10/2010 de 17heures 07 à 18heures il y a 53 minutes le 28/10/2010 il y a 10 heures (de 8 heures à 18heures) le 30,31 on ne compte pas c'est week end le 1/11/2010 on ne compte pas c'est ferie le 2 /11/2010 fermeture à 9heures 30 donc de 8 heures à 9 heures 30 il y a une heures et demi donc on va essayer d'etre bon en math lool 53 minutes + 10 heures + 1heures 30 cela fait 12heures et 23 minutes =) la fonction concerné Code :
Code :
![]()
|
||||||
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Quand j'utilises ma fonction, ça me donne 12.38333.
C'est donc plus un problème d'affichage. Si tu prends mon résultat que tu divises par 24 et que tu mets au format hh:mm, tu as bien 12:23. Après ça dépends comme tu veux procéder. Vu que pour toi une journée vaut 10h, il faudrait diviser par 10, la partie entière représentera le nombre de jours et il faudrait convertir la partie décimal pour avoir l'heure. avec le code suivant, ça donne une réponse en toute lettre : Code :
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
||
|
|
00
|
|
|
#18 | ||||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
re,
j'ai essayé cette recette de cuisine mais visiblement cela ne fonctionne pas... Code :
Et auquel cas une fois que cela est convertit par exemple 12:23 et 13 : 46 est ce que cela va me donner 26 : 09 ??? Merci à toi En effet,en utilisant ta fonction cela fonctionne mais ensuite ,je dois donc utiliser nb (indiquer dans le code ci dessous et selon le cas décrit dans les conditionnelles appliquer les sanctions. dans ma 4 eme condition ,il va falloir aussi gérer les jours supplementaires , si admettons je suis dans dans un cas > 40 heures par exemple il y a 46 heures et 10 minutes ,il y aura qu'un jour supplementaire donc pour le 4 eme cas faut que je recupere seulement la partie entiere de nb, si il y a 56 heures je recupere donc 50 heures et il y a donc que deux jours supplementaires.. Code :
|
||||
|
|
00
|
|
|
#19 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Ma "cuisine" ne servait qu'à l'affichage, ça n'avait aucune valeur pour les calculs, en effet, pour Excel, une journée ne fait pas 10h !
C'est pour ça qu'il faut que tu utilises le résultats de mon avant dernier code, avant l'affichage en toute lettres. Cela te donnais un nombre d'heures (les minutes après la virgule repassées en base 10 et non 60). Tu le divises par 10 afin d'avoir un nombre de jours pour ton test, c'est très simple, je ne vois pas où est le souci.
__________________
« Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell |
|
|
00
|
|
|
#20 | ||
|
Candidat au titre de Membre du Club
![]() Technicien réseau Inscription : décembre 2011 Messages : 91 ![]() |
RE zebreloup,
c'est ce que j'ai effectué mais suis pas convaincu au niveau du resultat voici d'ailleurs le code final les dates de tests utilisés sont : Date début 28/10/2011 17:07 07/11/2011 15:58 07/11/2011 17:49 10/11/2011 15:43 17/11/2011 15:55 18/11/2011 10:07 21/11/2011 16:46 22/11/2011 09:46 25/11/2011 16:15 Date fin 02/11/2011 09:30 08/11/2011 16:57 08/11/2011 17:09 14/11/2011 17:20 18/11/2011 11:30 24/11/2011 11:00 22/11/2011 11:41 24/11/2011 12:00 28/11/2011 10:03 donc lorsque je calcul pour les sanctions du mois de novembre par exemple en se basant sur ceci ' Indisponibilité > = à 1jours ou 10heures = 10€ ' Indisponibilité entre 1 et 2 jours => 10€ +18 € = 28€ ' Indisponibilité entre 2 et 3jours => 10€ +18€ + 25€ =53€ ' Indisponibilité supérieur à 3jours => 53€ + 25€/jour supplémentaire j'obtiens pour le mois de novembre 200 or que je devrais obtenir moins !!! je vois pas ou est la coquille ! Code :
|
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com