Macro qui plante aléatoirement

Fermé
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 - 30 oct. 2020 à 10:12
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 2 nov. 2020 à 11:42
Bonjour,

Je me permets de poster car j'ai un soucis que je n'arrive pas à résoudre.

Pour résumer, j'ai une macro qui va ouvrir plusieurs fichiers excel, récupérer les données, faire des calculs, et mettre les résultats dans mon fichier où se trouve la macro.

Quand je fais tourner la macro sur mon PC (Excel 2013), aucun soucis, tout se passe bien.

Quand mon collègue fait tourner la macro sur son poste (Excel 365), cette dernière plante à un moment donné, et excel se ferme, sans message d'erreur, donc impossible de savoir où la macro plante exactement et impossible de savoir quelle est l'erreur.

Du coup, nous avons testé de mettre un point d'arrêt à un endroit (car je sais que la macro ne dépasse pas un certains stade), et quand on met un point d’arrêt, la macro se stoppe correctement, et quand on refait rependre la macro (sans rien faire d'autre), cette dernière se déroule correctement (en général, pas tout le temps). Du coup on s'est dit qu'il fallait peut-être une tempo dans le code, nous avons donc mis une pause de 20 secondes au même endroit que le point d'arrêt, mais cela ne fonctionne pas. J'avoue ne pas comprendre ce plantage.

Je ne peux malheureusement pas poster le code car confidentiel et bien trop long pour le coup, mais je pense à un problème de compatibilité entre les versions excel.

Auriez-vous des idées ?

Cordialement.



Configuration: Windows / Chrome 84.0.4147.105
A voir également:

6 réponses

Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
Modifié le 30 oct. 2020 à 11:08
Bonjour,

Sans voir le code difficile de dire ou est le loup
déjà en début de code place une gestion d'erreur pour éviter le plantage

On Error Resume Next


0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 4
Modifié le 30 oct. 2020 à 11:11
Oui je conçois que sans le code c'est assez compliqué, mais bon vu la longueur de celui-ci, ça n'aurait pas été simple non plus :/

J'ai pensé à mettre cette ligne, mais c'est vrai que c'est à double tranchant, si on a une "vraie" erreur, on risque de passer à coté. Mais je me demande si cela fonctionnerai vu qu'excel se ferme brutalement.

Cela ne pourrait-il pas venir d'un soucis de compatibilité ?
0
Mike-31 Messages postés 18346 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 13 novembre 2024 5 104
30 oct. 2020 à 11:24
Re,

possible mais si le code est accepté par intermittence je pense plutôt à une erreur

de toute façon la gestion d'erreur empêche uniquement le plantage d'Excel, ça vaut le cout de tester
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 4
30 oct. 2020 à 11:27
Je vais tester ça, et je vous retiens au courant ;)

Merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
30 oct. 2020 à 12:23
Bonjour à tous,

perso, je pense que mettre la poussière sous le tapis est rarement une bonne solution.
Sans mettre tout ton code, tu peux déjà mettre juste la boucle qui ouvre tes fichiers.
Ca nous inspirera peut-être pour proposer différente choses à tester.

En particulier, comme tu dis faire des calculs, une boucle qui attend leur fin avant de passer au suivant :
    Do Until Application.CalculationState = xlDone
        DoEvents
    Loop

Quitte à rajouter 1-2 s après fermeture pour le laisser souffler un peu plus
eric
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 4
2 nov. 2020 à 10:03
Bonjour Eric,

J'ai testé la solution de Mike ce matin, et cela semble avoir fonctionné, à voir sur la durée.

Je vais donc laissé comme ça pour le moment, j'ai mis la ligne "on error resume next" sur des fonctions qui ne plante jamais donc je ne prends pas trop de risque de les laisser.

Je vous refait signe en fin de semaine, pour voir si tout est ok.

Cordialement.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779 > maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020
Modifié le 2 nov. 2020 à 11:47
Si tu laisses les On Error Resume Next, ça plantera pas mais ça risque de ne pas fonctionner.
Dans un code définitif il ne doit pas y avoir d'erreur ignorée !
Pour déterminer où l'erreur se produit, il est préférable de mettre un On Error GoTo avec un Stop plutôt qu'un Resume Next qui continue l'exécution malgré l'erreur !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié le 30 oct. 2020 à 13:08
Bonjour le Fil

« Je ne peux malheureusement pas poster le code car [...] et bien trop long pour le coup, »

Si le code est trop long pour être posté c'est un mauvais code.
Dans un code bien architecturé aucune procédure ou fonction ne doit excéder 100 lignes (très exceptionnellement 200 lignes) et dans ce cas il est relativement simple de localiser la source du problème.
0
maxkun Messages postés 52 Date d'inscription mercredi 2 décembre 2009 Statut Membre Dernière intervention 2 novembre 2020 4
2 nov. 2020 à 10:05
Bonjour Patrice,

Alors oui il est loin d’être optimisé je le conçois, après mes fonctions en soit ne sont pas spécialement longues, c'est quand mets tout bout à bout que ça commence à chiffrer.

Du coup comme dis plus haut, je laisse le sujet ouvert quelques jours pour voir si la méthode de Mike fonctionne.

Merci pour votre retour ;)

Cordialement.
0