Temps d'affichage d'un userform

Bonjour le Forum;

Alors j(ai un projet de gestion de stock qui contient plusieurs feuille (entres,sortie ,inventaire....)

j'ai remplir un combobox avec touts les codes de la feuille inventaire plus de 1000 code

le problème c'est que lorsque je veux afficher le userform en clic sur le bouton d'éxecution (voir image 1 ci-dessous)pour effectuer une sortie de stock (voir image 2 ci-dessous) l'exécution prend plus de temps.

est ce qu'il y une méthode a faire pour diminuer l’exécution d'affichage de userform sans éliminer la liste des article dans le combobox

et merci d'avance

capturebouton sortie

Salut, tu pourrais nous fournir le fichier, ou alors a minima le code d'initialisation de l'Userform ?

Bibu

Bonjour

merci pour votre réactivité

alors j'ai essayer de joindre le fichier ms il est impossible de joindre

alors le code d’initialisation de userform est:

Private Sub UserForm_Initialize()
Application.ScreenUpdating = 0
Dim f As Worksheet
Dim j As Integer
Dim Lr As Integer

Set f = ThisWorkbook.Sheets("Liste-TS")
With f
Lr = f.Range("A" & Rows.Count).End(xlUp).Row
For j = 4 To Lr
TS.AddItem f.Range("A" & j).Value
Next j
End With
Set f = Nothing
TB_Magasin.Clear
AutoriserS UserForm2.TextBox1
AutoriserSTECH UserForm2.TextBox1
End Sub

Salut,

Pour être plus rapide lors de l'exécution d'un code, il faut minimiser le lien par rapport au tableau Excel en lui même.

Ainsi, au lieu de boucler sur les cellules et leur valeurs elles-mêmes, dans la ligne de code :

For j = 4 To Lr
    TS.AddItem f.Range("A" & j).Value
Next j

On va utiliser un tableau, comme ce qui suit :

Dim tabCode() As Variant
tabCode = f.Range("A4", "A" & Lr).Value

For j = LBound(tabCode, 1) To UBound(tabCode, 1)
    TS.AddItem tabCode(j, 1)
Next j

J'ai repris les mêmes notation que toi, normalement ça devrait être bon, tu as juste à copier coller le bout de code cité en premier par le second bout de code que je t'ai écrit.

PS : Tu peux aussi utiliser la bonne vieille méthode,

Application.ScreenUpdating = False

Ca permet de gagner un peu de temps si ton écran est beaucoup sollicité dans la macro. Il ne faut pas oublier de le repasser à "True" à la fin de ton programme.

Bibu

Alors j'ai oublier de te transférer le code fonction d'initialisation de uf-sorties complet dans le module

Sub Initialiser_UF_Sorties()
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Dim f As Worksheet
Dim I As Integer
With UF_Sorties
    .TB_Date.SelStart = 0
    .TB_bs.SelStart = 0
    .TB_Quantité.SelStart = 0
    .TB_Observations.SelStart = 0
    .TB_Magasin.SelStart = 0

    .TB_Date.SelLength = Len(.TB_Date.Value)
    .TB_bs.SelLength = Len(.TB_bs.Value)
    .TB_Quantité.SelLength = Len(.TB_Quantité.Value)
    .TB_Observations.SelLength = Len(.TB_Observations.Value)
    .TB_Magasin.SelLength = Len(.TB_Magasin.Value)
    '.CB_Technicien.RowSource = "Liste_Techniciens"
    Set f = ThisWorkbook.Sheets("Inventaire")
For I = 3 To Sheets("inventaire").Range("A" & Rows.Count).End(xlUp).Row
  .CB_Pièce = Sheets("inventaire").Range("A" & I)
  If .CB_Pièce.ListIndex = -1 Then .CB_Pièce.AddItem f.Range("A" & I).Value
  .CB_Pièce.ListIndex = 0
Next I
End With
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub

Ce que je t'ai fourni ne fonctionne pas ?

Bonjour,

La méthode .AddItem est lente. RowSource pose soucis !
Il faut privilégier la propriété .List beaucoup plus rapide.
Exemple :

ComboBox1.List=worksheets(1).Cells(1).resize(dernière_ligne10).value

Cdlt.

Bonjour a tt;

alors BibuNesco l’exécution est toujours lente.

Jean-Eric est ce que c'est possible de transférer le code ci-dessous par que tu propose

Set f = ThisWorkbook.Sheets("Inventaire")
For I = 3 To Sheets("inventaire").Range("A" & Rows.Count).End(xlUp).Row
  .CB_Pièce = Sheets("inventaire").Range("A" & I)
  If .CB_Pièce.ListIndex = -1 Then .CB_Pièce.AddItem f.Range("A" & I).Value
  .CB_Pièce.ListIndex = 0
Next I

Re,

Pas spécialiste des userforms, mais !...
La liste de la combobox doit afficher 10.000 valeurs...
Le résultat est immédiat.
Cdlt.

37issam.xlsm (100.37 Ko)
Private Sub UserForm_Initialize()
Dim f As Worksheet, lastrow As Long
    Set f = ThisWorkbook.Sheets("Inventaire")
    With f
        lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
        Me.ComboBox1.List = .Cells(3, 1).Resize(lastrow - 2).Value
    End With
End Sub

Merci Jean-Eric ca fonctionne c'est génial

merci aussi BibuNesco

Re,

Merci de ce retour.

Rechercher des sujets similaires à "temps affichage userform"