(résolu par bebere et chti160)modifier ligne de code pour ajouter l'année et mois en cours

grisan29

XLDnaute Accro
bonjour a tous et toutes
j'ai ce code qui fonctionne très pour enregistrer le devis ou facture en .xlsm et en .pdf
dans des dossiers séparé
je voudrais lui apporter une modification afin que le code entregistre les documents mensuellement
je m'explique serait t'il possible d'enregistrer en créant le mois en cours dans un dossier au nom de l'année en cours, en fait c'est un classeur a modules de classes, voici le code qui enregistre sous et qui foncttionne
Code:
    Private Sub CB_EnregistreDansLaBase_Click()
    'procédure enregistrement sous PDF
        Dim NomFicXL As String, CheminXL As String
        Dim NomFicPDF As String, CheminPDF As String
        Dim DLig As Long
        Dim shp As Shape
        Dim Sht As Worksheet

        Set Sht = ThisWorkbook.Sheets(WS_FACTURE)
        Sht.Range("I17") = Sht.Range("I17").Value
        If Sht.Range("IS_DOC_SAVED_IN_BASE") Then
            UpdateTitre Sht.Range("DOC_TYPE")
        End If
        Sht.Range("IS_DOC_SAVED_IN_BASE") = True

        DLig = Sht.Range("C" & Rows.Count).End(xlUp).Row
        Dim NomDeFichier As String
        NomDeFichier = Sht.Range("DOC_TITRE").Value & " - " & Sht.Range("DOC_CLIENT").Value
        NomFicXL = NomDeFichier & ".xlsm"
        NomFicPDF = NomDeFichier & ".pdf"
        ' Pour vérification de la valeur
        Select Case UCase(Sht.Range("DOC_TYPE").Value)
        Case DOC_DEVIS: CheminXL = DIR_DEVIS
        Case DOC_FACT: CheminXL = DIR_FACT
        Case DOC_FACT_AQUI: CheminXL = DIR_FACT_AQUI
        Case DOC_FACT_ACC: CheminXL = DIR_FACT_ACC
        Case Else
            MsgBox "Erreur pour trouver le chemin de " & Sht.Range("D1").Value
            Exit Sub
        End Select

        CheminPDF = CheminXL & "PDF\"
        CheminXL = CheminXL & "\"

        ' Sauvegarder le classeur actif dans le chemin et le nom determiné
        ' FileFormat:=xlExcel8,
        ActiveWorkbook.SaveAs Filename:=DIR_WORKSPACE & CheminXL & NomFicXL, _
                              Password:="", WriteResPassword:="", _
                              ReadOnlyRecommended:=False, CreateBackup:=False

        'SetButtonsVisible True
        '**********************************************************************************
        With Sht
            .Activate
            'code a tester et a supprimer si encore probleme
            With .PageSetup
                DLig = Range("suivant").Row
                'MsgBox DerLig
                .PrintArea = "C1:M" & DLig  'Sh.UsedRange.Rows.Count
                '.PrintArea = ""
                'la plage de cellules à imprimer pour chaque page
                .PrintTitleRows = Sht.Range("C17:M18").Address
                '.FitToPagesTall = 1
                .FitToPagesWide = 1
                .Orientation = xlPortrait
                .PrintHeadings = False
                ' "pied de page au centre"
                .CenterFooter = "&16&""Arial,Gras""SIRET : 123456789   -   NAF : 0123p  -   RCS : 00000 -   N° TVA   :  FR00123456789" & Chr(10) & _
                                "assurance décennale n°123456789 de chez untel"

            End With
        End With
        '**********************************************************************************

        ' Exporter en PDF
        ActiveWorkbook.ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=DIR_WORKSPACE & CheminPDF & NomFicPDF, Quality:= _
                                                       xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                                       OpenAfterPublish:=False

        SetButtonsVisible True
        envoifacnue
        MsgBox "Votre sauvegarde porte la référence : " & " " & NomFicXL & vbCrLf _
             & "Le fichier PDF à été créé sous le nom : " & NomFicPDF

        ' Fermer le classeur actif
        'ActiveWorkbook.Close

        'Sauvegarde les modifications
        AjouteDocDansLaBase
end sub
voici le code public du module de répérage du nom de feuille
Code:
Public Const DIR_WORKSPACE As String = "C:\Facturation"
Public Const DIR_DEVIS As String = "\Devis"
Public Const DIR_FACT As String = "\Facture"
Public Const DIR_FACT_AQUI As String = "\Factureacquittee"
Public Const DIR_FACT_ACC As String = "\Factureacompte"
j'ai ce code qui le fait mais je n'arrive pas a l'adapter
Code:
' Exporter en PDF
Public Sub Export_PDF()

    Dim F As Worksheet
    Dim Chemin As String
    Dim Client As String
    Dim Sh As Shape
    Dim mois As String, annee As String
        annee = "\" & Year(Date)
         mois = MonthName(Month(Date)) & "\"
      
    Application.DisplayAlerts = False
 
    Set F = ThisWorkbook.Sheets(WS_FACTURE)

    Chemin = "C:\Facturation\Facture seule\devispdf" & annee & mois
    If Dir(Chemin, vbDirectory) = "" Then
        MkDir Chemin
    End If
    Select Case F.Range("DOC_TYPE")
    Case DOC_DEVIS

        Chemin = "C:\Facturation\Facture seule\devispdf" & annee & mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case DOC_FACT_ACC
        Chemin = "C:\Facturation\Facture seule\facture acomptepdf" & annee & mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case DOC_FACT_AQUI
        Chemin = "C:\Facturation\Facture seule\facture acquitteepdf" & annee & mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case DOC_FACT
        Chemin = "C:\Facturation\Facture seule\facturepdf" & annee & mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case Else
        MsgBox "Impossibilité de déterminer le chemin" & vbCr & "Fin du programme"
        End
    End Select

    Client = F.Range("DOC_TITRE") & " - " & F.Range("DOC_CLIENT")

    Application.ScreenUpdating = False

    'code qui enregistre en .pdf

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Chemin & Client, Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                    From:=1, To:=1, OpenAfterPublish:=False

MsgBox "Le fichier PDF à été créé sous le nom : " & " " & Client '& vbCrLf _
         & "Le fichier PDF à été créé sous le nom : " & NomFicPDF

End Sub

merci d'avance
 

grisan29

XLDnaute Accro
bonjour Bebère, chti160 et le forum
j'ai épuré au max le classeur et le voici compresser avec les dossiers qui se mettent sous c: ou d: où ?
ah oui le classeur joint est un essai fait avec le code de Bèbère c'est pour cela qu'il a pris le nom de sauvegarde et cela est normal sur le fichier original
ce classeur est a mettre sur le bureau ou en raccourci comme je l'utilise
en fait je suis en cours de le refaire pour enlever les listviews
je m'excuse s'il y a des bug suite la suppression des userform et codes superflu pour le test, je vais essayer d'y remédier au mieux mais pas de suite
 
Dernière édition:

Bebere

XLDnaute Barbatruc
bonjour
Grisan un code qui fait son boulot
mis en commentaire les lignes qui gênaient
Code:
Option Explicit
'notes
'Constante DIR_WORKSPACE  = "D:\Facturation-v1s\factureSeule"

Private Sub CB_EnregistreDansLaBase_Click()
'procédure enregistrement sous PDF
    Dim NomFicXL As String, CheminXL As String
    Dim NomFicPDF As String, CheminPDF As String
    Dim DLig As Long
    Dim shp As Shape
    Dim Sht As Worksheet

    Set Sht = ThisWorkbook.Sheets(WS_FACTURE)
  'ces lignes sont elles bonnes
'je pense a ceçi:si I17="" alors update et I17=true
  '        Sht.Range("I17") = Sht.Range("I17").Value
    '        If Sht.Range("IS_DOC_SAVED_IN_BASE") Then
    '            UpdateTitre Sht.Range("DOC_TYPE")
    '        End If
    '        Sht.Range("IS_DOC_SAVED_IN_BASE") = True

    DLig = Sht.Range("C" & Rows.Count).End(xlUp).Row
    Dim NomDeFichier As String
    NomDeFichier = Sht.Range("DOC_TITRE").Value & " - " & Sht.Range("DOC_CLIENT").Value
    NomFicXL = NomDeFichier & ".xlsm"
    NomFicPDF = NomDeFichier & ".pdf"
    ' Pour vérification de la valeur
    Select Case UCase(Sht.Range("DOC_TYPE").Value)
    Case DOC_DEVIS: CheminXL = DIR_DEVIS
    Case DOC_FACT: CheminXL = DIR_FACT
    Case DOC_FACT_AQUI: CheminXL = DIR_FACT_AQUI
    Case DOC_FACT_ACC: CheminXL = DIR_FACT_ACC
    Case Else
        MsgBox "Erreur pour trouver le chemin de " & Sht.Range("D1").Value
        Exit Sub
    End Select

    CheminPDF = DIR_WORKSPACE & CheminXL & "PDF\" & Format(Date, "yyyy") & "\" & Format(Date, "mmmm") & "\"
    CreateFolders CheminPDF 'mgestion
    CheminXL = DIR_WORKSPACE & CheminXL & "\" & Format(Date, "yyyy") & "\" & Format(Date, "mmmm") & "\"
    CreateFolders CheminXL 'mgestion
    ' Sauvegarder le classeur actif dans le chemin et le nom determiné
    ' FileFormat:=xlExcel8,
    ActiveWorkbook.SaveAs Filename:=CheminXL & NomFicXL, _
                          Password:="", WriteResPassword:="", _
                          ReadOnlyRecommended:=False, CreateBackup:=False

    'SetButtonsVisible True
    '**********************************************************************************
    With Sht
        .Activate
        'code a tester et a supprimer si encore probleme
        With .PageSetup
            DLig = Range("suivant").Row
            'MsgBox DerLig
            .PrintArea = "C1:M" & DLig  'Sh.UsedRange.Rows.Count
            '.PrintArea = ""
            'la plage de cellules à imprimer pour chaque page
            .PrintTitleRows = Sht.Range("C17:M18").Address
            '.FitToPagesTall = 1
            .FitToPagesWide = 1
            .Orientation = xlPortrait
            .PrintHeadings = False
            ' "pied de page au centre"
            .CenterFooter = "&16&""Arial,Gras""SIRET : 123456789   -   NAF : 0123p  -   RCS : 00000 -   N° TVA   :  FR00123456789" & Chr(10) & _
                            "assurance décennale n°123456789 de chez untel"

        End With
    End With
    '**********************************************************************************

    ' Exporter en PDF
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CheminPDF & NomFicPDF, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    '        SetButtonsVisible True
'    envoifacnue
    MsgBox "Votre sauvegarde porte la référence : " & " " & NomFicXL & vbCrLf _
         & "Le fichier PDF à été créé sous le nom : " & NomFicPDF

    ' Fermer le classeur actif
    'ActiveWorkbook.Close

    'Sauvegarde les modifications
    '        AjouteDocDansLaBase
End Sub
 

grisan29

XLDnaute Accro
bonjour Bébère
Merci je n'ai fait qu'un ou 2 essai car je dois partir, mais je repousse mes essais plus tard
j'ai du mettre ces 2 lignes en commetaires car elles bugais au faisant appel a la fonction getfolders
' CreateFolders CheminPDF 'mgestion
' CreateFolders CheminXL 'mgestion
merci aussi pour le chemin de la constantes que j'ai oublier de changer car pour mes essais j'ai changer de lieu de sauvegarde
 

grisan29

XLDnaute Accro
bonjour Bebere:)
merci BEAUCOUP:):) maintenant c'est le code qui enregistre sans les codes et boutons qui me pose le même souci et je ne sais pas bien appliqué les x ou ils ne vont pas la
il est du même cru que celui du post 3
Code:
Public Sub envoifacnue()    'sans les boutons et codes

       
        Dim F As Worksheet
        Dim Chemin As String
        Dim Client As String
        Dim Sh As Shape
        Dim Mois As String, Annee As String
        Annee = "\" & Year(Date)
         Mois = MonthName(Month(Date)) & "\"
        
        Application.DisplayAlerts = False
      
        Set F = ThisWorkbook.Sheets(WS_FACTURE)

        Select Case F.Range("DOC_TYPE")
        Case DOC_DEVIS
            Chemin = "C:\Facturation\Facture seule\devis" & Annee & Mois
            If Dir(Chemin, vbDirectory) = "" Then
                MkDir Chemin
            End If
    Case DOC_FACT_ACC
        Chemin = "C:\Facturation\Facture seule\facture acompte\" & Annee & Mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case DOC_FACT_AQUI
        Chemin = "C:\Facturation\Facture seule\facture acquittee\" & Annee & Mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case DOC_FACT
        Chemin = "C:\Facturation\Facture seule\factures\" & Annee & Mois
        If Dir(Chemin, vbDirectory) = "" Then
            MkDir Chemin
        End If
    Case Else
        MsgBox "Impossibilité de déterminer le chemin" & vbCr & "Fin du programme"
        End
    End Select

    Client = F.Range("DOC_TITRE") & " - " & F.Range("DOC_CLIENT")

    Application.ScreenUpdating = False

    F.Copy
    With ActiveWorkbook
        With .Sheets(1)
            For Each Sh In .Shapes
                If Sh.Type <> msoPicture Then
                    Sh.Delete
                End If
            Next Sh
            F.Cells(3, 1) = F.Cells(3, 1).Value
            .Cells.Copy
            .Range("A1").PasteSpecial Paste:=xlPasteValues
            .Range("A1").Select
        End With
        Application.DisplayAlerts = False  ' Si fichier identique présent : l'écrase sans alerte
        '.SaveAs Filename:=Chemin & Client & ".xlsx"
        .Close
    End With
    MsgBox "Votre sauvegarde porte la référence : " & " " & Client '& vbCrLf _
         & "Le fichier PDF à été créé sous le nom : " & NomFicPDF
    Application.DisplayAlerts = True
     Export_PDF
End Sub
 

grisan29

XLDnaute Accro
bonjour
je viens d'essayer une adaptation du code de bebere, le classeur se saugarde bien en apparence mais où, la est le souci, voici le code modifié
Code:
Public Sub envoifacnue()    'sans les boutons et codes

      
        Dim F As Worksheet
        Dim Chemin As String, x As String
        Dim Client As String
        Dim Sh As Shape
        'Dim Mois As String, Annee As String
        'Annee = "\" & Year(Date)
         'Mois = MonthName(Month(Date)) & "\"
       
        Application.DisplayAlerts = False
       Chemin = "C:\Facturation"
   Set F = ThisWorkbook.Sheets(WS_FACTURE)
'içi mis DOC_DEVIS
    Select Case "DOC_DEVIS" 'F.Range("DOC_TYPE")
    Case "DOC_DEVIS"
        x = "devis\"

    Case "DOC_FACT_ACC"
        x = "factureacompte>"

    Case "DOC_FACT_AQUI"
        x = "factureacquittee\"

    Case "DOC_FACT"
        x = "facture\"

    Case Else
        MsgBox "Impossibilité de déterminer le chemin" & vbCr & "Fin du programme"
        End
    End Select

    CreateFolders Chemin

    F.Copy
    With ActiveWorkbook
        With .Sheets(1)
            For Each Sh In .Shapes
                If Sh.Type <> msoPicture Then
                    Sh.Delete
                End If
            Next Sh
            F.Cells(3, 1) = F.Cells(3, 1).Value
            .Cells.Copy
            .Range("A1").PasteSpecial Paste:=xlPasteValues
            .Range("A1").Select
        End With
        Application.DisplayAlerts = False  ' Si fichier identique présent : l'écrase sans alerte
        '.SaveAs Filename:=Chemin & Client & ".xlsx"
        .Close
    End With
    MsgBox "Votre sauvegarde porte la référence : " & " " & Client '& vbCrLf _
         & "Le fichier PDF à été créé sous le nom : " & NomFicPDF
    Application.DisplayAlerts = True
     'Export_PDF
End Sub
 

ChTi160

XLDnaute Barbatruc
Bonjour Pascal
Bonjour Le Fil ,Le Forum
je me suis intéressé à ce fil ,mais je n'ai pas compris Grand chose ! Lol
je me demande si le fait que la Ligne voir : 'Ici soit en commentaire
VB:
Application.DisplayAlerts = False  ' Si fichier identique présent : l'écrase sans alerte
        '.SaveAs Filename:=Chemin & Client & ".xlsx"   'Ici soit en commentaire
        .Close
ne fait que le Fichier ne soit pas enregistré ?????
dans le Chemin n'y a t'il pas un oubli ?
Soit : Chemin = "C:\Facturation\Facture seule\
au lieu de Chemin = "C:\Facturation\
dans la procédure de ton dernier Post .
de plus Lol
ou s'effectue la Sauvegarde au format PDF ?
pourquoi
x = "factureacompte>"
plutôt que x = "factureacompte\"
puis ensuite , aucune trace de notre x
tu vois je plane !
Dans l'attente
Amicalement
Jean marie
 
Dernière édition:

grisan29

XLDnaute Accro
bonjour Jean Marie
merci pour ta réponse, maintenant je vois que l'enregistrement ne vas pas dans le dossier "devis" pour le test
Code:
Public Sub envoifacnue()    'sans les boutons et codes

    
        Dim F As Worksheet
        Dim Chemin As String, x As String
        Dim Client As String
        Dim Sh As Shape
        'Dim Mois As String, Annee As String
        'Annee = "\" & Year(Date)
         'Mois = MonthName(Month(Date)) & "\"
     
        Application.DisplayAlerts = False
       Chemin = "C:\Facturation\Facture seule\"
   Set F = ThisWorkbook.Sheets(WS_FACTURE)
   Client = F.Range("DOC_TITRE") & " - " & F.Range("DOC_CLIENT")
'"içi mis DOC_DEVIS
    Select Case "DOC_DEVIS" 'F.Range("DOC_TYPE")
    Case "DOC_DEVIS"
        x = "devis\"

    Case "DOC_FACT_ACC"
        x = "facture acompte>"

    Case "DOC_FACT_AQUI"
        x = "facture acquittee\"

    Case "DOC_FACT"
        x = "facture\"

    Case Else
        MsgBox "Impossibilité de déterminer le chemin" & vbCr & "Fin du programme"
        End
    End Select

  
    CreateFolders Chemin

    F.Copy
    With ActiveWorkbook
        With .Sheets(1)
            For Each Sh In .Shapes
                If Sh.Type <> msoPicture Then
                    Sh.Delete
                End If
            Next Sh
            F.Cells(3, 1) = F.Cells(3, 1).Value
            .Cells.Copy
            .Range("A1").PasteSpecial Paste:=xlPasteValues
            .Range("A1").Select
        End With
        Application.DisplayAlerts = False  ' Si fichier identique présent : l'écrase sans alerte
        .SaveAs Filename:=Chemin & Client & ".xlsx"
        .Close
    End With
    MsgBox "Votre sauvegarde porte la référence : " & " " & Client & vbCrLf _
         & "Le fichier PDF à été créé sous le nom : " & Chemin
    Application.DisplayAlerts = True

End Sub
enregistrement hors dossier.jpg
 

ChTi160

XLDnaute Barbatruc
Re
je pense que c'est maintenant, qu'il faut penser à Notre petit x
soit
VB:
.SaveAs Filename:=Chemin & x & Client & ".xlsx"
ensuite je ne sais ou ce fait le choix de l'extension Ici : ".xlsx"

Dans l'attente
Bonne Journée
Amicalement
Jean marie
 

ChTi160

XLDnaute Barbatruc
Re
merci de ces précision mais ?????????????????????????????????????
LOL
Toi seul sais Lol
c'est peut être pour ça , que j'ai lâché prise !Lol
je crois aussi que les x sont en défaut ???
exporte le devis sans boutons ni codes ???
car quand je l'envoi par internet ????
Dans l'attente d'éventuelles explications qui me permettrons de comprendre et d'ainsi pourvoir t'aider Lol
Bonne journée
Amicalement
Jean marie
 

grisan29

XLDnaute Accro
re
concernant l'extension je ne sais pas ou elle se créer exactement, car c'est un code issu d'internet que j'ai adapter
surement par la dernière partie du code
la ca efface les boutons
Code:
For Each Sh In .Shapes
                If Sh.Type <> msoPicture Then
                    Sh.Delete
                End If
j'ai fait un test avec l'enregistreur
Code:
ActiveWorkbook.SaveAs Filename:= _
  "C:\Facturation\Facture seule\devis\DEVIS  N° 2017-07-001 - M duchmoll.xlsx", _
  FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
mais n'enregistre que ce devis
 
Dernière édition:

ChTi160

XLDnaute Barbatruc
Re
si c'est dans le Nom du Fichier qui est sauvegardé ?
je pense qu'il te suffit de les mettre en bout de Chemin lol
un truc du genre (non testé)
VB:
.SaveAs Filename:=Chemin & x & " " & Annee &"-"& Mois &"-"& Client & ".xlsx"
bonne fin de Journée
Amicalement
Jean marie
 

Discussions similaires

Réponses
1
Affichages
291
Compte Supprimé 979
C

Statistiques des forums

Discussions
312 160
Messages
2 085 838
Membres
103 000
dernier inscrit
Nath13