IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Gestion d'erreur, équivalent du ctrl+z [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut Gestion d'erreur, équivalent du ctrl+z
    Bonjour,

    Je fais fichiers contenant des maccros qui sont ensuite utilisés par des utilisateurs plus ou moins compétant mais toujours créatif dès qu'il s'agit de générer des erreurs auxquelles je n'ai pas pensé.
    Pour éviter que ces erreurs ne rendent le fichier inutiliable par la suite et comme le ctrl+z ne marche pas pour les maccros j'aimerais en cas d'erreur charger la dernière sauvegarde du fichier? (sachant que je le sauvegarde en début de maccro) Y a-t-il une commande pour le faire?
    J'ai essayé un moyen détourné en fermant le fichier sans sauvegarde et en le réouvrant mais quand le fichier se ferme la maccro s'arrête.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Oui c'est logique …

    L'astuce pourrait (note bien le conditionnel) être de rouvrir le classeur via la méthode OnTime
    juste avant de fermer le classeur avec un délai de deux secondes. Par contre à toi de t'organiser pour la reprise du code …

    Autre possibilité ne requérant pas la fermeture du classeur selon la taille des données est de les sauvegarder
    soit en mémoire dans une variable tableau soit dans un fichier texte
    soit pourquoi pas dans un classeur backup facilitant les copier / coller …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Bonjour !
    Oui c'est logique …
    J'y croyais moyennement mais j'avais pas d'autres idée
    L'astuce pourrait (note bien le conditionnel) de rouvrir le classeur via la méthode OnTime
    juste avant de fermer le classeur avec un délai de deux secondes. Par contre à toi de t'organiser pour la reprise du code …
    Merci. J'essayerais demain, pas de problème pour la reprise du code puisque je veux qu'il s'arrête.

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Si tu ne veux rien déclencher via OnTime, il faut créer une procédure bidon sans ligne de code,
    juste les lignes Sub Bidon() & End Sub.

    Par contre si le classeur comporte un évènement Workbook_Open, il se lancera juste après la procédure bidon …

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    ThisWorkbook.Save
    Application.OnTime Now + TimeValue("00:00:02"), "MaMacro"
    ThisWorkbook.Close
    End Sub
     
    Sub MaMacro()
    Workbooks.Open Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Name
    End Sub
    Ca marche niquel. Tu peux enlever le conditionnel de ton post précédent

    Merci beaucoup

  6. #6
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Halaster peux-tu nous expliquer en détail le fonctionnement, c'est intéressant comme astuce.

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Citation Envoyé par Kiouane Voir le message
    Halaster peux-tu nous expliquer en détail le fonctionnement, c'est intéressant comme astuce.
    Tu n'es pas tout seul dans ta tête?

    Comme dis dans le titre je voulais essayer de faire l'équivalent de crtl-z (retour en arrière) mais pour les maccro.
    L'idée c'est de mettre le .save au début de la macro et en cas d'erreur charger la dernière sauvegarde (comme sur les jeux vidéo)
    Comme je ne connais pas cette commande (et je ne crois pas qu'elle existe) je ferme le classeur puis le réouvre.
    Or si je ferme le classeur la maccro s'arrête donc rien se s'ouvre, d'où le OnTime qui permet d'ouvrir le classeur dans deux seconde puis de fermer le classeur.
    Et ça marche.
    Bien sur il faut intégrer ce code dans une gestion d'erreur, cf le tuto:http://silkyroad.developpez.com/VBA/GestionErreurs/

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Le conditionnel était plutôt pour une reprise éventuelle du code …

    La ligne de code n°8 ne sert à rien vu que le classeur est déjà rouvert !

    Sinon je viens de voir s'il y a plusieurs classeurs ouverts, à la réouverture le classeur n'est pas au premier plan,
    donc si besoin le réactiver dans la procédure appelée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Test()
        Application.OnTime Now + 0.00002, "Bidon"
        ThisWorkbook.Close False
    End Sub
     
    Sub Bidon()
        ThisWorkbook.Activate
    End Sub

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 684
    Par défaut
    Merci je n'avais pas tester ce cas.
    Si l'utilisateur veux relancer la maccro il devra le faire à la main, l'idée c'est de remettre le classeur dans l'état où il était avant le lancement de la maccro.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 23h20
  2. [Struts-Validator] Gestion d'erreurs
    Par sylvain_neus dans le forum Struts 1
    Réponses: 14
    Dernier message: 09/04/2004, 16h15
  3. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 18h19
  4. [LG]tests pour la gestion d'erreur
    Par le 27 dans le forum Langage
    Réponses: 3
    Dernier message: 22/12/2003, 21h44
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 23h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo