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 :

Arret inexpliqué avant fin d'instructions d'une macro / raisons ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut Arret inexpliqué avant fin d'instructions d'une macro / raisons ?
    Bonjour à tous,

    Pourriez-vous svp m'apporter un éclaircissement sur un problème que je rencontre ??? (un peu novice ds le domaine) A savoir :

    J'ai développé une procédure de création de sauvegardes temporaires(manuel) et de BackUp (auto) cad (TEMP_nomfichier.xls) ou (BU_nomfichier.xls) d'un fichier excel (nomfichier.xls) via la méthode 'savecopyas'. (rien de tordu en soit, enfin je crois...)
    Le but est de récupérer une de ces sauvegardes et d'écraser le fichier d'origine en cas de demande de l'utilisateur, l'admin c mieux... (En bref, un retour à l'état dans lequel était le fichier lors de la sauvegarde TEMP ou BU).

    Je pense avoir "toutes les billes" en main pour développer cette fonction mais je fais fasse à une situation que je ne comprends pas vraiment... Donc voici mon code + commentaires pour plus de clarté avant tout :
    (exemple temp_nomfichier.xls ici)

    ___________________
    BLOC 1 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'définition des noms de fichiers
    Dim oldFname As String
    Dim newFname As String
    oldFname = ActiveWorkbook.Name
    newFname = "TEMP_" & ActiveWorkbook.Name
    BLOC 2 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'fermer un formulaire laissant 2 options de récupération: sauvegarde temporaire(utilisateur) ou BackUp(auto)
    Call hideform3
    BLOC 3 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'j'appelle/ouvre mon fichier TEMP_nomfichier.xls
    Workbooks.Open Filename:="P:\...\sauvegarde temp\" & newFname
    BLOC 4 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'je ferme mon fichier nomfichier.xls (sans quoi je ne pourrais pas l'écraser)
    Workbooks(oldFname).Close savechanges:=False
    BLOC 5 -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'j'écrase (en force) nomfichier.xls par TEMP_nomfichier.xls
    Application.DisplayAlerts = False
    Workbooks(newFname).SaveAs Filename:="P:\...\Base SCAME\" & oldFname
    Application.DisplayAlerts = True
    ___________________

    Quand je cherche à exécuter cette macro, celle-ci s'arrête avant la fin des instructions sans aucun message d'erreur... Vraisemblablement, elle s'arrête après exécution du BLOC 4.

    En supprimant le bloc 4 et en modifiant le bloc 5 comme suit :
    Workbooks(newFname).SaveAs Filename:="P:\...\Base SCAME\" & "test" & oldFname
    J'ai pu vérifier que sur le principe le code devrait fonctionner.

    Ayant développé mon code directement dans un module de ma feuille xls au début, j'ai cru qu'elle s'arrêtait en raison de la fermeture du fichier qui contient la macro. J'ai donc tout migré (sauf 2/3 d'appels) vers des macros complémentaires .xla ce qui ne résout malheureusement pas le problème. (Bien que cela soit tout de même utile pour d'autres raisons)

    J'ai également essayer de penser à d'autres astuces pour arriver au même résultat mais je sèche un peu sur ce coup là et je manque de temps pour finir ce développement... (Mission en perspective)
    Aussi, il ne me reste plus que vous ...!!!
    Sans quoi mon chef va me tomber dessus =>

    Bref, dans tous les cas, un grand "Merci" pour vos réponses potentielles !!

    N.B: Je précise les quelques points suivants qui me passe par la tête avant envoi et qui pourrait peut-être avoir une importance...???
    - je travaille dans des répertoires d'un serveur (droit user ok / vérifié) et Excel exécution locale en multiposte
    - mon répertoire 'sauvegarde temp' est caché (j'y crois pas là mais je précise tt de même...)
    - le nom du fichier peut évoluer/varier (d'où les activeworkbook.name)
    - des caractères 'spéciaux' peuvent être présent ds le nom du fichier

    Ah... et je repenses à 2 questions à l'instant qui trotaient dans mon esprit ce soir :
    - Se pourrait-il qu'après fermeture de nomfichier.xls il subsiste un processus bloquant la sauvegarde/l'écrasement de celui-ci par temp_nomfichier.xls ???
    - Les variables définies dans une procédure peuvent-elles évoluer pour une raison indéterminée (à 1ere vue) et surtout de manière interne ou externe à la procédure en question ?

    (En espérant ne pas avoir été trop long et surtout claire dans la description du problème et mes questions relatives)

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Si je comprend bien, tu fermes le fichier qui contient la macro

  3. #3
    Nouveau membre du Club
    Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    c'était le cas lorsque que j'ai écris le code mais je me suis vite rendu compte que ça allait poser problème...
    Ce qui m'a poussé à migré toutes les 'macros instructions' du fichier xls en macro complémentaire xla (externe - a moins que j'ai mal compris le principe d'utilisation des macros complémentaires...? je crois pas). J'ai juste gardé 2/3 macros (du fichier xls) qui ne font qu'appeler les macros complémentaires.

    pardon, je précise... ces 2/3 macros d'appels n'appellent en aucun cas la macro dont il est question... donc je ne pense pas que la fermeture du fichier (et pas de l'application cad excel, je la garde ouverte donc macro complementaire active... non?!) soit la cause du probleme.
    D'autant que comme je l'explique initialement, avec 1 suppresion et 1 modif 'test' cela fonctionne.
    Peut-être suis-je totalement dans le faux sur le principe... je me replonge après quelques années (6/7ans) ds la prog "bidouille" si je puis dire, et comprends relativement bien ce que je lis mais de là à faire le code le plus propre du monde, y'a un fossé forcement

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Je dis peut être une bétise, mais il me semble que même si la macro se trouve dans un xla, elle est exécutée par le workbook et s’arrête si le workbook est fermé.
    Peut être qu'en passant par le classeur personnel ...

  5. #5
    Nouveau membre du Club
    Profil pro
    Chargé d'affaire
    Inscrit en
    Juillet 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2011
    Messages : 7
    Par défaut
    Si c'est le cas, ceci expliquerai cela....
    par contre qu'entends tu par 'classeur personnel' stp ?

    Et eventuellement, verrais-tu une solution alternative à ce que je souhaite réaliser ?

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Le classeur personnel (Perso.xls) permet d'enregistrer des macros qui seront accessibles par tous les classeurs ouvert sur le poste.
    S'il n'est pas encore créé, utilise l'enregistreur de macro et choisi d'enregistrer la macro le classeur de macros personnelles

Discussions similaires

  1. Insérer une instruction dans une macro
    Par Kirata dans le forum Macro
    Réponses: 2
    Dernier message: 24/03/2012, 14h51
  2. Redirection vers une JSp avant fin traitement
    Par alioujigga dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 04/08/2011, 12h00
  3. Affichage avant fin de traitement d'une fonction
    Par pierrot2908 dans le forum Langage
    Réponses: 5
    Dernier message: 31/08/2009, 10h44
  4. attendre la fin de chargement d'une page avant de continuer le script
    Par jibouze dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/06/2006, 09h50

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