Problème d'enregistrement de fichier avec Macro

Benben

XLDnaute Nouveau
Bonjour,

La macro ds mon fichier doit copier d'une sélection d'onglets dans un nouveau classeur, nommer ce dernier d'après certaines données puis ouvrir la fenêtre "enregistrer sous".

La macro marche bien jusque là, mais lorsque que je fais "enregistrer" elle plante sur la ligne de code "NouveauClasseur.SaveAs exportFile, xlXLS".

J'obtiens : Erreur d'exécution 1004 ; La méthode 'SaveAs' de l'objet '_Workbook" a échoué

Voici mon code :

Code:
Sub Export_DOCI()

    Dim NouveauClasseur As Workbook
    Dim bexportfile As Boolean
    Dim InitialesRTI As String
    Dim Filename As String
    Dim exportFile As String
    
    Société = Range("VALIDATIONS!G32").Value
    Site = Range("VALIDATIONS!f9").Value
    InitialesRTI = Range("VALIDATIONS!u3").Value
    
    TexteInputBox1 = "Merci de compléter le nom du fichier : " & InitialesRTI & "." & Société & "." & Site & "."
    NomFichier = InputBox(TexteInputBox1, "Saisie du nom du fichier", "Saisir ici", vbInformation)
    If Len(NomFichier) = 0 Then Exit Sub
    
    Filename = InitialesRTI & "." & Société & "." & Site & "." & NomFichier & ".xls"
    
    Application.ScreenUpdating = False
    
    Sheets(Array("VALIDATIONS", "Commande(Frs 1)", "PV de Réception (Frs 1)", _
        "Commande(Frs 2)", "PV de Réception (Frs 2)", "Commande(Frs 3)", _
        "PV de Réception (Frs 3)", "Commande(Frs 4)", "PV de Réception (Frs 4)", _
        "Commande(Frs 5)", "PV de Réception (Frs 5)", "Annexe commande froid CTP1", _
        "Annexe commande froid CTP2")).Select

    Sheets(Array("VALIDATIONS", "Commande(Frs 1)", "PV de Réception (Frs 1)", _
        "Commande(Frs 2)", "PV de Réception (Frs 2)", "Commande(Frs 3)", _
        "PV de Réception (Frs 3)", "Commande(Frs 4)", "PV de Réception (Frs 4)", _
        "Commande(Frs 5)", "PV de Réception (Frs 5)", "Annexe commande froid CTP1", _
        "Annexe commande froid CTP2")).Copy


    Set NouveauClasseur = ActiveWorkbook


[3 tonnes d'opérations....]


    Application.ScreenUpdating = True
    
    exportFile = Application.GetSaveAsFilename(Filename)

    NouveauClasseur.SaveAs exportFile, xlXLS
    bexportfile = True

    'Message succès si enregistrement, ou échec si annulation.

    If bexportfile = True Then
    MsgBox "Votre fichier " & exportFile & " a bien été sauvegardé.", vbInformation, "Création réussie"
    Exit Sub
    Else
    MsgBox "Votre fichier " & Filename & " n'a pas été sauvegardé.", vbCritical, "Création interrompue"
    End If


End Sub


Si vous aviez une solution pour que le fichier se sauvegarde correctement, et que le fichier copie enregistré soit supprimé après enregistrement, je suis preneur.


Merci !
 

Pierrot93

XLDnaute Barbatruc
Re : Problème d'enregistrement de fichier avec Macro

Bonjour,

modifie peut être ceci :
Code:
NouveauClasseur.SaveAs exportFile, xlXLS

par cela :
Code:
NouveauClasseur.SaveAs exportFile

il ne me semble pas que xlXLS soit une constante valide pour 2003

bon après midi
@+
 

Benben

XLDnaute Nouveau
Re : Problème d'enregistrement de fichier avec Macro

Bonjour,

Merci pour la correction. Cette étape marche.

Par contre, même si j'annule lorsque la fenêtre "enregistrer sous" s'affiche, le fichier copié s'enregistre quand même automatiquement sous le nom de "Faux.xls"...


Si vous avez une idée pour ça.
 

Pierrot93

XLDnaute Barbatruc
Re : Problème d'enregistrement de fichier avec Macro

Re,

peut être ceci, sortira de la procédure si bouton "annuler" actionné...
Code:
exportFile = Application.GetSaveAsFilename(Filename)
If exportFile = False Then Exit Sub

bonne soirée
@+
 

Benben

XLDnaute Nouveau
Re : Problème d'enregistrement de fichier avec Macro

Rebonjour,

Cette dernière ligne de code plante. Pour le moment, tout marche sauf lorsque je fais "non" lors de l'enregistrement. Un fichier Faux.xls est crée, même en cas d'annulation et j'ai le message de confirmation d'enregistrement.

J'ai testé pas mal de combinaison différentes mais j'avoue que j'ai un truc qui m'échappe ><

Merci de m'apporter encore une fois vos lumières :rolleyes:

Code:
  Sub Export_DOCI()

    Dim NouveauClasseur As Workbook
    Dim bexportfile As Boolean
    Dim InitialesRTI As String
    Dim Filename As String
    Dim exportFile As String
    
    Société = Range("VALIDATIONS!G32").Value
    Site = Range("VALIDATIONS!f9").Value
    InitialesRTI = Range("VALIDATIONS!u3").Value
    
    TexteInputBox1 = "Merci de compléter le nom du fichier : " & InitialesRTI & "." & Société & "." & Site & "."
    NomFichier = InputBox(TexteInputBox1, "Saisie du nom du fichier", "Saisir ici", vbInformation)
    If Len(NomFichier) = 0 Then Exit Sub
    
    Filename = InitialesRTI & "." & Société & "." & Site & "." & NomFichier & ".xls"
    
    Application.ScreenUpdating = False


[....Diverses opérations....]


 Application.ScreenUpdating = True
    
    exportFile = Application.GetSaveAsFilename(Filename)
    
   'J'utilise ici un nouveau nom, bexportfile, différent de exportfile, défini en temps que booléen. Je ne sais pas si ça marche vraiment mais c'est un test, vu que exportfile plante lorsque que l'on veut tester si il est vrai/faux.

    bexportfile = True
    
    If bexportfile = False Then
    MsgBox "Votre fichier " & Filename & " n'a pas été sauvegardé.", vbCritical, "Création interrompue"
    Exit Sub
    
    Else
    NouveauClasseur.SaveAs exportFile
    MsgBox "Votre fichier " & Filename & " a bien été sauvegardé.", vbInformation, "Création réussie"

    End If

End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Problème d'enregistrement de fichier avec Macro

Bonjour,

testé ainsi :
Code:
Dim exportFile As Variant
exportFile = Application.GetSaveAsFilename()
If exportFile = False Then Exit Sub
ActiveWorkbook.SaveAs exportFile

pas de plantage chez moi...

bon après midi
@+
 

Benben

XLDnaute Nouveau
Re : Problème d'enregistrement de fichier avec Macro

Effectivement je n'avais pas bien déclaré ma variable !


Merci


Petite question bonus :

Je souhaite qu'en cas de "non-enregistrement", le classeur copié se ferme sans sauvegarde. Dans le cas ci-dessous, le classeur se ferme, mais s'enregistre. Comment indiqué "faux" pour l'enrgistrement ?

Code:
    exportFile = Application.GetSaveAsFilename(Filename)
    If exportFile = False Then
    MsgBox "Votre fichier " & Filename & " n'a pas été sauvegardé.", vbCritical, "Création interrompue"
    Application.DisplayAlerts = False
    ActiveWorkbook.Close
    Application.DisplayAlerts = True
    Exit Sub
    Else
    ActiveWorkbook.SaveAs exportFile
    MsgBox "Votre fichier " & exportFile & " a bien été sauvegardé.", vbInformation, "Création réussie"
    End If
    ActiveWorkbook.Close
 

Discussions similaires