Mon code est trop lent

Résolu
cs_zeps2 Messages postés 61 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2011 - 6 mai 2010 à 11:28
cs_zeps2 Messages postés 61 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2011 - 17 mai 2010 à 16:36
Bonjour à tous,

Voici un code qui fonctionne
Le seul problème est sa lenteur.
dans ma feuille xls j'ai environ 5000 lignes.
Le tps de l'exécution est d'environ 10 secondes (c'est trés long !!)

1°) Contrôle des filtres
2°) remplissage des cellules avec l'Userform1
3°) je vide l'userform

La vraie lenteur est dans le remplissage des cellules avec les textbox ou combobox.
Comment puis-je l'accélérer ?

--------------------------------------------------------------------------------------

Sub CommandButton1_Click()

Dim objControl As Control 'Collection des contrôles de l'userform

If Selection.AutoFilter Then
Selection.AutoFilter Field:=4
Range("B10").End(xlDown).Offset(1, 0).Select
Else
Range("B10").End(xlDown).Offset(1, 0).Select
End If

'remplie les cellules à l'aide de l'userform
ActiveCell.Offset(0, 0).Value = dat.Text
ActiveCell.Offset(0, 3).Value = natre
ActiveCell.Offset(0, 4).Value = snatre
ActiveCell.Offset(0, 5).Value = type_
ActiveCell.Offset(0, 6).Value = txtdebit.Text
ActiveCell.Offset(0, 6).NumberFormat = "0.00"
ActiveCell.Offset(0, 7).Value = txtcredit.Text
ActiveCell.Offset(0, 7).NumberFormat = "0.00"
ActiveCell.Offset(0, 9).Value = txtchek
ActiveCell.Offset(0, 9).NumberFormat = "0.00"
ActiveCell.Offset(0, 10).Value = txtdiv

For Each objControl In UserForm1.Controls
If TypeOf objControl Is msforms.TextBox Then
objControl.Text = ""
End If
Next

End Sub

--------------------------------------------------------------------------------------

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mai 2010 à 12:16
3
cs_zeps2 Messages postés 61 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2011
17 mai 2010 à 16:36
En fin de compte la lenteur est du au nb de feuille (+de 10) et du fait que la liste déroulante des combobox fait référence à des plages ds une feuille.
En ne mettant que 2 feuilles, le remplissage est quasiment instantané, et en mettant le listing ds le code, ça va beaucoup plus vite également.

Zeps
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
6 mai 2010 à 14:14
Si la lenteur n'est du qu'au nb de lignes que tu as, tu peux désactiver le rafraichissement d'EXCEL et passer en mode de calcul manuel. Tu réactives le tout à la fin de ta procédure.

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

puis

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False


Molenn
0
cs_zeps2 Messages postés 61 Date d'inscription vendredi 9 novembre 2007 Statut Membre Dernière intervention 28 octobre 2011
9 mai 2010 à 11:04
Merci, tout le monde,

Je vais essayer de suivre ces pistes.

Zeps
0
Rejoignez-nous