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

VBA Discussion :

Boucler sur un Save qui échoue


Sujet :

VBA

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Boucler sur un Save qui échoue
    Bonjour,

    Je modifie un fichier excel grâce à la macro d'un fichier principal. Lorsaue la modification est terminée, je souhaite enregistrer les modifications puis fermer le fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Workbooks(file).Save
    Workbooks(file).Close
    Hors le fichier en question est sur un emplacement réseau et pour une raison inconnue (je suis le seul a travailler sur ce fichier), il est souvent (75%) reconnu comme en utilisation, la sauvegarde ne se fait pas et la macro principale se stoppe. Pour le moment je passe en debug afin de relancer à la ligne ".Save" (ce qui est étonnant c'est que la deuxième fois ne plante jamais) mais mon but est d'automatiser la procédure afin de ne plus être devant l'ordinateur en permanence.

    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        Windows(file).Activate
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    Et aussi cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Save1:
        Workbooks(file).Save
        If Err.Number <> 0 Then
            Err.Clear
            GoTo Save1
        End If
        Workbooks(file).Close
    Aucun changement, le problème subsiste.



    J'aimerais trouver un moyen de ne pas arrêter le déroulement du code quand le ".Save" plante.

    Merci d'avance pour vos idées.

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Ok je me suis juste trompé d'ordre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Save1:
        On Error GoTo Save1
        Workbooks(file).Save
        Workbooks(file).Close
    Maintenant ça boucle correctement, mais j'ai une popup d'excel qui me dit que le fichier est en utilisation, je dois cliquer sur ok pour que ça reparte. Il doit y avoir un moyen de ne pas afficher ce message, j'ai cherché un petit peu mais je n'ai rien trouvé de fonctionnel. Je ferai une recherche plus approfondie demain et je posterai quand j'aurai trouvé.
    En attendant, si quelqu'un sait...

    A+

  3. #3
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par pboiteux Voir le message
    Je modifie un fichier excel grâce à la macro d'un fichier principal. Lorsaue la modification est terminée, je souhaite enregistrer les modifications puis fermer le fichier.
    Il frauderait voir ton code complet de ton fichier principal.
    selon moi c'est une question d'objet qui n'est pas réinitialisé à Nothing

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Hmm, j' ai pas d'objet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        folder= "V:\...\"
        file = "monFichier.xls"
        Workbooks.Open Filename:=folder & file, UpdateLinks:=0
        Application.Run file & "!monModule.maMacro"
     
        Workbooks(file).Save
        Workbooks(file).Close
    Mais il faut noter que si j’enlève ces deux lignes et si je fais la sauvegarde à la main, j'ai le même problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        Workbooks(file).Save
        Workbooks(file).Close

  5. #5
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par pboiteux Voir le message
    Hmm, j' ai pas d'objet.
    Vaut mieux passer par un objet

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Sub test()
     
        Dim wb As Workbook
        Dim ws As Worksheet
        Set wb = Workbooks.Open("C:\ ton chemin\ton fichier.xlsm")
        Set ws = wb.Worksheets(1)
     
        'modification
        ws.Range("A1").Value = "toto"
     
        wb.Save
        wb.Close
     
        Set wb = Nothing
        Set ws = Nothing
     
    End Sub

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.EnableEvents = False
     
        folder = "V:\...\"
        file = "monFichier.XLS"
        Dim wb1 As Workbook
        Set wb1 = Workbooks.Open(folder & file, UpdateLinks:=0)
        Application.Run file & "!monModule.maMacro"
     
    Save1:
        On Error GoTo Save1
        wb1.Save
        wb1.Close
        Set wb1 = Nothing
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
        Application.EnableEvents = True
    J'ai testé tout ça, mais ça ne va pas mieux...

    D'une part le fichier est toujours reconnu en utilisation, d'autre part j'ai toujours la pop-up qui arrête le déroulement automatique du code. Si j'arrive à régler un seul de ces problèmes je suis sauvé

  7. #7
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    et en mettant un DoEvents

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.EnableEvents = False
     
        folder = "V:\...\"
        file = "monFichier.XLS"
        Dim wb1 As Workbook
        Set wb1 = Workbooks.Open(folder & file, UpdateLinks:=0)
        Application.Run file & "!monModule.maMacro"
     
        DoEvents
        wb1.Save
        wb1.Close
        Set wb1 = Nothing
     
        Application.ScreenUpdating = True
        Application.DisplayAlerts = True
        Application.EnableEvents = True

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Le DoEvent ne change rien, j'ai aussi essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        wb1.Close True
     
    'a la palce de
     
        wb1.Save
        wb1.Close
    Est ce que cela peut venir de ma version d'excel ? Certains forums anglais le mentionnent pour des problèmes similaires.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Citation Envoyé par pboiteux Voir le message
    Est ce que cela peut venir de ma version d'excel ? Certains forums anglais le mentionnent pour des problèmes similaires.
    oui excel 2013 est capricieux
    est-ce que tu as 2013?

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Non, on travaille sur Office 2010 Pro Plus (Version: 14.0.7140.5002 32-bit)

    J'ai essayé de placer le .Save directement dans la macro du fichier que je veux fermer, mais ca ne fonctionne pas non plus.



    Une idée pourquoi cette ligne ne semble pas fonctionner ? (la popup s'affiche toujours)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.DisplayAlerts = False

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je pense que Application.DisplayAlerts ne "fonctionne" pas car l'alerte ne vient pas de l'appli, mais de Windows qui dit que le fichier est utilisé et donc "verrouillé"...

    La façon la plus adéquate de résoudre ce problème serait de comprendre pourquoi il est verrouillé, car faire boucler une macro jusqu'à ce qu'il soit déverrouillé ne me semble pas une bonne solution.

    Une idée au passage: J'ai déjà eu le problème (avec des PDF à remplacer) parce que le volet de visualisation était activé (et visualisait le fichier) dans l'explorateur Windows.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    La façon la plus adéquate de résoudre ce problème serait de comprendre pourquoi il est verrouillé, car faire boucler une macro jusqu'à ce qu'il soit déverrouillé ne me semble pas une bonne solution.
    C'est sur que c'est pas joli joli, je cherchais juste un moyen de contourner un problème que je vais avoir beaucoup de mal à cerner. Le fichier que j'ouvre pour faire mes actions (et que je veux sauvegarder et quitter), n'est utilisé que par moi, mais il est au centre de beaucoup d'autres procédures que je dois exécuter à d'autres moments dans la journée. Je ne peux donc pas le renommer, le déplacer ou en recréer un nouveau car cela impliquerait de vérifier toutes les procédures. Je viens d'arriver dans la boite, et ce fichier est relativement vieux et complexe, à terme je vais devoir me plonger dedans pour comprendre ce qui coince, mais je dois aussi m'occuper d'autres tâches...
    Ce que je sais c'est que ce n'est pas le seul fichier à se comporter ainsi quand je veux le sauvegarder, que lorsque la première sauvegarde échoue, la deuxième va systématiquement fonctionner et finalement que ce code me donne semble me donner un meilleur taux de réussite de la première sauvegarde qu'avant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        DoEvents
        On Error Resume Next
        ActiveWorkbook.Save
        ActiveWorkbook.Close True
    Au final, je n'ai pas besoin de boucler car la deuxième sauvegarde fonctionnera forcément.

    Citation Envoyé par Pierre Fauconnier Voir le message
    Une idée au passage: J'ai déjà eu le problème (avec des PDF à remplacer) parce que le volet de visualisation était activé (et visualisait le fichier) dans l'explorateur Windows.
    Bonne idée mais le volet de visualisation n'est pas activé.

    Citation Envoyé par Pierre Fauconnier Voir le message
    Je pense que Application.DisplayAlerts ne "fonctionne" pas car l'alerte ne vient pas de l'appli, mais de Windows qui dit que le fichier est utilisé et donc "verrouillé"...
    Ok, ça se tient ! Et j'imagine qu'il n'y a rien à faire pour désactiver les alertes de Windows pendant l’exécution de ma macro ?

    Merci !

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 955
    Points
    55 955
    Billets dans le blog
    131
    Par défaut
    Activeworkbook.close true te permet de ne pas utiliser la ligne ActiveWorkbook.save qui devient inutile.

    Attention toutefois avec on error resume next. Si une erreur survient sur le Close, il faudra la traiter aussi.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Analyste de risque
    Inscrit en
    Mai 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Espagne

    Informations professionnelles :
    Activité : Analyste de risque

    Informations forums :
    Inscription : Mai 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Activeworkbook.close true te permet de ne pas utiliser la ligne ActiveWorkbook.save qui devient inutile.
    Justement, quand le premier .Save échoue, j'ai le message de Windows, mais l'erreur est ignorée et l’exécution du code continue (grâce au On Error). Sachant qu'avec mon environnement, mon deuxième .Save ne pourra pas échouer, Activeworkbook.close true me permet de fermer le classeur et de sauvegarder avec certitude.

    C'est ce qui me parait fonctionner le mieux pour le moment. Reste cette histoire de popup windows...

Discussions similaires

  1. [PPT-2010] Boucler sur des shapes qui ont un nom de base
    Par stefan.l dans le forum VBA PowerPoint
    Réponses: 7
    Dernier message: 09/04/2014, 15h01
  2. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 17h15
  3. boucler sur des checkboxes
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 09/10/2004, 09h27
  4. Travailler sur des données qui doivent être triées
    Par haypo dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 19/07/2003, 18h13
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 17h29

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