Erreur 91 aléatoire lors du lancement d'un userform

Bonjour,

J'utilise un bouton sur une feuille Excel lié à une macro qui lance un userform. Le code est seulement :

Sub XXX()

NomUserform.Show

End sub

En général cela fonctionne très bien. Cependant de temps en temps lorsque je lance cette macro l'erreur 91 "Variable objet ou variable de bloc With non définie" se produit. Le seul moyen de "résoudre" le problème, et que la macro refonctionne, est de redémarrer le fichier Excel mais c'est parfois insuffisant et je dois carrément redémarrer mon PC. Etant donné que le but de la macro est de gagner du temps, devoir redémarrer mon PC est embêtant.

Je ne comprends vraiment pas la cause de cette erreur et ça me prend la tête parce que j'ai vraiment l'impression que ça arrive de manière aléatoire.

SI quelqu'un à une réponse à me fournir cela m'aiderai énormément.

Merci d'avance.

Cordialement,

Jérémy G.

bonjour et...

Le problème pourrait-il être lié à l'appareil à partir duquel vous travaillez. Changez vous parfois de poste de travail ?

Quel est la raison d'être du UserForm ? Identification d'accès, Gestion de données...

Un fichier joint contenant toute le chaine de lancement du UserForm et son code VBA associé me semble le minimum pour vous fournir une aide pertinente.

Si le classeur comporte des données sensibles vous pouvez supprimer tout ce qui n'est pas utiles à l'exécution du UserForm.

A+

Merci pour ta réponse.

Non j'utilise toujours le même poste.

Le userform sert à collecter des données pour faire des calculs.

Voici la partie du code concerné :

13auto-tox.zip (1.42 Mo)

Bonsoir,

Le UserForm n'est absolument pas optimisé, Il faudrait commencer par le B+A = BA,

Déclaration des variables Dim A,B,C,D,E,F...Z as Booléan n'est pas valide en VBA : Seul Z est Boolean les autres sont Variant

C'est exactement le même problème avec tous les types : String, Long ou double, seul le dernier est typé les autres sont Variant.

+ de 1200 lignes de code c'est beaucoup avec VBA : Je considère habituellement que c'est une limite extrème à ne pas dépasser proscrire !

Au lieu de déclarer toutes les lettres de l'alphabet utilisez des variables Array ou utilisez DefType en tête de module

DefBool A-C, Y 'Toutes les variables dont le nom commenceront par A,B,C ou Y seront de type Boolean

Ensuite il faut bien sur les Déclarer Dim A1, A2...

Même chose pour les autres type

DefStr M,R-T, Z 'Toutes les variables dont le nom commenceront par M,R,S,T,Z seront des String

DefDbl

DefLng

DefInt

Au lieu de déclarer 50 contrôles Enabled = False dans la procédure Initialize déclarez les False à la construction ! (Dans la fenêtre des propriétés !)

Au lieu d'utiliser 50 lignes utilisez une boucle de 3 lignes (cela demande de nommer astucieusement vos contrôles au lieu de noms à rallonge préfixez vos Frames avec "fr" et vos TextBox avec "tb")

Ensuite :

For Each Control In Me.Controls
   If TypeOf ctrl Is MSForms.Frame And Left(Control.name, 2) = "fr" Then ctrl.Visible = False '(ou true)
Next

Et hop 50 lignes de gagnées... Pareil pour les TextBox

Essayez de factoriser votre code en sous-procédures utilisables plusieurs fois
Enfin quand vous lancez des traitements interminable, une boucle ± longue,ou un appel de fonction hypothétique

MaProcédureUnPeuLongue
DoEvents 'Donnera un peu de temps à votre proc pour souffler un peu...

Quand vous aurez fait ça revenez nous voir !

A+

Bonjour,

J'ai oublié un petit détail en matière d'optimisation :

Quand une frame est Enabled = False ou invisible tout les contrôles à l'intérieur sont également Enabled = False ou invisible :

Vous n'avez donc aucune raison de passer tous les contrôles en revue sauf si la Frame est Enabled = True mais que vous souhaitez que certain contrôle de soit pas disponibles.

En tout cas cela vous laisse encore une marge d'optimisation non négligeable.

Bonne journée

Merci pour ces pistes d'améliorations.

C'est la première fois que je fais du VBA et en plus j'ai récupéré ça d'un ancien camarade. Je savais que c'était pas super optimisé.

Je vais faire ça et je reviendrai vers vous

Merci

Bonne journée

Rechercher des sujets similaires à "erreur aleatoire lors lancement userform"