Nb.jours.ouvre et vitesse d'execution [Résolu]

Eyjaring 3 Messages postés jeudi 3 novembre 2005Date d'inscription 7 février 2006 Dernière intervention - 6 févr. 2006 à 15:34 - Dernière réponse : cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention
- 7 févr. 2006 à 18:29
Bonjour.

J'utilise à ce jour un fichier excel dans lequel je dois calculer le nombres de jours entre 2 dates tout en excluant les jours fériés. J'ai trouvé mon bonheur avec la fonction excel nb.jours.ouvrés.

Malheureusement à ce jour, mon fichier va bientot compter 1000 enregistrements et lors de la moindre modification excel recalcule les nb.jours.ouvres de tout mon fichier. A ce jour la moindre modifs prend 2 a 3 minutes pour etre prise en compte le temps qu'excel recalcule le tout.

De plus vu le temps de recalcul je ne peux pas me permettre de faire les calculs sur ordre : en effet je ne suis pas la seule a travailler sur le fichier et je me voietres mal dire a mes utilisateurs "pour une modif de 2 sec tu devra attendre 3 min de mise a jour" ou bien "pour voir tes modifs il faut que tu fermes puis ouvre ton fichier" :(

Connaissez vous un moyen d'accelerer le temps d'execution de cette fonction (nb.jours.ouvres) ou tout simplement une autre fonction s'executant plus rapidement voir du Vba. Je precise que je travaille sous Execl 97 et qu'il m'est impossible de migrer le tout sous access ou tout autre basede données.

Merci d'avance.
Afficher la suite 

6 réponses

Meilleure réponse
jpleroisse 1788 Messages postés mardi 7 novembre 2000Date d'inscription 11 mars 2006 Dernière intervention - 6 févr. 2006 à 20:57
3
Merci
Bonjour,

Essaye celle-ci à la place de la fonction Excel.

Cette fonction considère que le samedi et le dimanche ne sont pas ouvrés.

Pour le reste c'est la même chose(par exemple en A1 21/12/1950, en B1 15/01/1951, en C1 = NbreJoursOuvrés(A1;B1)

Dans un Module



Function NbreJoursOuvrés(Date1, Date2)

Dim tjour(7) As String

Dim vNbjours As Integer, i

tjour(1) = 0 'Dimache

tjour(2) = 1 'Lundi

tjour(3) = 1 'Mardi

tjour(4) = 1 'Mercredi

tjour(5) = 1 'Jeudi

tjour(6) = 1 'Vendredi

tjour(7) = 0 'Samedi

For i = Date1 To Date2

If tjour(WeekDay(i)) = 1 Then

vNbjours = vNbjours + 1

End If

Next i

NbreJoursOuvrés = vNbjours

End Function



jpleroisse



Si un réponse vous convient, cliquez Réponse Acceptée.

Merci jpleroisse 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Meilleure réponse
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 7 févr. 2006 à 00:05
3
Merci
Salut
Bonne idée jp !
Simplifie :
Dim tjour(7) As Integer
et plus loin
For i = Date1 To Date2
vNbjours = vNbjours + tjour(WeekDay(i))
End If

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)

Merci cs_Jack 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 6 févr. 2006 à 20:49
0
Merci
Salut
Est-ce que tu utilises cette fonction telle quelle ou bien l'utilises-tu dans une macro ?
Si Oui : Fais-tu des boucles dans cette macro ?
Es-tu sure que ces boucles soient 'propres' ?
Il faudrait que tu nous copies/colles le code, qu'on y jette un oeil.

Je ne vois pas pourquoi "faire les calculs sur ordre" (F9) est gènant puisque de toute façon, si le fichier est ouvert sur ton poste, personne d'autre ne peut le lire (à part en mode lecture seule).

Il faut peut-être repenser la méthode de stockage de tes lignes et les dispatcher sur plusieurs feuilles ou plusieurs classeurs. Je pense que Excel ne recalculera pas les feuilles qui ne sont pas apparentes, sauf si tu fais des liaisons.

Sinon, il faut changer de machine et/ou installer plus de mémoire.
Désolé, il n'y a pas de solution miracle.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)
Eyjaring 3 Messages postés jeudi 3 novembre 2005Date d'inscription 7 février 2006 Dernière intervention - 7 févr. 2006 à 09:54
0
Merci
Re-Bonjour, merci pour vos réponses, c'est exactement ce qu'il me faut, de cette facon je peux intercepter l'event et lui demander de recalculer pour la ligne en cours uniquement, recalcul qui est desormais transparent.
Me suffis plus de rajouter une chtite fonction pour me calculer les jours fériés à la volée ( mais ca, ca ne devrait pas poser de pbs). Vous etes des chefs !!!!

Merci bcp
Eyjaring 3 Messages postés jeudi 3 novembre 2005Date d'inscription 7 février 2006 Dernière intervention - 7 févr. 2006 à 10:03
0
Merci
Un petit rajout le temps d'execution est egalement instanté meme si je je lance le traitement sur mes 1000 enregistrements ( que je peux pas dispatcher en plusieurs feuilles car justement le but est de pouvoir avoir les données sur la meme feuille). C'est trop beau a voir tellement c'est rapide
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 7 févr. 2006 à 18:29
0
Merci
Re
Content que ça solutionne ton problème.
Ta macro "nb.jours.ouvres" est incluse dans les fonctions complémentaires de Excel.
Je pense que cette macro est internamtionale et, à ce titre, elle doit recalculer les dates des jours fériés à chaque appel. C'est surement la raison de sa lenteur.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage. (Socrate)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.