Code a modifier pour séparer chemin devis et facture

bonjour a vous tous

j'ai le code issu de l'enregistreur,ci-dessous qui me permets de sauvegarder mes devis, facture, facture d'acompte facture acquittée, débarrassé des codes et boutons dans le même dossier mais je voudrais pouvoir les séparées pour les mettre chacun dans leurs dossiers respectif en fonction de l'affichage dans "D1"où "DOC_TITRE"

Sub envoifacnu()
    Dim F As Worksheet
Dim Chemin As String
Dim Client As String
Dim Sh As Shape

  Application.ScreenUpdating = False
  Set F = ThisWorkbook.Sheets(WS_FACTURE)

  Chemin = "D:\Facturation-v1s"

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

  Sheets(WS_FACTURE).Copy
  For Each Sh In ActiveSheet.Shapes
    If Sh.Type <> msoPicture Then
        Sh.Delete
    End If
  Next Sh
  Cells.Copy
  Range("A1").PasteSpecial Paste:=xlPasteValues
  Range("A1").Select
  Application.DisplayAlerts = False ' Si fichier identique présent : l'écrase sans alerte
  ActiveWorkbook.SaveAs Filename:=Chemin & "\Factureseule\" & Client & ".xlsx"
  ActiveWorkbook.Close
    Sheets(WS_FACTURE).Activate
    End Sub

Pascal

Bonsoir

Pour déterminer le bon chemin

 
Select Case Range("D1")
 Case "Facture"
      Chemin = "D:\Facturation-v1s\Factureseule\Factures\"
  Case "Devis"
      Chemin = "D:\Facturation-v1s\Factureseule\Devis\"
  Case "Facture acompte"
      Chemin = "D:\Facturation-v1s\Factureseule\Facture acompte\"
  Case "Facture acquitée"
      Chemin = "D:\Facturation-v1s\Factureseule\Facture acquitée\"
End Select

'
'
'
ActiveWorkbook.SaveAs Filename:=Chemin & Client & ".xlsx"
'
'
'

bonsoir banzai64

merci de ta réponse mais après essai je ne sais pas où est parti le document, mais peut etre ai je mal intégré ta solution

Sub envoifacnu()
    Dim F As Worksheet
Dim Chemin As String
Dim Client As String
Dim Sh As Shape

  Application.ScreenUpdating = False
  Set F = ThisWorkbook.Sheets(WS_FACTURE)

  Chemin = "D:\Facturation-v1s"

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

  Sheets(WS_FACTURE).Copy
  For Each Sh In ActiveSheet.Shapes
    If Sh.Type <> msoPicture Then
        Sh.Delete
    End If
  Next Sh
  Cells.Copy
  Range("A1").PasteSpecial Paste:=xlPasteValues
  Range("A1").Select
  Application.DisplayAlerts = False ' Si fichier identique présent : l'écrase sans alerte

  Select Case Range("DOC_TITRE")
 Case "Facture"
      Chemin = "D:\Facturation-v1s\Factureseule\Factures\"
  Case "Devis"
      Chemin = "D:\Facturation-v1s\Factureseule\Devis\"
  Case "Facture acompte"
      Chemin = "D:\Facturation-v1s\Factureseule\Facture acompte\"
  Case "Facture acquitée"
      Chemin = "D:\Facturation-v1s\Factureseule\Facture acquitée\"
End Select
ActiveWorkbook.SaveAs Filename:=Chemin & Client & ".xlsx"
 'ActiveWorkbook.SaveAs Filename:=Chemin & "\Factureseule\" & Client & ".xlsx"
  ActiveWorkbook.Close
    Sheets(WS_FACTURE).Activate
    End Sub

Pascal

Bonsoir,

Peut-être en rajoutant F. devant le dernier Range("DOC_TITRE")...

Peut-être....

Bonsoir cousinhub

comme tu l'a dit peut etre eh ben c'est averé ce n'est pas mieux je ne sais où est parti le documentet pourtant le bouton reste enfoncé peu de temps pour monter qu'il a fait quelquechose

Pascal

Re-,

En mode pas-à-pas, et que tu passes ton curseur sur "Chemin", qu'est-ce que ça indique?

re cousinhub

j'ai suivi ce que tu m'as dit et découvert que le bug vient de plus haut hors quand ca enregistrait dans le même dossiers pas de soucis

Pascal

Re-,

A ce moment du déroulement, c'est normal que F te renvoie "Nothing"..

Il faut dérouler en appuyant sur F8, jusqu'à la ligne qui détermine "Chemin", dans tes Select Case...

Bonjour

Tu n'es pas nouveau et tu sais que fournir un fichier est un bonus pour l'obtention d'une réponse

Amicalement

bonsoir banzai64

bien sur que je sais qu'il faut fournir un fichier exemple mais pour ce soir je ne sais si j'aurais le temps

ce fichier représente en faux la réalité

cousinhub

pour le pas a pas il fige excel a partir de la ligne

Sheets(WS_FACTURE).Copy

en créant un autre classeur figé lui aussi

il faut passer le gestionnaire de taches pour fermer excel

Pascal

Bonjour,

Comme ce n'est pas un onglet original, il n'est pas possible de répondre à coup sûr...

Dans la cellule D17, tu n'as aucun cas évoqué dans le Select Case (Facture acquittée suivie d'un numéro....)

Tu n'as aucune formule dans cet onglet (ou alors, je ne comprends pas du tout pourquoi tu veux faire un Cells.Copy, suivi d'un Paste Spécial (valeurs))

Bref, travailler sur ce fichier (j'ai uniquement téléchargé le fichier le plus en bas de ton post), n'est pas possible, car il ne semble pas représentatif de ton fichier réel...

Bon courage

bonsoir cousinhub

je pensais que le fichier que j'ai mis hier soir (voir ce matin) serai représentatif pour ce que j'attendais, concernant mon fichier réel il est ici https://www.excel-pratique.com/fr/telechargements/gestion-commerciale/classeur-devis-et-facturation-no119.phpmais je le fait évoluer pour avoir des factures où devis sans leurs codes et boutons mais en gardant le logo

donc le code que j'ai mis est dans le module Mgestion de mon fichier actuel mais pas dans celui du lien et j'ai rajouter un bouton pour que cela fonctionne,mais je préfèrerais que cela se fasse au moment d'enregistrer la facture en cliquant sur le bouton "Créé documents dans la Base" sur l'usf liste_boutons

j'ai également créer un dossier "factureseule" avec des sous dossiers que l'on voit dans mon premier post

j'ai également remplacer le fichier client par un autre mais je n'arrive pas le faire chercher les clients dans le classeur sous c:

de toute il faut que je commence essayer de comprendre les modules de classe car pour ce fichier je pense qu'il y a un mixage a faire

voila ce que je peux dire de plus ce soir

Pascal

Bonjour

Supprimes la macro placée dans le Module1 (risque de confusion)

Remplaces la macro actuelle qui est dans le module de la feuille par celle-ci

Private Sub envoifacnu_Click()
Dim F As Worksheet
Dim Chemin As String
Dim Client As String
Dim Sh As Shape

  Set F = ThisWorkbook.Sheets(WS_FACTURE)

  Select Case F.Range("D1")
  Case "DEVIS"
    Chemin = "D:\Facturation-v1s\Factureseule\Devis\"
  Case "FACTURE ACOMPTE"
    Chemin = "D:\Facturation-v1s\Factureseule\Facture acompte\"
  Case "FACTURE ACQUITTEE"
    Chemin = "D:\Facturation-v1s\Factureseule\Facture acquitée\"
  Case "FACTURE"
    Chemin = "D:\Facturation-v1s\Factureseule\Factures\"
  Case Else
    MsgBox "Impossibilité de déterminer le chemin" & vbCr & "Fin du programme"
    End
  End Select

  Client = F.Range("D1") & " - " & F.Range("J5")

  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

      .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
End Sub

bonjour BrunoM45

merci pour ta réponse que je n'ai pas encore essayer,le module1 n'existe plus dans le fichier que j'utilise

tu dit

Remplaces la macro actuelle qui est dans le module de la feuille par celle-ci

mais j'ai déjà le code du sous total dedans

bon je vais télécharger le classeur et essayer dessus

je pense qu'il y a une ligne de code a mettre derrière le bouton "enregistrer dans la base"pour le faire en même temps

Pascal

Bonjour

Hummm je dois sentir le gaz

J'ai pris comme base de travail le 4ème fichier que tu as posté le 05 Juil 2015, 23:22

Dans ce fichier tu as une macro dans un module et une macro dans le module de la feuille

bonjour Banzai

tu tout a fais raison la base de travail demandé était celle du 5 a 23h22 mais cousinhub que je salut, m'a dit

Comme ce n'est pas un onglet original, il n'est pas possible de répondre à coup sûr...

je lui ai donné dans le post de 06 Juil 2015, 18:33 le lien vers le bon fichier qui est en téléchargement dans la gestion commerciale

https://www.excel-pratique.com/fr/telechargements/gestion-commerciale/classeur-devis-et-facturation-no119.php

voila le fichier réel que j’essaie de modifier pour avoir des devis et factures débarrasser des codes et boutons

Pascal

Bonjour

Sur la base d'un fichier que TU as fourni, je te trouve une solution, il y a juste à dire c'est bon, c'est pas bon

C'est tout ce que je demande

Je dormirai quand même

bonsoir banzai64

merci pour le code que tu as donné et que j'ai essayer sur le fichier que j'ai mis le 5 a 23h22

et cela fonctionne très bien, il n'a que "facture acquiittée qui cause un bug a la dernière ligne

.SaveAs Filename:=Chemin & Client & ".xlsx"

avec l'erreur d'exécution 1004

sur le fichier réel je suis obliger de mettre le code en public où le mettre dans la même page de code que l'appel

Pascal

Bonsoir

grisan29 a écrit :

et cela fonctionne très bien, il n'a que "facture acquiittée qui cause un bug a la dernière ligne

Dans le code pour le chemin il faut rajouter un t à acquittée

 Case "FACTURE ACQUITTEE"
    Chemin = "D:\Facturation-v1s\Factureseule\Facture acquittée\"              ' Il faut rajouter un t
  Case "FACTURE"
    Chemin = "D:\Facturation-v1s\Factureseule\Factures\"
grisan29 a écrit :

sur le fichier réel je suis obliger de mettre le code en public où le mettre dans la même page de code que l'appel

IL faut le mettre en relation avec le boutopn, comme tu utilises un contrôle ActiveX, le code est bien placé dans le module de la feuille

bonjour Banzai64

merci de ta vue pour le manque du "t" qui as résolu sur le fichier joint mais tu dits

L faut le mettre en relation avec le bouton, comme tu utilises un contrôle ActiveX, le code est bien placé dans le module de la feuille

le code des boutons active x qui sont sur la feuille ont leurs codes dans le module Mgestion il n'y a que celui su sous total dans la feuille, car je l'ai mal ajouté et ne fonctionnait pas comme les autres

et pour ne pas ajouter de boutons il faudrait que l'enregistrement se fasse en même temps que le devis où factures

voici le code de la procédure d'enregistrement dont est issu une modification faite par toi

Private Sub CB_EnregistreDansLaBase_Click()
'procédure enregistrement sous PDF rectifié par BrunoM45 de excel-vba
  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)

  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 : 482338738   -   NAF : 4332A   -   RCS : 00032 -   N° TVA   :  FR05482338738" & Chr(10) & _
                                                     "assurance décennale n°6507730304 de chez AXA"

            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

  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

  With ThisWorkbook.Worksheets(WS_FACTURE).Range("DOC_TYPE")
    If .Value = DOC_FACT Or .Value = DOC_FACT_AQUI Then
        ConsommeLesArticlesDansLaBaseArticles
    End If
  End With

  If Sht.Range("DOC_TYPE") = DOC_FACT_ACC Then
    Dim Client As InfoClient: GetClientInfos Client
    Dim montant As Double
    Dim paiement As InfoPaiement
    GetHiddenPaiementInfoToWs ThisWorkbook.Worksheets(WS_FACTURE), paiement, montant
    AjoutePaiementDansLaBase ThisWorkbook, Client, paiement, montant
    AjouteFacturePayeDansLaBase DOC_FACT_ACC, ThisWorkbook
  End If

  If ThisWorkbook.Worksheets(WS_FACTURE).Range("Totaltva10") > 0.0001 And _
    ThisWorkbook.Worksheets(WS_FACTURE).Range("DOC_TYPE") <> DOC_DEVIS Then
      DoAttestation7Percent
  End If
  Me.Hide

End Sub

Pascal

Rechercher des sujets similaires à "code modifier separer chemin devis facture"