Mon code est trop lent [Résolu]

Signaler
Messages postés
61
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2011
-
cs_zeps2
Messages postés
61
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2011
-
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

Messages postés
14620
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
19 janvier 2020
138
Messages postés
61
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2011

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
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
4
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
Messages postés
61
Date d'inscription
vendredi 9 novembre 2007
Statut
Membre
Dernière intervention
28 octobre 2011

Merci, tout le monde,

Je vais essayer de suivre ces pistes.

Zeps