Fermer un fichier Excel particulier

Banshor Messages postés 12 Statut Membre -  
Banshor Messages postés 12 Statut Membre -
Bonjour,

j'ai pas mal cherché et j'ai l'impression de ne pas trouver exactement ce que je veux. Je débute depuis 2 jours en codage dans Excel et je n'y connais rien. Ne me blâmai pas trop s'il vous plait :)

Je dois faire une macro qui enregistre un fichier Excel en PDF ayant un nom particulier a une commande par exemple 7514-Fond-45 que je récupère dans une cellule puis je ré-ouvre le fichier de base vide. Le soucis est qu'il m'ouvre le fichier Excel 7514-Fond-45 avec lequel il a crée le fichier PDF je suppose. J'aimerais pouvoir le fermer pour ne pas avoir à fermer 10 fenêtre après 10 commande par exemple. Voici mon code pour le moment.

Sub Sauvegarde()
  'Selectionne le chemin et sauvegarde dans le dossier spécifier
    fichierPDF = Range("K1") & "\" & Range("K2") & ".pdf"
    ActiveWorkbook.SaveAs (fichierPDF)
    fichierXLS = Range("K1") & "\" & Range("K2") & ".xls"
  'Réouvre le fichier Excel de base
    Workbooks.Open Filename:="U:\Projet David\Qualité Perforation Servi Doryl.xls"
    ActiveWorkbook(fichierXLS).Close False
  'Repositionnement de la cellule selectionné sur l'OF à remplir
    Range("B9").Select
End Sub


Ce code ne fonctionne pas. La ligne ActiveWorkbook(fichierXLS).Close False provoque une erreur

12 réponses

  1. Banshor Messages postés 12 Statut Membre
     
    Si je fais:

    ActiveWorkbook.Close

    il ferme le fichier avant de ré-ouvrir le fichier de base. Mais cette fois-ci rien n'est ouvert. J'obtient le logiciel Excel avec aucune page d'ouverte.
    J'aimerais bien qu'il comprenne que le fichier a fermé est le fichier enregistrer mais APRES avoir ouvert le fichier de base sinon le fichier de base se renomme car il s'enregistre-sous. Y-a-t-il moyen de fermer la page en arrière plan ? Car l'ActiveWorkbook devient la page de base se ré-ouvrant après l'enregistrement du fichier.
    0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour a vous deux,

    Gigatrappeur a raison pour activeworkbook.

    Mais le probleme vient de ceci
    ActiveWorkbook.SaveAs (fichierPDF)
    a part semer la zizanie, ca ne fera jamais un fichier au format PDF

    Banshor, quel excel avez-vous (a priori du 2003 vu l'extention .xls) ???
    0
  3. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  4. Banshor Messages postés 12 Statut Membre
     
    Oui c'est bien du 2003 est pourquoi cela sèmerais la zizanie ? J'ai bien mon fichier PDF de crée grâce à cette ligne:
    fichierPDF = Range("K1") & "\" & Range("K2") & ".pdf"
    Le soucis viens du fait qu'il ne ferme pas le fichier excel du pdf crée une fois la fichier de base ré-ouvert.

    J'ai voulu modifier mon code de cette façon, si ça peut vous donner des idées mais cela ne fonctionne pas, il y a une erreur dans ma ligne de définition du fichierA :

    Sub Sauvegarde()
      'Selectionne le chemin et sauvegarde dans le dossier spécifier
        fichierA = Range("K1") & "\" & Range("K2")
        fichierPDF = fichierA.pdf"
        fichierXLS = fichierA.xls"
        ActiveWorkbook.SaveAs (fichierPDF)
      'Réouvre le fichier Excel de base
        Workbooks.Open Filename:="U:\Projet David\Qualité Perforation Servi Doryl.xls"
        Workbooks("fichierXLS").Activate
        ActiveWorkbook.Close False
      'Repositionnement de la cellule selectionné sur l'OF à remplir
        Range("B9").Select
    End Sub


    Je dois forcément me servir du Range car les fichiers crées sont tous différents les un des autres du coup je ne peux pas sélectionner le fichier à fermé car il ne sera pas fixe.
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Bonjour,

      Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
      Le mode d'emploi (au cas ou) est ICI.
      0
    2. Banshor Messages postés 12 Statut Membre
       
      Ça marche, je le ferais maintenant. Désolé
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Pas de souci. L'important étant de le savoir.
      A+
      0
  5. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    J'ai bien mon fichier PDF Vous l'avez ouvert en PDF ???? M'etonnerait beaucoup, vous n'avez que change l'extention
    0
  6. Banshor Messages postés 12 Statut Membre
     
    Vous avez raison, le fichier est crée mais inutilisable.. Me voici donc avec un nouveau soucis.. du coup je ne sais pas exporter mon fichier en PDF. Je vais continuer mes recherches, et merci pour les réponses, si vous avez des choses à me proposer je suis ouvert n'y connaissant rien j'ai besoin d'aide ^^"

    Le principal étant mon soucis de fichier Excel à refermer derrière pour ne pas obliger l'opérateur du système à devoir refermer la page sauvegardé à chaque lot.

    J'aimerais aussi savoir, si je passe sous Excel 2013, je crois avoir vu qu'il y aurai moyen de directement sauvegarder sous PDF. La macro serait elle plus simple ? Du style

    Sub Sauvegarde()
      'Selectionne le chemin et sauvegarde dans le dossier spécifier
        fichierXLS = Range("K1") & "\" & Range("K2")
        ActiveWorkbook.SaveAs (fichierXLS) 'mais ici un SaveAsPDF.. je ne connais pas la ligne particulière
      'Réouvre le fichier Excel de base
        Workbooks.Open Filename:="U:\Projet David\Qualité Perforation Servi Doryl.xls"
      'Repositionnement de la cellule selectionné sur l'OF à remplir
        Range("B9").Select
    End Sub
    
    0
  7. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Excel2007 et plus: peut-etre prevoir a faire la RAZ des cellules a remplir pour le prochain "formulaire"

    Sub Sauvegarde()
    'adaptez le nom de la feuille
    With Worksheets("Feuil1")
    'Selectionne le chemin et sauvegarde dans le dossier spécifier
    fichierA = Range("K1") & "\" & Range("K2")
    'export PDF
    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=fichierA, Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    'Repositionnement de la cellule selectionné sur l'OF à remplir
    .Range("B9").Select
    End With
    End Sub
    0
  8. Banshor Messages postés 12 Statut Membre
     
    J'ai déjà pensé à un RaZ oui, j'ai le code déjà près au cas où. Je l'utilisais pour enregistrer les fichiers en .xls => raz => recommencer l'opération.

    J'ai l'impression que mon soucis de PDF vient juste du fait que Excel 2003 ne procure pas cette possibilité d'export en PDF sous forme de macro, est-ce possible ?

    Merci pour le code j'ai juste un soucis à ce niveau

    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=fichierA, Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    


    Il me le surligne en jaune quand je clique sur Débogage avec une erreur d'exécution '438':

    Propriété ou méthode non gérée par cet objet
    0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Seulement pour excel 2007 et plus, pas pour 2003. Vu que vous avez ecrit avoir la possibilite d'utiliser excel 2013, j'ai fourni le code qui va bien
    0
  10. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    un code pour export PDF via PDFCreator (imprimante virtuelle) pour tout excel
    'intaller PDFCreator(gratuit)
    'dans outils, reference: cocher PDFCreator
    Sub PrintToPDF_Early()
    'Author : Ken Puls ()
    'Macro Purpose: Print to PDF file using PDFCreator
    ' Designed for early bind, set reference to PDFCreator
    Dim pdfjob As PDFCreator.clsPDFCreator
    Dim sPDFName As String
    Dim sPDFPath As String
    Dim bRestart As Boolean
    '/// Change the output file name here! ///
    sPDFName = "testPDF.pdf"
    sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
    'Check if worksheet is empty and exit if so
    If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
    'Activate error handling and turn off screen updates
    On Error GoTo EarlyExit
    Application.ScreenUpdating = False
    Set pdfjob = New PDFCreator.clsPDFCreator
    'Check if PDFCreator is already running and attempt to kill the process if so
    Do
    bRestart = False
    Set pdfjob = New PDFCreator.clsPDFCreator
    If pdfjob.cStart("/NoProcessingAtStartup") = False Then
    'PDF Creator is already running. Kill the existing process
    Shell "taskkill /f /im PDFCreator.exe", vbHide
    DoEvents
    Set pdfjob = Nothing
    bRestart = True
    End If
    Loop Until bRestart = False
    'Assign settings for PDF job
    With pdfjob
    .cOption("UseAutosave") = 1
    .cOption("UseAutosaveDirectory") = 1
    .cOption("AutosaveDirectory") = sPDFPath
    .cOption("AutosaveFilename") = sPDFName
    .cOption("AutosaveFormat") = 0 ' 0 = PDF
    .cClearCache
    End With
    'Delete the PDF if it already exists
    If Dir(sPDFPath & sPDFName) = sPDFName Then Kill (sPDFPath & sPDFName)
    'Print the document to PDF
    ActiveSheet.PrintOut copies:=1, ActivePrinter:="PDFCreator"
    'Wait until the print job has entered the print queue
    Do Until pdfjob.cCountOfPrintjobs = 1
    DoEvents
    Loop
    pdfjob.cPrinterStop = False
    'Wait until the file shows up before closing PDF Creator
    Do
    DoEvents
    Loop Until Dir(sPDFPath & sPDFName) = sPDFName
    Cleanup:
    'Release objects and terminate PDFCreator
    Set pdfjob = Nothing
    Shell "taskkill /f /im PDFCreator.exe", vbHide
    On Error GoTo 0
    Application.ScreenUpdating = True
    Exit Sub
    EarlyExit:
    'Inform user of error, and go to cleanup section
    MsgBox "There was an error encountered. PDFCreator has" & vbCrLf & _
    "has been terminated. Please try again.", _
    vbCritical + vbOKOnly, "Error"
    Resume Cleanup
    End Sub
    0
  11. Banshor Messages postés 12 Statut Membre
     
    Merci beaucoup,

    le code ne marche pas pour moi, mais je vais forcer la chose pour obtenir un Excel plus récent et recommencer mes tests. Merci
    0