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