jesuhsXVII
Messages postés8Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 6 mars 2009
-
5 mars 2009 à 19:16
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
10 mars 2009 à 00:53
Bonjour à tous,
Je travaille sur VBA depuis peu temps et j'ai un soucis avec une boucle "for".
J'execute une macro une contenant la boucle qui suit.
Lorsque je l'execute une première fois, aucun problème (moins de 1 seconde).
Lorsque je l'execute une seconde fois, c'est nettement plus long (20 secondes en moyenne).
For col = 0 To 60
aCacher = True
If col Mod 2 = 0 Then
For jour = 0 To 4
If tous Then
If ActiveCell.Offset(jour, col + 1).Value <> 0 Then aCacher = False
Else: If ActiveCell.Offset(jour, col + 1).Value "4" Then aCacher False If ActiveCell.Offset(jour, col + 1).Value ssgp1 Then aCacher False If ActiveCell.Offset(jour, col + 1).Value ssgp2 Then aCacher False If ActiveCell.Offset(jour, col + 1).Value ssgp3 Then aCacher False
End If
Next jour
If aCacher Then
ActiveCell.Offset(0, col).EntireColumn.Hidden = True
ActiveCell.Offset(0, col + 1).EntireColumn.Hidden = True
End If
End If
Next col
Pour l'instant, voici ce que j'ai essayé de faire :
'Déclaration de toutes les variables
Dim tous As Boolean
Dim ssgp1 As Integer
Dim ssgp2 As Integer
Dim ssgp3 As Integer
Dim crit As Integer
Dim col As Integer
Dim Plage As Range
Dim Cellule As Range
Dim aCacher As Boolean
Dim jour As Integer
Mais rien n'y change. Ca rame....
Dès que je ferme le fichier et que je le réouvre, il fonctionne magnifiquement...1 fois.
Je ne sais pas comment effacer ou réinitialiser les variables ou VB en entier !!!
Merci pour les réponses que vous pourrez m'apporter...
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 5 mars 2009 à 20:03
Salut
Bizarre
Essaye :
- de changer l'abrorescence des If
- d'éviter de refaire deux fois les mêmes actions :
...
If tous Then
If ActiveCell.Offset(jour, col + 1).Value <> 0 Then aCacher = False
ElseIf ActiveCell.Offset(jour, col + 1).Value = "4" Then
aCacher = False
ElseIf ActiveCell.Offset(jour, col + 1).Value = ssgp1 Then
aCacher = False
ElseIf ActiveCell.Offset(jour, col + 1).Value = ssgp2 Then
aCacher = False
ElseIf ActiveCell.Offset(jour, col + 1).Value = ssgp3 Then
aCacher = False
End If
Next jour
If aCacher Then
If Not ActiveCell.Offset(0, col).EntireColumn.Hidden Then
ActiveCell.Offset(0, col).EntireColumn.Hidden = True
ActiveCell.Offset(0, col + 1).EntireColumn.Hidden = True
End If
End If
Vala
Jack, =fr MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
jesuhsXVII
Messages postés8Date d'inscriptionsamedi 13 mars 2004StatutMembreDernière intervention 6 mars 2009 6 mars 2009 à 11:31
Merci Jack. C'est un peu plus rapide, mais c'est toujours très long à la seconde execution...
Peut-il s'agir d'une lourdeur des variables qui pèsent sur le programme ?
Comment se fait-il que la macro fonctionne parfaitement des que je ferme et que je réouvre le programme, y a t'il un moyen de vider la mémoire ?
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 10 mars 2009 à 00:53
Re
Avec le peu de ligne sous les yeux, je ne saurais te répondre. C'est quand même bizarre.
Il faut peut-être chercher ailleurs :
- Charges/décharges-tu beaucoup de UserForm ?
Ta méthode est-elle bonne ?
- Idem pour les connexions aux DB
- Tes variables sont-elles bien toutes dimensionnées ?
et dans un vrai type bien étudié, bien avec le "As ...", sinon donne des types Variant qui sont lourds
- As-tu des données (tableaux) qui grandissent ?
- Tes variables ont-elles des étendues correctes et pas trop vastes (Private/Public) ?
Revoir les variables qui pourraient n'exister qu'à l'intérieur de procédures (Sub/Function)
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)