Actualiser les TextBox à Null - Code très lent

Bonjour les amis :)

S'il vous plait j'ai un problème sur un code qui mets 20 secondes pour s'exécuter.

La partie qui bloque est celle là (Quand il y a Call abcd dans mon code). En fait quand j'enlève Call abcd, ça s'exécute directement !

Private Sub abcd()

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Application.EnableEvents = False

ComboBox1 = Null
TextBox3 = Null
TextBox19 = Null
TextBox4 = Null
TextBox5 = Null
TextBox6 = Null
TextBox7 = Null
ComboBox2 = Null
ComboBox3 = Null
ComboBox4 = Null
TextBox10 = Null
TextBox11 = Null
TextBox12 = Null
TextBox13 = Null
TextBox14 = Null
TextBox15 = Null
TextBox18 = Null
TextBox16 = Null
TextBox17 = Null

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub

J'ai essayé de remplacer Null par " " mais c'est la m^^eme chose (ou presque" ...)

Donc concrètement c'est un problème de réactualisation du userform ... Sauf que il y a un TextBox2 qui doit rester dans sa valeur et ne pas se remettre à Null car il indique une date qui fait le lien avec une ListView du userform.

Pourriez-vous m'aider svp ?

merci

Bonjour cameleon1881,

Je ne sais pas si cela peut avoir une influence sur la vitesse d’exécution ...

Mais je crois qu’il est préférable d’utiliser : TextBox3 = VbNullString

ric

Bonjour cameleon1881,

Aussi pour le combobox ...

Si tu veux conserver la liste : combobox.listindex = -1

Si tu ne veux pas conserver la liste : combobox.clear

ric

Bonjour Ric :)

merci pour être au secours

donc pour tous les contrôles là je les laisse à Null ? Ou " " ? Ou dois les remplacer par autre chose ?

ce que tu viens de me proposer n'est pas assez clair en fait ...

Me

j'ai envoyé mon message avant de lire ton deuxième message en fait ...

je vais bricoler ça et je reviens vers toi Ric

merci

Bonsoir

Votre code simplement comme ceci

Private Sub abcd()
Dim c As Control
For Each c In me.Controls
    Select Case TypeName(c)
        Case "TextBox"
            If c.Name <> "Textbox2" Then c.Value = ""
        Case "ComboBox"
            c.Value = ""
            c.ListIndex = -1
    End Select
Next c
End Sub

Le code doit être placé dans l'userform bien entendu

Les autres instructions ne servent à rien
Vous pouvez aussi remplacer les "" par Vbnullstring mais bon cela fonctionnera aussi avec les ""

Cordialement

Bonjour cameleon1881,

Tout ce qui contient du texte ... VbNullString

Les optionbutton = false

Les checkbox.value = false

ric

Bonjour Dan et Ric,

Alors résultat après mise d'un compteur :

proposition de Dan = 8 secondes

celle de Ric = 7 secondes ...

Mais merci en tout cas car ça a considérablement diminué le temps d'attente ... c'était 20 secondes !

S'il y a mieux je suis preneur :)

Oops ! j'ai une remarque pour Dan : même le TextBox2 s'est remis à Null avec ton code

Et un autre problème : la durée d'actualisation de la ListView en fonction du TextBox2 = 14 secondes !

Ne serait il pas plus rapide si je mets une ListBox au lieu d'une listView ?

Me

j'ai une remarque pour Dan : même le TextBox2 s'est remis à Null avec ton code

Dans mon code, il faut mettre le B en majuscule --> TextBox2

Pour la lenteur, votre souci est que vous avez d'autres codes (exemple : Change) qui s'exécutent lorsque vous utiliser le code abcd

Sans le fichier ce n'est pas possible de voir

14cameleontestv1.xlsm (29.05 Ko)

Il n'y a pas de souci dans ce fichier.
Par contre votre 3 lignes "applications......" au début et à la fin de chacun de vos codes ne servent strictement à rien dans votre cas. Donc supprimez-les
Ensuite votre code Ajouter comme ceci

Private Sub CommandButton1_Click()
Dim Lig As Integer

With Sheets("MOUVEMENTS")
    Lig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Cells(Lig, 1) = ComboBox1.Value
    .Cells(Lig, 2) = CDate(TextBox2.Value)
    .Cells(Lig, 3) = TextBox3.Value
    .Cells(Lig, 4) = TextBox4.Value
    .Cells(Lig, 5) = TextBox5.Value
    .Cells(Lig, 6) = TextBox6.Value
    .Cells(Lig, 7) = ComboBox2.Value
    .Cells(Lig, 8) = TextBox7.Value
    .Cells(Lig, 9) = TextBox8.Value
End With
Call actualiser
Call mouvements
End sub

Faites un test en suivant ce que je vous ai écrit au préalable

Cordialement

Bonjour Dan j'espère que tu vas bien :)

Voici en PJ le meme fichier là où j'ai inclus ton code ... mais chez moi il met parfois 20 secondes ou plus pour s'exécuter.

...

19cameleontestv1.xlsm (31.93 Ko)

Là j'ai tant testé et je peux confirmer que c'est l'actualisation à Null des cellules qui prend entre 4 et 5 secondes ...

Y a pas moyen de faire autrement cette actualisation des cellules lorsque l'on souhaite passer au prochain enregistrement sur le userform stp ?

Me

J'ai une première question, est-ce que le fichier que vous mettez ici est votre bon fichier car au départ il n'y a rien dans vos deux combobox.

Si je teste sur le fichier placé, j'obtiens 0 seconde lorsque je clique sur le bouton ajouter
Que faites vous exactement ?

Y a pas moyen de faire autrement cette actualisation des cellules lorsque l'on souhaite passer au prochain enregistrement sur le userform stp ?

Non c'est la bonne méthode. Le souci est ailleurs

Le userform que j'utilise dans mon application originale a la même spécificité et code que celui du fichier test que j'ai envoyé... mais il fait 9 Mo de taille ! C'est énorme

Mais sur le même fichier que j'ai envoyé, ça met 10 seconde lorsque le fichier original est ouvert en même temps. Lorsque je le ferme OUI ça prends 0 secondes.

donc le problème provient de la taille de mon application originale. Il faudra que je cherche sur Google comment compresser/réduire la taille de ce fichier peut être...

Me

9Mo !, c'est probablement votre souci.

Les questions à savoir :
- Combien de feuilles avez-vous
- Combien de données par feuille avez-vous
- Avez-vous beaucoup de formules et si oui, lesquelles ? (attention avec les formules matricielles type sommeprod par exemple)

Mais sur le même fichier que j'ai envoyé, ça met 10 seconde lorsque le fichier original est ouvert en même temps. Lorsque je le ferme OUI ça prends 0 secondes.

Oui parce qu'il faut faire gaffe lorsque vous ne précisez pas quel est le workbook dans lequel il faut utiliser le code. Quelques fois, j'ai déjà remarqué que excel utilise le workbook actif.

In fine, voir votre vrai fichier sans données confidentielles aiderait....

c'est un grand problème... il faudra que je change remodele mon fichier en remplaçant les formules par du code vba ... ça va être pénible trop pénible

Rechercher des sujets similaires à "actualiser textbox null code tres lent"