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 :

Erreur sur annuler avec workbook.saveas


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut Erreur sur annuler avec workbook.saveas
    Bonjour,


    Voici ma ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ActiveWorkbook.SaveAs Filename:=Dossier & fichier
    Le problème est lorsque le fichier existe déjà : une fenêtre s'ouvre et dde à l'utilisateur si on veut remplacer le fichier existant.

    En répondant "non" ou "annuler", il y a un message d'erreur en précisant que la méthode saveas a échoué

    Moi j'aurai voulu qu'il arrête la macro simplement.

    Est ce que qq1 peux m'aider

    Merci d'avance


    Liop à poil sur ce coup

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonjour.

    Si j'ai bien compris ton pb et ce que tu demandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     On Error resume next
        ActiveWorkbook.SaveAs Filename:=Dossier & fichier
    On Error goto 0
    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut
    En plus de bien comprendre, tu es un Dieux

    Merci pour ton aide


    Liop habillé du code d'un chef

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut


    J'ai été trop vite car la solution entraine une petite erreur

    voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        On Error Resume Next
        ActiveWorkbook.SaveAs Filename:=Dossier & fichier
        On Error GoTo 0
        ActiveWorkbook.Close False
     
     
        MsgBox ("Le fichier " & fichier & ".xls a bien été enregistré dans le répertoire" & vbCrLf & Dossier)
    Du coup, lorsque l'utilisateur annule ou dit non le code continue et mon msgBox s'affiche quand même alors qu'il faudrait un arrêt de la macro

    Y a-t-il une solution ?

    Merci

    Liop

  5. #5
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : juillet 2008
    Messages : 1 888
    Points : 2 166
    Points
    2 166
    Par défaut
    essaye ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     On Error GoTo fin
        ActiveWorkbook.SaveAs Filename:=Dossier & fichier
        On Error GoTo 0
        ActiveWorkbook.Close False
     
     
        MsgBox ("Le fichier " & fichier & ".xls a bien été enregistré dans le répertoire" & vbCrLf & Dossier)
     
    fin:
    end sub
    Pour plus d'info fait des recherche sur la "Gestion d'erreure"
    (perso j'utilise ce guide pour ce genre de chose un peu plus poussé)
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    ci-dessous un bout de code qui peut premettre de valider ton fichier sur n'importe quel ordinateur et vérifier l'existence du fichier, ça pourra te donner des idées :
    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
    racine = Workbooks(ActiveWorkbook.Name).Path
     
    Dir Workbooks(ActiveWorkbook.Name).Path
    ChDir racine 'se place sur le repertoire du programme
     
    If (verif = Dir(racine & "\" & nomdossier & "\", vbDirectory)) = vbEmpty Then 'On teste l'existence du répertoire nomdossier
        repert = racine & "\" & nomdossier
        Else
        MkDir racine & "\" & nomdossier 'on le crée s'il n'existe pas
        repert = racine & "\" & nomdossier
    End If
    ChDir repert
    if (verif=dir(racine & "\" & nomdossier\ActiveWorkbook.name)) = vbempty then
    exit sub 'ou ce que tu veux
    else
    ActiveWorkbook.SaveAs Filename:=Dossier & fichier
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut
    Krovax
    Après ton 1er "fin", j'ai une erreur dès l'écriture : il me dit qu'il attend un Next


    casefayere
    Tu me parles de quoi exactement ?

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    re,

    Simplement, c'est une partie de code à adapter, en cas de besoin, pour enregistrer ton fichier sur n'importe quel ordinateur, mais la fin de ce code doit pouvoir résoudre tes problèmes immédiats

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (verif=dir(nomdossier\ActiveWorkbook.name)) = vbempty then
    exit sub 'ou ce que tu veux, msgbox ou autre
    else
    ActiveWorkbook.SaveAs Filename:=Dossier & fichier
    end if
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 491
    Points : 155
    Points
    155
    Par défaut
    je suis un chef

    enfin grâce à vos conseils et la bidouille

    J'ai contourné le pb en vérifiant la présence du fichier (merci casefayere) et en annulant les messages d'alertes.
    Voici le code :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    nomEnregistrement = Dossier & fichier & ".xls"
       ' on vérifie que le fichier n'existe pas
        If Dir(nomEnregistrement) = "" Then 'cas où le fichier n'existe pas
            ActiveWorkbook.SaveAs Filename:=Dossier & fichier
            MsgBox ("Le fichier " & fichier & ".xls a bien été enregistré dans le répertoire" & vbCrLf & Dossier)
        Else
            Msg = ("Le fichier " & fichier & ".xls  existe déjà !" & vbCrLf & vbCrLf & "Voulez-vous le remplacer ?")
            Style = vbYesNo + vbInformation    ' Définit les boutons.
            Title = "Demande"    ' Définit le titre.
     
            Response = MsgBox(Msg, Style, Title) ' Affiche le message.
            If Response = vbYes Then
                Application.DisplayAlerts = False
                ActiveWorkbook.SaveAs Filename:=Dossier & fichier
                Application.DisplayAlerts = True
                MsgBox ("Le fichier " & fichier & ".xls a bien été enregistré dans le répertoire" & vbCrLf & Dossier)
                ActiveWorkbook.Close False
                Sheets("Fonctionnement").Select
                Range("A1").Select
            Else
                MsgBox ("Le fichier " & fichier & ".xls n'a pas été enregistré dans le répertoire" & vbCrLf & Dossier)
                ActiveWorkbook.Close False
                Sheets("Fonctionnement").Select
                Range("A1").Select
     
            End If
     
        End If

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

Discussions similaires

  1. Erreur sur Netbeans avec jasperreport
    Par aminus19 dans le forum NetBeans
    Réponses: 2
    Dernier message: 10/05/2010, 11h41
  2. erreur sur fonction avec curseur
    Par Tanebisse dans le forum PL/SQL
    Réponses: 3
    Dernier message: 06/05/2010, 17h20
  3. Erreur sur DELETE avec condition sur un DATETIME
    Par Luke58 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 25/08/2009, 13h00
  4. [SQL-Server] erreur sur mssql_connect avec php 5.1.4
    Par Yjo dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 04/06/2006, 17h11
  5. Erreur sur IIS avec des cripts ASP
    Par Alin dans le forum ASP
    Réponses: 7
    Dernier message: 22/06/2004, 15h15

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