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 !
Depuis quelques temps, j'ai des macros qui stoppent leur exécution sans aucune raison apparente (ni même aucun bug).
Cela se manifeste par exemple par l'apparition de cette fenêtre au beau milieu de l'exécution d'une macro :
Il n'y a qu'à cliquer sur "Continuer" (parfois plusieurs fois d'affilé) pour que l'exécution se poursuive mais c'est tout de même gênant, surtout quand le fichier est destiné à quelqu'un d'autre. En plus ce message s'affiche généralement sur des lignes où il ne peut quasiment pas y avoir d'erreur (End if, Wend, End Select...)
Aujourd'hui cela s'est manifesté aussi sous la forme "je m'arrête quand je veux !" ^^
Ainsi avec le code suivant :
Code:
Sub MaJ()
MsgBox "Test1"
Set ClasseurSource = Workbooks.Open(Filename:=ThisWorkbook.Sheets("Administration").Range("CheminEtape1"), IgnoreReadOnlyRecommended:=True, Notify:=False, AddToMru:=False)
MsgBox "Test2"
....
End sub
le Msgbox "Test1" s'affiche correctement, le fichier est bien ouvert mais ma macro s'arrête sans afficher le Msgbox "Test2". Et bien sûr, je n'ai ni message d'erreur ni autre chose.
Je précise au cas où que je n'ai implanté aucune gestion d'erreur,, aucun point d'arrêt ou quoi que se soit. Vba est configuré en "arrêt sur toutes les erreurs".
Est ce qu'il y a quelque chose que je n'aurai pas saisi ou est ce que je suis bon pour faire réinstaller mon pack Office ?
Désolé j'ai un peu trop épuré mon exemple. Mes déclarations de variables sont bien faites dans la réalité et j'utilise toujours Option explicit.
Sauf erreur de ma part, j'aurai un message d'erreur explicite si ça venait d'un problème de déclaration.
Or ma macro s'arrête sans rien dire ou en affichant une boite de dialogue qui me propose simplement de continuer....
Désolé François, nos messages se sont croisés. Merci pour se lien.
Si je comprends bien, mon fichier pourrait avoir besoin d'un grand nettoyage, voir même d'un clonage.
Bon dans un sens ça me rassure, ça veut dire que je ne suis pas encore devenu fou et que mon code était bien correct.
Je ne sais pas ce qu'il en ai mais j'espère que les versions récentes d'office crashent un peu moins les fichiers.
Je vous remercie pour votre aide et je vous souhaite une bonne fin de journée à tous...
C'est pas bien, ça, quand même. Lors d'une erreur pourtant bien gérée, voire neutralisée, il va s'arrêter, mais pas dans un module de classe, alors, mais après invocation d'une méthode, comme Range ? …
Ce petit souci m'arrive aussi (depuis que je suis sous XL 2013) et ce de manière aléatoire et ce n'est pas du à un classeur en particulier.
Et une fois ce message apparu, plus aucun code VBA ne fonctionnera, même un simple
Sub a()
MsgBox Date
End Sub
Et l'erreur perdure, même si on ferme Excel.
Voici le biais que j'utilise:
Fermer Excel, vider le %temp% (parfois j'ai aussi besoin de fermer ma session)
Sinon, en cherchant je viens de tomber sur ceci (voir cette astuce fonctionne)
@Dranreb : Je suis désolé mais j'ai beaucoup de mal à comprendre le sens de ton message
@Staple : Merci de me rassurer sur les améliorations apportées par les dernières versions d'Office.....
Ça correspond exactement au problème que j'ai eu, des plantages aléatoires sur des macros ultra basiques.
Bonjour.
Je voulais juste suggérer de laisser sur "Arrêt sur les les erreurs non gérées" seulement.
Mais apparemment ça n'aurais rien changé, même si un jour où l'autre ça va s'arrêter sur une erreur même après On Error Resume Next
Bon c'est bien ce que j'avais compris.
C'est peut être un peu bête de ma part mais j'ai pris l'habitude de ne (presque) jamais utiliser de gestion d'erreur.
C'est pas vraiment une méthode que je préconise mais je me la suis imposée afin de progresser dans ma façon de coder notamment sur l'anticipation de toutes les erreurs possibles. Et puis vu que je suis le principal utilisateur de mes macros, l'apparition d'un message d'erreur n'est pas trop gênante.
Bon à part ça, et pour palier au problème qui a fait l'objet de ce post, je me suis créé une macro reproduisant à l'identique la feuille active vers un nouveau classeur, histoire de repartir sur un fichier sain. J'ai décidé de ne pas utiliser le copier/coller histoire de ne garder que les éléments qui m'intéressent (et puis c'était quand même plus drôle à coder comme ça 😀).
Cette reproduction couvre :
- Les dimensions de chaque ligne et chaque colonne
- Les cellules fusionnées
- Les caractéristiques principales de police
- Les alignements verticaux et horizontaux, renvoi à la ligne, indentation
- Le format
- Les bordures
- Une grosse partie des mises en formes conditionnelles
- Les éventuelles images insérées sur la feuille
J'ai fait l'impasse sur certaines choses que je n'utilise pas. Attention : J'ai pour habitude de masquer les lignes inutilisées en dessous et les colonnes inutilisées à droite de mes tableaux. Faites de même si vous ne voulez pas que l'exécution de la macro s'éternise.
Au cas où ça vous serez utile (ou simplement pour les curieux), je vous livre cette macro telle que je l'utilise sous forme d'un nouveau menu "GeoTrouvePas" dans votre barre (n'ayez pas peur, il disparaîtra à la fermeture ! ^^).
…n'a selon moi d'intérêt que dans les cas où cela simplifie ce code, sa clarté notamment. C'est à dire plutôt assez rarement. Et surtout cela fait plus d'instructions exécutées, puisque la détection interne d'une erreur d'exécution possible n'en est pas pour autant enlevée. Donc puisqu'elle est là, autant s'en servir.
Désolé je n'avais pas vu que les fichiers xla ne passaient pas en PJ..... Post précédent modifié.
@Dranreb :
Je suis d'accord avec toi pour ce qui est de la clarté du code.
Personnellement, je n'aime pas tout ce qui consiste à sauter des lignes ou carrément des blocs de code. J'évite donc les On error (Resume ou Goto), les Goto etc... A titre d'exemple, dans le fichier que j'ai joint dans mon post précédent, je préfère largement faire :
Code:
Sub SupprimerMenu
For Each Barre In Application.CommandBars("Worksheet Menu Bar").Controls
If Barre.Caption = "GeoTrouvePas" Then Barre.Delete
Next
End sub
plutôt que :
Code:
Sub SupprimerMenu
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("GeoTrouvePas").Delete
End Sub
Bon sur ce coup là, il faut avouer qu'en terme de temps d'exécution, l'avantage est la gestion d'erreur mais la différence est infinitésimale. Je ne dis pas que je n'emploierai pas une gestion d'erreur si le gain était réellement intéressant. Je trouve juste ça plus "propre" et plus limpide. Mais ça, on va dire que c'est juste une question de "goût".
Bonne journée et pardon de ressortir un vieux sujet ;-)
Sinon, en cherchant je viens de tomber sur ceci (voir cette astuce fonctionne)
[/QUOTE]
Ce lien est très approprié dans mon cas aussi par le "Application.EnableCancelKey = xlDisabled" mais du coup il ne permet plus l'arrêt des boucles infinie par Ctrl+"Arrêt défil" !!!
- 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