Userform trop lent
Résolu
Tourdumond
Messages postés
17
Statut
Membre
-
Tourdumond Messages postés 17 Statut Membre -
Tourdumond Messages postés 17 Statut Membre -
Boujour à tous et un grand merci, à tous ceux qui donnent de leur temps pour nous aider.
Je suis nouveau sur le forum, novice en VBA.
Je vous pose mon problème, j'ai un bouton recherche sur ma feuille excel, je click dessus, ce qui m'ouvre un userform, mais depuis quelque temps, il est très lent.
Est-ce-que mon code est trop lourd ou peut-être mal composé, ci dessous mon code
Merci à ceux qui voudront bien m'aider, car je suis un peu perdu.
Je suis nouveau sur le forum, novice en VBA.
Je vous pose mon problème, j'ai un bouton recherche sur ma feuille excel, je click dessus, ce qui m'ouvre un userform, mais depuis quelque temps, il est très lent.
Est-ce-que mon code est trop lourd ou peut-être mal composé, ci dessous mon code
Private Sub ListBoxLocataire_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ligSelect = ListBoxLocataire.Column(6, ListBoxLocataire.ListIndex)
usfAffichage.Show
End Sub
Private Sub RechercheC2_Change()
intTopIndex = Me.RechercheC2.TopIndex
' Rechercher les données en fonction des critères sélectionnés
Call Rechercher
End Sub
'------------------ComboBox MouseWheel----------------------------
Private Sub RechercheC1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Définir les noms des objet à l'ouverture de l'USF
' sont utilisés dans le code du hook
Set ObjUSF = Me: Set ObjList = Me.RechercheC1
'Store the first TopIndex Value
intTopIndex = Me.RechercheC1.TopIndex
'
Hook_Mouse
End Sub
' Check to see if focus is lost
Private Sub RechercheC1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UnHook_Mouse
End Sub
'------------------ComboBox MouseWheel----------------------------
Private Sub RechercheC2_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Définir les noms des objet à l'ouverture de l'USF
' sont utilisés dans le code du hook
Set ObjUSF = Me: Set ObjList = Me.RechercheC2
'Store the first TopIndex Value
intTopIndex = Me.RechercheC2.TopIndex
'
Hook_Mouse
End Sub
' Check to see if focus is lost
Private Sub RechercheC2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UnHook_Mouse
End Sub
Private Sub ListBoxLocataire_Change()
intTopIndex = Me.ListBoxLocataire.TopIndex
End Sub
Private Sub ListBoxLocataire_Exit(ByVal Cancel As MSForms.ReturnBoolean)
UnHook_Mouse
End Sub
Private Sub ListBoxLocataire_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
' Définir les noms des objet à l'ouverture de l'USF
' sont utilisés dans le code du hook
Set ObjUSF = Me: Set ObjList = Me.ListBoxLocataire
'Store the first TopIndex Value
intTopIndex = Me.ListBoxLocataire.TopIndex
'
Hook_Mouse
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
UnHook_Mouse
End Sub
Private Sub UserForm_Initialize()
' déclaration de la variable
Dim j As Integer
With Sheets("stock")
Application.ScreenUpdating = False
'récupérer les données de la colnne B
For j = 2 To Sheets("stock").Range("B" & .Rows.Count).End(xlUp).Row
RechercheC1 = Sheets("stock").Range("B" & j)
If .Range("B" & j) <> "" Then
'filtrer les doublons
If RechercheC1.ListIndex = -1 Then RechercheC1.AddItem Sheets("stock").Range("B" & j)
End If
Next j
End With
Dim i As Integer
With Sheets("stock")
Application.ScreenUpdating = False
'récupérer les données de la colnne D
For i = 2 To Sheets("stock").Range("D" & .Rows.Count).End(xlUp).Row
RechercheC2 = Sheets("stock").Range("D" & i)
If .Range("D" & i) <> "" Then
'filtrer les doublons
If RechercheC2.ListIndex = -1 Then RechercheC2.AddItem Sheets("stock").Range("D" & i)
End If
Next i
End With
End Sub
Private Sub RechercheC1_Change()
intTopIndex = Me.RechercheC1.TopIndex
' Rechercher les données en fonction des critères sélectionnés
Call Rechercher
End Sub
Private Sub Rechercher()
' Rechercher les données en fonction des critères 1 et 2
Dim rCel As Range
Dim lgLig As Long
Dim lgLigDeb As Long
Dim reference As String
Dim code As String
Application.ScreenUpdating = False
reference = "*"
If RechercheC1.Value <> "" Then reference = RechercheC1.Value
code = "*"
If RechercheC2.Value <> "" Then code = RechercheC2.Value
ListBoxLocataire.Clear
' Boucle de la 2me à la dernière ligne de la feuille Feuil1
For lgLigDeb = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Range("B" & lgLigDeb).Value Like reference And Range("D" & lgLigDeb).Value Like code Then
With ListBoxLocataire
.AddItem Range("A" & lgLigDeb).Value
.List(.ListCount - 1, 1) = Range("B" & lgLigDeb).Value
.List(.ListCount - 1, 2) = Range("C" & lgLigDeb).Value
.List(.ListCount - 1, 3) = Range("D" & lgLigDeb).Value
.List(.ListCount - 1, 4) = Range("E" & lgLigDeb).Value
.List(.ListCount - 1, 5) = Range("F" & lgLigDeb).Value
.List(.ListCount - 1, 6) = lgLigDeb
lgLig = lgLig + 1
End With
End If
Next lgLigDeb
End Sub
Merci à ceux qui voudront bien m'aider, car je suis un peu perdu.
A voir également:
- Userform trop lent
- Pc trop lent - Guide
- Mon mac est lent comment le nettoyer - Guide
- Mon pc est trop lent et se bloque - Guide
- Nettoyer ordinateur lent gratuit - Guide
- Telechargement lent ✓ - Forum Réseaux sociaux
2 réponses
Bonjour,
1- tu ne nous donnes pas tout le code (ou sont les procédures Hook_Mouse et UnHook_Mouse? ou est déclarée la variable intTopIndex, etc...)
2- Qu'est ce qui est lent? La recherche? L'ouverture de l'UserForm?
3- A quoi sert cet UserForm?
Pour pouvoir répondre à toutes ces questions, un petit fichier anonymisé ne serait pas de trop...
1- tu ne nous donnes pas tout le code (ou sont les procédures Hook_Mouse et UnHook_Mouse? ou est déclarée la variable intTopIndex, etc...)
2- Qu'est ce qui est lent? La recherche? L'ouverture de l'UserForm?
3- A quoi sert cet UserForm?
Pour pouvoir répondre à toutes ces questions, un petit fichier anonymisé ne serait pas de trop...
| Pour joindre un fichier sur les forums de ccm il faut : |
|---|
| > se rendre sur le site : https://www.cjoint.com/
> cliquer sur "Parcourir" > rechercher le fichier > cliquer sur "Ouvrir" > cliquer sur "Créer le lien Cjoint" > copier le lien > revenir ici le coller dans une réponse |
Bonjour,
Voilà le fichier en retour :
[Supprimé à la demande du demandeur pour info personnelle]
La méthode de remplissage des Combobox a été grandement améliorée en terme de vitesse grâce à des variables Objet dictionary.
De plus, j'ai modifié les événements déclencheurs de l'affichage dans la listbox en remplaçant RechercheC1_Change() et RechercheC2_Change() par RechercheC1_Click() et RechercheC2_Click().
J'ai laissé tout le reste.
Résultat, ton userform s'affiche en moins d'une seconde contre 43 avant...
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Voilà le fichier en retour :
[Supprimé à la demande du demandeur pour info personnelle]
La méthode de remplissage des Combobox a été grandement améliorée en terme de vitesse grâce à des variables Objet dictionary.
De plus, j'ai modifié les événements déclencheurs de l'affichage dans la listbox en remplaçant RechercheC1_Change() et RechercheC2_Change() par RechercheC1_Click() et RechercheC2_Click().
J'ai laissé tout le reste.
Résultat, ton userform s'affiche en moins d'une seconde contre 43 avant...
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Je vous mets le lien https://www.cjoint.com/c/FErpDsNxRs6 vous arriverez à mieux comprendre, car c'est vrai que je me suis mal exprimé, mais c'est la première que je post et je savais pas trop quoi mettre.
Cela va servir en logistique pour des entrées et sorties de palettes.
Et encore merci
As tu besoin du "scroll" dans tes combobox et / ou listbox???
oui, j'aurai bien voulu le gardé