XL 2019 Modification code vba pour envoie pj Excel au lieu d'un pdf

Quicksland

XLDnaute Occasionnel
Bonsoir le forum ;)

je souhaiterai si possible que dans mon fichier " GESTION STOCK "

que la pj " journal des stocks " soit envoyé au format excel et plus au format pdf

et laisser au format pdf la pj " recap stock "

Merci a tous pour votre aide 🙏
 

Pièces jointes

  • GESTION - STOCK.xlsm
    65.9 KB · Affichages: 10
Dernière édition:

Sequoyah

XLDnaute Nouveau
Bonjour Quicksland et le Forum,
à tester, ça devrait suffire de remplacer la macro EditionJL par la macro suivante (difficile pour moi de faire plus avec des feuilles cachées et protection par mot de passe)
VB:
Sub ExportSheetJL()

Dim Dossier As String, Horodatage As String, NomFichier As String
Dim targetWorkbook As Workbook

Dossier = ThisWorkbook.Path 'r_pertoire courant o? sera cr__ le fichier PDF
Horodatage = WorksheetFunction.Text(Now, "YYYYMMDD-HHMM") 'avec les heures et minutes
NomFichier = "Journal des stocks " & Horodatage
Extension = ".xlsx"

CheminJL = Dossier & "\" & NomFichier & Extension

ThisWorkbook.Sheets("JOURNAL").Copy

With ActiveWorkbook
    .SaveAs CheminJL
    .Close
End With

End Sub
 

Quicksland

XLDnaute Occasionnel
Bonjour Quicksland et le Forum,
à tester, ça devrait suffire de remplacer la macro EditionJL par la macro suivante (difficile pour moi de faire plus avec des feuilles cachées et protection par mot de passe)
VB:
Sub ExportSheetJL()

Dim Dossier As String, Horodatage As String, NomFichier As String
Dim targetWorkbook As Workbook

Dossier = ThisWorkbook.Path 'r_pertoire courant o? sera cr__ le fichier PDF
Horodatage = WorksheetFunction.Text(Now, "YYYYMMDD-HHMM") 'avec les heures et minutes
NomFichier = "Journal des stocks " & Horodatage
Extension = ".xlsx"

CheminJL = Dossier & "\" & NomFichier & Extension

ThisWorkbook.Sheets("JOURNAL").Copy

With ActiveWorkbook
    .SaveAs CheminJL
    .Close
End With

End Sub
Bonsoir @Sequoyah

Merci pour ta réponse 👍

Je te remet le fichier sans mot de passe et sans feuille cachées

Merci pour tout
 

Pièces jointes

  • gestion-stocks ESSAI.xlsm
    97.3 KB · Affichages: 2

TooFatBoy

XLDnaute Barbatruc
C'est normal que tu aies ce message d'alerte : tu as des macros dans ta feuille "JOURNAL", mais tu enregistres la feuille en .xlsX.

Soit tu veux envoyer la feuille avec ses macros, et donc tu enregistres la feuille en .xlsM.
Soit tu veux envoyer la feuille sans ses macros, et donc tu enregistres la feuille en xlsX.


Je te propose une macro qui fait, au choix, un des 3 formats (pdf, xlsx, xlsm) :
VB:
Sub EditionJL(Extension As String)
'
Dim Dossier$, Horodatage$, NomFichier$

    Application.ScreenUpdating = False

    Dossier = ThisWorkbook.Path                 ' Répertoire courant où sera créé le fichier PDF
    Horodatage = Format(Now, " YYYYMMDD-HHMM")  ' Avec les heures et minutes
    NomFichier = "Journal des stocks " & Horodatage
    CheminJL = Dossier & "\" & NomFichier & Extension

    With Sheets("JOURNAL")
        Select Case Extension
        Case ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminJL, IgnorePrintAreas:=False
        Case ".xlsx"
            .Copy
            Application.DisplayAlerts = False
            ActiveWorkbook.SaveAs Filename:=CheminJL, FileFormat:=xlOpenXMLWorkbook
            ActiveWorkbook.Close
        Case ".xlsm"
            .Copy
            ActiveWorkbook.SaveAs Filename:=CheminJL, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            ActiveWorkbook.Close
        Case Else
            MsgBox "Feuille non enregistrée car format '" & Extension & "' inconnu.", vbOKOnly + vbInformation, "Erreur"
        End Select
    End With

End Sub

Il faut donc appeler la macro de cette façon, selon le format sous lequel tu veux enregistrer la feuille :
call EditionJL(".pdf") ou call EditionJL(".xlsx") ou call EditionJL(".xlsm").
Si tu passes en paramètre autre chose qu'une de ces trois extensions, tu as un message d'alerte qui te prévient immédiatement que l'enregistrement n'a pas été effectué car le format n'est pas connu.

Si tu trouves que c'est trop compliqué, tu supprimes tout ce qu'il y a en trop pour ne garder que le format que tu veux. ;)
 
Dernière édition:

Quicksland

XLDnaute Occasionnel
C'est normal que tu aies ce message d'alerte : tu as des macros dans ta feuille "JOURNAL", mais tu enregistres la feuille en .xlsX.

Soit tu veux envoyer la feuille avec ses macros, et donc tu enregistres la feuille en .xlsM.
Soit tu veux envoyer la feuille sans ses macros, et donc tu enregistres la feuille en xlsX.


Je te propose une macro qui fait, au choix, un des 3 formats (pdf, xlsx, xlsm) :
VB:
Sub EditionJL(Extension As String)
'
Dim Dossier$, Horodatage$, NomFichier$

    Application.ScreenUpdating = False

    Dossier = ThisWorkbook.Path                                 ' Répertoire courant où sera créé le fichier PDF
    Horodatage = WorksheetFunction.Text(Now, " YYYYMMDD-HHMM")  ' Avec les heures et minutes
    NomFichier = "Journal des stocks " & Horodatage
    CheminJL = Dossier & "\" & NomFichier & Extension

    With Sheets("JOURNAL")
        Select Case Extension
        Case ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminJL, IgnorePrintAreas:=False
        Case ".xlsx"
            .Copy
            Application.DisplayAlerts = False
            ActiveWorkbook.SaveAs Filename:=CheminJL, FileFormat:=xlOpenXMLWorkbook
            ActiveWorkbook.Close
        Case ".xlsm"
            .Copy
            ActiveWorkbook.SaveAs Filename:=CheminJL, FileFormat:=xlOpenXMLWorkbookMacroEnabled
            ActiveWorkbook.Close
        Case Else
            MsgBox "Feuille non enregistrée car format '" & Extension & "' inconnu.", vbOKOnly + vbInformation, "Erreur"
        End Select
    End With

End Sub

Il faut donc appeler la macro de cette façon, selon le format sous lequel tu veux enregistrer la feuille :
call EditionJL(".pdf") ou call EditionJL(".xlsx") ou call EditionJL(".xlsm").
Si tu passes en paramètre autre chose qu'une de ces trois extensions, tu as un message d'alerte qui te prévient immédiatement que l'enregistrement n'a pas été effectué car le format n'est pas connu.

Si tu trouves que c'est trop compliqué, tu supprimes tout ce qu'il y a en trop pour ne garder que le format que tu veux. ;)
Bonjour @TooFatBoy ;)

Tu ne dors jamais !!! :rolleyes:

Merci pour ta réponse et pour ta proposition👍

Je me retrouve avec cette erreur



VB:
Sub ArreteStockJournalier()[/COLOR][/COLOR]

[COLOR=rgb(0, 0, 0)]Sheets("ETAT").Activate[/COLOR]
[COLOR=rgb(250, 197, 28)]Sheets("ETAT").Calculate[/COLOR]

[COLOR=rgb(41, 105, 176)][COLOR=rgb(0, 0, 0)]Call ExportSheetJL[/COLOR][/COLOR]
[COLOR=rgb(250, 197, 28)]Call EditionRECAP
Call Reinitialisation
MsgBox "Edition du dernier stock connu : OK" & vbCrLf & "Reinitialisation du fichier : OK"
Call EnvoiMail

End Sub

Merci pour ton aide
 

TooFatBoy

XLDnaute Barbatruc
Tu ne dors jamais !!! :rolleyes:
Je me posais la même question quand je t'ai vu arriver il y a 10 ou 15 minutes. 🤣 🤣 🤣


Je n'ai pas touché à cette macro.
Tu n'avais pas l'erreur avant ?

Tu as bien lu tout ce que j'ai écrit en #8 ???
J'ai changé le nom de la macro (j'ai en fait laissé celui d'origine), donc si tu veux l'appeler, il faut mettre son nom...
Et c'est pas comme si je l'avais écrit en couleur, et avec les 3 possibilités ! 😡😤
Il faut donc appeler la macro de cette façon, selon le format sous lequel tu veux enregistrer la feuille :
call EditionJL(".pdf") ou call EditionJL(".xlsx") ou call EditionJL(".xlsm").

Bon allez, il n'est même pas encore 06h00 alors tu ne seras pas puni. 😇
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
VB:
Sub ArreteStockJournalier()
'
    Sheets("ETAT").Activate
    Sheets("ETAT").Calculate

'    Call EditionJL(".pdf")
    Call EditionJL(".xlsx")
'    Call EditionJL(".xlsm")
    Call EditionRECAP
    Call Reinitialisation
    MsgBox "Edition du dernier stock connu : OK" & vbCrLf & "Reinitialisation du fichier : OK"
    Call EnvoiMail

End Sub
 

Quicksland

XLDnaute Occasionnel
VB:
Sub ArreteStockJournalier()
'
    Sheets("ETAT").Activate
    Sheets("ETAT").Calculate

'    Call EditionJL(".pdf")
    Call EditionJL(".xlsx")
'    Call EditionJL(".xlsm")
    Call EditionRECAP
    Call Reinitialisation
    MsgBox "Edition du dernier stock connu : OK" & vbCrLf & "Reinitialisation du fichier : OK"
    Call EnvoiMail

End Sub
Plus de message d'erreur , mais je reçois le mail qu'avec le recap en pdf

J'ai un enregistrement pdf du recap et le fichier journal en xlsx 👍

Pas eu le choix de l'envoie mais ça ne me dérange pas ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 969
Membres
103 072
dernier inscrit
Remithesix