Macro trop trop lente

sadia

XLDnaute Occasionnel
Bonjour à tous,


J'utilise actuellement un tableau des congès pris sur le forum que j'ai réadapté à nos besoins.
le soucis est que la macro tourne pendant 15 min au minimum.

Pouvez vous me dire comment je peux l'alleger ou la rendre plus rapide ? je pense que ca vient du "loop" mais pour le coup je ne connais pas du tout son fonctionnement.

merci à vous !


Sub BD()
Application.ScreenUpdating = False
Set s = Sheets("BD")
s.[A2:E1000].ClearContents
For m = 1 To 12
Set p = Sheets(Format(DateSerial(2014, m, 1), "mmmm"))
nbCol = 34
For ligne = 6 To 35
i = 4
Do While i <= nbCol
témoin = False
Do While p.Cells(ligne, i) = "" And i <= nbCol
If i = nbCol Then témoin = True
i = i + 1
Loop
If Not témoin Then
typeCongés = p.Cells(ligne, i)
début = p.Cells(5, i)
Do While p.Cells(ligne, i) = typeCongés And i <= nbCol
If i = nbCol Then témoin = True
i = i + 1
Loop
fin = p.Cells(5, i - 1)
ligneBD = s.[A65000].End(xlUp).Row + 1
s.Cells(ligneBD, 1) = p.Cells(ligne, 1)
s.Cells(ligneBD, 2) = début
s.Cells(ligneBD, 3) = fin
s.Cells(ligneBD, 4) = typeCongés
s.Cells(ligneBD, 5) = fin - début + 1
End If
Loop
Next ligne
Next m
End Sub
 

Misange

XLDnaute Barbatruc
Re : Macro trop trop lente

Bonjour

sans avoir le classeur (anonymisé !) pour tester c'est difficile de te répondre.
Mais la structure des boucles est curieuse
par exemple ici


Code:
Do While i <= nbCol
      témoin = False
      Do While p.Cells(ligne, i) = "" And i <= nbCol
        If i = nbCol Then témoin = True
        i = i + 1
      Loop
pourquoi ne pas faire tout simplement un
for i = 4 to nbcol ?
D'autant que la condition i<=nbcol est testée deux fois dans cette boucle dont l'utilité est "questionable".

Si tu mets un classeur en ligne, explique clairement quelle est la structure de départ et à quoi tu veux arriver pour qu'on comprenne ce qui doit marcher et pas ce qui ne marche pas :)
 

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

Merci Misange,

je te joints un classeur allegé...
mais meme la pour mettre à jour ca a pris qlq minutes...

donc l'onglet bd reprend les dates posées sur les 12 mois (j'en ai laissé 3 à titre d'exemple) de l'année et me fait le listing par nom avec date et l'evenement.

en vous remerciant !!!
 

Fichiers joints

Misange

XLDnaute Barbatruc
Re : Macro trop trop lente

Bon je t'ai à peu près tout réécrit...

Chez moi ça tourne et c'est instantané mais vérifie bien.
Attention, il faut que tu sois très stricte sur les différents types de congés, toujours les écrire pareil. LE mieux c'est d'utiliser des listes de validation pour çà, ça évite les erreurs.

Je t'ai fait un TCD pour faire ta synthèse. Il se met à jour automatiquement quand tu mets à jour la base de données

Si tu changes de version d'excel, tu auras tout avantage à utiliser les tableaux (listes avec la version 2003). Je ne l'ai pas fait ici n'ayant plus 2003 pour tester, sauf pour la correspondance entre les types de congés et le coefficient (1/2 jour ou jour entier).

teste bien surtout
 

Fichiers joints

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

merci bcp pour le temps que tu as passé sur mon tableau !
je regarde ca et je te dis !
merci encore
 

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

Coucou Misange et à tout le fil !

la macro bloque sur cette ligne à chaque fois... j'ai reecris tous les differents congès partout de la meme maniere et ca bloque tjs.
tu peux m'expliquer ou elle pointe cette ligne ??


s.Cells(LigneBD, 6) = Application.WorksheetFunction.Index(Range("coeff"), Application.WorksheetFunction.Match(TypeCongés, Range("Absence"), 0))
 

Misange

XLDnaute Barbatruc
Re : Macro trop trop lente

Bonjour

sur le fichier que je t'ai envoyé ça bloque ? Chez moi ça tourne parfaitement.
Cette ligne est l'équivalent en VBA d'une combinaison index+equiv par formule qui permet de faire la correspondance entre le type de congé et le nombre de journées.
Il est essentiel que toutes les types d'absence présents dans tes feuilles de mois soient repris de la même façon dans cette liste sinon tu auras des erreurs. Idem = pas d'espaces en plus ou en moins, pas de / en rab, majuscules...
 

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

alors, c'erst bon j'ai trouvé d'ou venait le soucis !!!
il restait un motif ecrit differemment...
donc elle a mis 8 min à tourner... je vais essayer de l'alleger encore un peu...
merci pour ta reponse !
 

Misange

XLDnaute Barbatruc
Re : Macro trop trop lente

Mais tu as combien de lignes ???
Ca me parait très curieux que cela prenne autant de temps.
 

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

je viens de la relancer...
mais ca rame encore bcp
pour 8 min d'attente, j'ai 80 lignes...
 

Misange

XLDnaute Barbatruc
Re : Macro trop trop lente

Alors il y a un autre problème ailleurs dans ton classeur car 80 lignes devraient être traités en quelques secondes tout au plus.
 

sadia

XLDnaute Occasionnel
Re : Macro trop trop lente

en changeant les noms afin de pouvoir te renvoyer le fichier, j'ai enlevé les liens et ca fonctionne rapidement maintenant !!!

merciiiiiii pour aide !
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas