Macro qui plante aléatoirement
maxkun
Messages postés
52
Date d'inscription
Statut
Membre
Dernière intervention
-
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
Patrice33740 Messages postés 8561 Date d'inscription Statut Membre Dernière intervention -
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.
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:
- Macro qui plante aléatoirement
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Plante - Guide
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Mon telephone plante que faire - Guide
6 réponses
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
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
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é ?
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é ?
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :
Quitte à rajouter 1-2 s après fermeture pour le laisser souffler un peu plus
eric
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
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.
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.
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 !
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 !
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.
« 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.
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.
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.