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 !!!
 

Pièces jointes

  • fichier test conges.xls
    271 KB · Affichages: 40
  • fichier test conges.xls
    271 KB · Affichages: 34
  • fichier test conges.xls
    271 KB · Affichages: 38

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
 

Pièces jointes

  • fichier test conges.xls
    238.5 KB · Affichages: 39
  • fichier test conges.xls
    238.5 KB · Affichages: 41
  • fichier test conges.xls
    238.5 KB · Affichages: 40

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 !
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 885
Membres
101 830
dernier inscrit
sonia poulaert