Bonjour
Comment à l'ouverture d'un fichier Excel, programmer en VBA l'option ['Arrêt sur les erreurs non gérées' du menu Options/Général ?
bonne journée
marc
-----
Bonjour
Comment à l'ouverture d'un fichier Excel, programmer en VBA l'option ['Arrêt sur les erreurs non gérées' du menu Options/Général ?
bonne journée
marc
Hello,
je ne trouve pas cette option sur ma version d'Excel 2007, mais il suffit d'enregistrer une macro lorsque tu actives l'option voulue.
Ca génére le code, par exemple : Application.ErrorCheckingOptio ns.BackgroundChecking = True
A mettre dans une routine Private Sub Workbook_Open(), sous l'objet ThisWorkbook (dans la hiérarchie des Microsoft Excel Object, quand tu es en mode développeur)
pour que ça soit appelé à l'ouverture du classeur.
Re bonjour
Merci pour ta réponse (celle de Stan-94). Malheureusement sous la version Excel 2000, cela ne fonctionne pas !
bonne soirée
Bonjour ou Bonsoir ignorantissime, Stan_94, et à ceux qui passeront par-là,
Voici plus de dix ans que je programme sous VBA et participe activement à autres forums spécialisés dans le domaine,
mais je n'ai jamais entendu parler de cette procédure!
Ou alors Bill est passé par là et a corrigé mes erreurs discrètement sans me planter.
J'aimerais en savoir un peu plus, et le pourquoi de cette nécessité rencontrée.
Merci,
Bonjour IFFIC-56
Nécessité. Il s'agit d'intercepter les éventuelles erreurs, notamment lors de la saisie des nombres décimaux ( la virgule et non le point, un chiffre et non un signe de ponctuation), tout cela dans un UserForm et non dans des cellules de feuille. Si l'option 'arrêt sur toutes les erreurs' est cochée, alors les routines d'interceptions ne fonctionnent pas.
Je ne sais que décocher l'option manuellement et non en VBA lors de l'ouverture du fichier.
bonne soirée
Je pense qu'il faut laisser faire les plantages et les réparer. (Ceux-ci aident beaucoup)
A noter que dans les essais, l'on peut écrire un "Stop" qui va permettre en baladant la souris dans le VbaProject de repérer les variables vides ou mal initialisées.
Avec un Classeur ayant trop grosses erreurs, il faut ajouter dans l'Open:
Application.EnableEvents = False
(Via copie, et ouverture sans activer les modifications. Version 2010. Pour antérieures, je ne sais plus)
Pour ma part, j'ai sous le coude un classeur "Mécano" qui a ce code:
Private Sub CommandButton1_Click()
Application.EnableEvents = False
Workbooks.Open ThisWorkbook.Path & "\xxxxx.xlsm" ' ou autre extension via une boite de dialogue d'ouverture de Fichier.
'Application.EnableEvents = True
End Sub
Après, je le cuisine.
En règle générales: Ne jamais utiliser le "Private Sub Workbook_Open()"
J'ai, pour ma part, toujours refusé d'aider un demandeur par ailleurs, quand il y avait ce truc dans son exemple,
ainsi que des protections par code de cellules ou feuilles + masquées que les débutants aiment bien pour faire pro.
Ceci dit, je suis totalement disposé à t'aider pour créer les barrières de saisie conformes dans un USF.
Il doit s'agir dans ton cas de remplissage de TextBox. Non?
J'aimerai bien savoir pourquoi ça ? Problème de sécurité ? De perf ?
Personnellement, je ne l'ai utilisé qu'une fois pour afficher un userform au démarrage d'un fichier Excel, mais il y a peut-être un autre moyen de le faire...
Désolé de parasiter le post de ignorantissime
Bonjour Stan_94J et à tous,
Problème de sécurité?
Oui! C'est pourquoi je n'active jamais un classeur qui m'est soumis et fait immédiatement "Alt+F11" pour le vérifier et l'effacer éventuellement dans ThisWorkbook. Mais bien souvent: Direct Poubelle!
Je passe les moyens pour contourner l'alerte, mais je dirai seulement qu'il facile de récupérer le chemin du bureau de l'utilisateur et de "Kill" sont contenu.
(Cf: La méthode pour y créer automatiquement un raccourci de Fichier). Voire même se faire envoyer par mail certains documents.
Ayant affaire à de petits malins par ailleurs, je n'ouvre leurs Fichiers qu'avec mon Classeur "Mécano" dont j'ai parlé ci-dessus.
Performance?
J'ai utilisé le "Workbook_Open" sur l'application que j'ai en chantier actuellement + Application.Visible = False" + Le plein écran de l'USF convenant à la présentation finale souhaitée.
Sauf que j'avais oublié de mettre les deux versions 32 et 64 bits dans ma fonction masquant la bande bleue. L'utilisatrice n'avait pas la même que moi.
Avec ce fichu "Workbook_Open", j'ai été obligé de copier, coller ailleurs et interdire la mise à jour.
Si j'ai dit de ne jamais l'utiliser, c'est surtout lorsque l'on est encore à peaufiner son application.
Autre conseil facilitant la construction:
1) Utiliser sur la feuille un bouton "Contrôle ActiveX" dont la macro sera dans le VbaProject et non "Formulaire" moins facilement gérable.
2) Dans Private Sub CommandButton1_Click() écrire "UserForm1.Show vbModeless" au lieu de simplement "UserForm1.Show".
Cela va permettre d'avoir accès aux feuilles du classeur, à la barre d'outils du bureau... Et c. Ce qui est souvent confortable.
Attention cependant, il est impossible d'ouvrir un second usf de cette façon si le premier est resté en mode Modal.
Quant à parasiter le post d'ignorantissime, je ne le pense pas. Encore faudrait-il qu'il se manifeste.
Amicalement,
IFFIC
Merci pour ces infos !
Parce que même si c'est par loisir, je trouve bien de toujours essayer de coder de la meilleur façon possible...
Bonjour
Pas de problème pour l'utilisation de mon post.
Vos remarques sont pertinentes.
Ceci dit, j'aimerais toujours connaître le moyen par VBA de programmer cet option 'arrêt sur toutes les erreurs ou 'celles non gérées !
bonne journée pluvieuse (en tout cas en Bourgogne)
marc
Pour ma pomme, il en est de même:
Cela n'a jamais été qu'un simple loisir hors de mes activités professionnelles bien loin de la prog.
Sauf que dans mon boulot, nombre de mes bidouilles m'ont bien aidé, ainsi que d'autres.
Avant d'être en retraite, je priais les Dieux que cette passion perdure.... Ouf! J'ai été exaucé.
J'ai toujours lutté contre des travers dommageables qu'ont beaucoup de débutants,
comme rebaptiser les contrôles d'un USF avec des noms du genre "Bouton_Imprimer" qui n'apporte rien car il suffit de le repérer dans la macro avec un Rem disant "Bouton d'impression".
D'autant que lorsque l'on arrive à la nécessité de les grouper dans un module de classe ou de faire une boucle sur ceux-ci, cela ne devient pas de la tarte!
Il est va de même pour les variables où je vois souvent des "StringWendsupclic" pour faire pro.
J'aime bien être dire "TRUC", "MACHIN" ou "BIDULE" pour les volatiles, ainsi que "REPERTOIRE_CHOISI" au lieu de "MyString", "CE_JOUR" au lieu de "MyDate" ... Et c.
Au diable de passer pour un plouc, je préfère m'y retrouver facilement, et être compris par ceux qui pompent mes codes.
Je me suis attiré les foudres de beaucoup de mecs balaises dans le domaine en réduisant leurs procédures de 100 lignes en une vingtaine.
Ce n'est que forts de leurs habitudes, ils sont restés scotchés à leurs premières études sous Dos. (Pour ma part, j'aime être fainéant)
Il y a aussi le fameux "Option Explicit" sensé éviter une erreur de nom de variable qui est totalement inutile et surtout très sclérosant. On le saura de toute façon lors des tests!
De définir ses variables est rarement utile (Bien qu'impératif dans certains cas), mais dérange sérieusement en cas de mauvais choix.
Elles seront systématiquement de type "Variant" qui couvre un maximum de besoins.
Nos ordis ont à ce jour de telles capacités de mémoire qu'il est rare d'avoir à économiser les ressources.
Les "Redim" datent aujourd'hui de l'ancien temps, car le temps gagné devient de l'ordre du dixième de seconde dans l'exécution.J'ai plein d'exemples à ce sujet.
Un conseil que je pourrais donner à un débutant est d'apprendre très vite la création dynamique d'un USF avec ses contrôles, ainsi que construire et gérer les Modules de Classe.
Il pourra faire ensuite ce qu'il veut sur un Post-it au lieu d'un format A4, les doigts dans le nez.
C'est comme les maths; Ce n'est jamais si compliqué que lorsque l'on ne s'y est pas penché.
IFFIC disposé à fournir un tuto relatif aux deux derniers points ci-dessus à qui le demandera, (Poliment, il se doit)
Amicalement,
Bonjour ignorantissime
Je dois avouer que je ne comprends pas trop bien ton besoin.
Cependant, il me vient à l'esprit ce qui pourrait être une solution hors que de faire du pas à pas dans le code:
Tu mets dans ta procédure sujette à erreur:
On Error GoTo PROBLEME
ActiveWorkbook.FollowHyperlink Me.Image1.Tag
Exit Sub
PROBLEME:
MsgBox " Ça coince ici:"
MsgBox MA_VARIABLE1
MsgBox MA_VARIABLE2
MsgBox Me.Label1.Caption
MsgBox Me.Control("MACHIN" & x) .tag
Enfin ce que tu veux.
Tu peux aussi regarder de ce côté avec un bouton quand clic: Application.ODBCErrors....
https://msdn.microsoft.com/fr-fr/lib.../ff197725.aspx
Amicalement en te souhaitant d'enfin trouver.