Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 ouverture userform lente

juju91

XLDnaute Junior
Bonjour à tous,

je souhaiterais savoir si il existe une procédure pouvant accélère "l'ouverture" d'un unserform.
En fait j'ai un unserform dans lequel j'ai un grand nombre de textbox (plus de 350) qui doivent se "remplir" avec des infos qui sont dans une feuille.
Mais l'unserform met beaucoup de temps à apparaitre remplis, mais c'est peut-être normale vue le nombre d'informations traiter.
Je suis preneur de toutes suggestions .
Par avance merci
 

Pièces jointes

  • USERFORM TEST .xlsm
    263.1 KB · Affichages: 13

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Juju,
Sans porter attention à l'utilité d'un tel userform , on peut accélérer en minimisant au maximum les lectures feuille, en passant par un tableau VBA ( array )
Per ex, on peut remplacer :
VB:
PRIM1 = IIf(Sheets("SAISIE").Range("C9").Value = 0, "", (Sheets("SAISIE").Range("C9")))
PRIM2 = IIf(Sheets("SAISIE").Range("C10").Value = 0, "", (Sheets("SAISIE").Range("C10")))
PRIM3 = IIf(Sheets("SAISIE").Range("C11").Value = 0, "", (Sheets("SAISIE").Range("C11")))
PRIM4 = IIf(Sheets("SAISIE").Range("C12").Value = 0, "", (Sheets("SAISIE").Range("C12")))
PRIM5 = IIf(Sheets("SAISIE").Range("C13").Value = 0, "", (Sheets("SAISIE").Range("C13")))
PRIM6 = IIf(Sheets("SAISIE").Range("C14").Value = 0, "", (Sheets("SAISIE").Range("C14")))
PRIM7 = IIf(Sheets("SAISIE").Range("C15").Value = 0, "", (Sheets("SAISIE").Range("C15")))
PRIM8 = IIf(Sheets("SAISIE").Range("C16").Value = 0, "", (Sheets("SAISIE").Range("C16")))
PRIM9 = IIf(Sheets("SAISIE").Range("C17").Value = 0, "", (Sheets("SAISIE").Range("C17")))
PRIM10 = IIf(Sheets("SAISIE").Range("C18").Value = 0, "", (Sheets("SAISIE").Range("C18")))
PRIM11 = IIf(Sheets("SAISIE").Range("C19").Value = 0, "", (Sheets("SAISIE").Range("C19")))
par
Code:
tablo = Sheets("SAISIE").Range("C9:C19")    ' Remplissage array
For i = 1 To UBound(tablo)
    If tablo(i, 1) = 0 Then tablo(i, 1) = ""
Next i
PRIM1 = tablo(1, 1)
PRIM2 = tablo(2, 1)
PRIM3 = tablo(3, 1)
PRIM4 = tablo(4, 1)
PRIM5 = tablo(5, 1)
PRIM6 = tablo(6, 1)
PRIM7 = tablo(7, 1)
PRIM8 = tablo(8, 1)
PRIM9 = tablo(9, 1)
PRIM10 = tablo(10, 1)
PRIM11 = tablo(11, 1)

Juste sur cette partie, sur mon vieux PC et XL2007 je passe de 0.912s à 0.131s soit 7 fois plus rapide.
A noter qu'on peut faire un tableau plus grand mais ce sera plus complexe à gérer puisque les adresses ne se suivent pas. En travaillant par bloc, cela reste simple.

Ensuite il y a surement d'autres optimisations, mais celle ci est surement la plus rapide.
Par ex, dans la feuille en C9 remplacer :
Code:
='g:\Users\PC_PAPA\Downloads\[360 SAFRAN 22 10 31 V1 MASSY.xlsm]SAISIE HEBDO'!C13
par
Code:
=SI(='g:\Users\PC_PAPA\Downloads\[360 SAFRAN 22 10 31 V1 MASSY.xlsm]SAISIE HEBDO'!C13=0;"";='g:\Users\PC_PAPA\Downloads\[360 SAFRAN 22 10 31 V1 MASSY.xlsm]SAISIE HEBDO'!C13)
N'ayant plus de 0 la macro devient plus simple car cela supprime le For Next .... mais complexifie la feuille.
Rien n'est parfait.
 
Dernière édition:

bof

XLDnaute Occasionnel
Bonjour,
Il n'est pas possible de programmer un userForm de cette manière : Cela exige des notions de programmation avancée (hors de portée du débutant.
Déjà quand une de tes Sub ne tiens pas dans un écran c'est que tu es dans une mauvaise direction. Alors plusieurs centaines de lignes...
Oublie cette idée.
A+
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Bof,
Il n'est pas possible de programmer un userForm de cette manière
C'est un peu péremptoire, non ?
On peut discuter de l'utilité, de la convivialité, de la finalité mais pas de sa faisabilité.

@juju,
En parlant de finalité, pourriez vous nous expliquer à quoi, et à qui ça sert ?
Car on peut éventuellement remplacer ce userform par une feuille cachée, ce sera plus rapide.
 

juju91

XLDnaute Junior
Bonjour et merci du temps passé sur mon problème.
le fichier est utilisé par plusieurs personnes qui doivent renseigner( le plus simplement possible) les trois types d'information pour les lignes par jour... afin qu'un autre synthétise tous les besoins et en suite qu'il puisse redistribuer les besoins de chacun ( production alimentaire)
je suis preneur de toute solution sachant que je ne suis pas un pro de VBA
encore merci de votre aide
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Avec autant d'infos sur un userform, il est peut être préférable de passer par une feuille, c'est plus souple, on a plus d'espace et le remplissage est plus rapide.
Voir en PJ une maquette de faisabilité. La gestion des feuilles se fait uniquement par ces deux macros.
Dans la maquette il suffit d'appuyer sur les boutons orange pour voir l'effet.
VB:
Sub AFFICHER()
    Application.DisplayFullScreen = True
    Sheets("Userform").Visible = -1
    Sheets("Userform").Select
End Sub
Sub RETOUR()
    Application.DisplayFullScreen = False
    Sheets("Userform").Visible = 2
End Sub
 

Pièces jointes

  • USERFORM TEST V2.xlsm
    302.8 KB · Affichages: 10

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
J'ai oublié le plus important.
En utilisant une feuille plutôt qu'un userform, le remplissage est automatique puisqu'il s'appuie sur des fonctions du genre :
VB:
=SI(SAISIE!C9=0;"";SAISIE!C9)
et accessoirement on peut mettre les 4 restos sur la même feuille.
 

Pièces jointes

  • USERFORM TEST V3.xlsm
    310 KB · Affichages: 5

patricktoulon

XLDnaute Barbatruc
Bonjour
j'ai téléchargé le fichier en post 1
déja il manque des feuilles


ensuite dans le code je trouve ça
VB:
Private Sub CommandButton4_Click()
Private Sub MAS_Click()
Range("9:19,22:32,38:44,47:52,55:58,61:65,67:67,70:74,77:78,81:88,91:94,97:104" _
        ).Select
    Range("A97").Activate
    Selection.RowHeight = 0
    Range("A1").Select
    ActiveCell.FormulaR1C1 = ""
    Range("A2").Select
End Sub

et je pense que l'on va trouver encore d'autres problèmes de ce genre

perso je dirais que quand on a beaucoup de données comme ca on se sert pas d'un userform mais du tableau tout court
avec des listes de validation ou carrément le filtre pour atteindre la ligne
c'est moins compliqué, certainement plus perenne et plus facile a déboguer , modifier , ajouter d'autre fonctions

Bon courage à @sylvanu
 
Réactions: cp4

vgendron

XLDnaute Barbatruc
Hello à toutes et tous

Chez moi (Excel 2010) un message me dit carrément "Procédure trop longue"
il ne lance donc rien du tout
en plus de tous les avis déjà apportés, j'ajouterai que l'utilisation de tables structurées est indispensable==> Quoique... je disais ca à cause de la taille du used range qui couvre toute la feuille;.
mais c'est du à la coloration en noire de toute la feuille....j'ai jamais compris le besoin de colorer 95% d'une feuille qui ne servira jamais;. MAIS qui risque d'etre imprimée.. à part faire du brouillon ..
 
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…