Microsoft 365 ouverture userform lente

  • Initiateur de la discussion Initiateur de la discussion juju91
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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:
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+
 
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.
 
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
 
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

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

Bonjour
j'ai téléchargé le fichier en post 1
déja il manque des feuilles
demo.gif


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
 
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:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour