Une macro qui s'arrête sans raison apparente

GeoTrouvePas

XLDnaute Impliqué
Bonjour tout le monde,

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 :
ToXLD.JPG
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 ?

Je vous remercie par avance,

Bonne journée
 
Dernière édition:

Modeste geedee

XLDnaute Barbatruc
Re : Une macro qui s'arrête sans raison apparente

Je précise au cas où que je n'ai implanté aucune gestion d'erreur
Vba est configuré en "arrêt sur toutes les erreurs

:rolleyes:
c'est tout a fait normal si Option Explicit est absent
car les variables utilisées ne sont pas définies

soit en local :
dim ClasseurSource as workbook
soit en public :
Public ClasseurSource as workbook
 

GeoTrouvePas

XLDnaute Impliqué
Re : Une macro qui s'arrête sans raison apparente

Bonjour Modeste et merci pour ta réponse.

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

GeoTrouvePas

XLDnaute Impliqué
Re : Une macro qui s'arrête sans raison apparente

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

Dranreb

XLDnaute Barbatruc
Re : Une macro qui s'arrête sans raison apparente

Au poste #1:
Vba est configuré en "arrêt sur toutes les erreurs".
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 ? …
 

Staple1600

XLDnaute Barbatruc
Re : Une macro qui s'arrête sans raison apparente

Bonsoir à tous

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)
 

GeoTrouvePas

XLDnaute Impliqué
Re : Une macro qui s'arrête sans raison apparente

@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.
 

Dranreb

XLDnaute Barbatruc
Re : Une macro qui s'arrête sans raison apparente

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
 

GeoTrouvePas

XLDnaute Impliqué
Re : Une macro qui s'arrête sans raison apparente

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 :D).

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 ! ^^).

Edit : avec le fichier joint c'est mieux.....
 

Pièces jointes

  • Reproduction feuille.xls
    32 KB · Affichages: 57
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Une macro qui s'arrête sans raison apparente

coder … l'anticipation d…es erreurs possibles
…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.
 

GeoTrouvePas

XLDnaute Impliqué
Re : Une macro qui s'arrête sans raison apparente

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".
 

GaetMario

XLDnaute Nouveau
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" !!!
 

Discussions similaires

Statistiques des forums

Discussions
314 496
Messages
2 110 236
Membres
110 708
dernier inscrit
novy16