Nb.jours.ouvre et vitesse d'execution

Résolu
Eyjaring Messages postés 3 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 7 février 2006 - 6 févr. 2006 à 15:34
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 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.

6 réponses

jpleroisse Messages postés 1788 Date d'inscription mardi 7 novembre 2000 Statut Membre Dernière intervention 11 mars 2006 27
6 févr. 2006 à 20:57
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.
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
7 févr. 2006 à 00:05
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)
3
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
6 févr. 2006 à 20:49
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)
0
Eyjaring Messages postés 3 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 7 février 2006
7 févr. 2006 à 09:54
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Eyjaring Messages postés 3 Date d'inscription jeudi 3 novembre 2005 Statut Membre Dernière intervention 7 février 2006
7 févr. 2006 à 10:03
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
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 77
7 févr. 2006 à 18:29
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)
0
Rejoignez-nous