VBA bouton sauvegarde facture + incrémentation nom.pdf + envoimail auto [RESOLU]

Rv-centre

XLDnaute Nouveau
Bonsoir à tous,

Ce soir je planche sur mes bouton de sauvegarde sous format .PDF

Première macro :
je n'arrive pas à attribué le n° de sa commande au fichier .pdf a sauvegarder(cellule H5).

Seconde macro
Un bouton de sauvegarde qui enregistrerai automatiquement toutes les factures individuellement avec comme nom leur numéro de commande.

Merci de votre aide, a bientot
 

Pièces jointes

  • exemple.xlsx
    18.4 KB · Affichages: 118

Hieu

XLDnaute Impliqué
Salut,

Pour le bouton de sauvegarde :
Par enregistrement de macro, suffit ensuite de modifier ce qui est à modifier.
VB:
Private Sub CommandButton1_Click()
chemin = ThisWorkbook.Path & "\"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=chemin & Sheets("inv").Range("h5"), _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End Sub
 

Pièces jointes

  • exemple_v0.xlsm
    26.5 KB · Affichages: 117

Rv-centre

XLDnaute Nouveau
J'ai trouvé ça que je pourrais mettre après ta première macro, mais je dois l'adapter

Range("H5").Select
num = Range("H5").Value
num = num + 1
Range("H5").Value = num


Dans mon cas le +1 devrait signifie passé à la ligne du dessous (dans le menu déroulant "H5")
Une façon aussi d'enregistrer une partie des données en ne sauvegardant que les factures suivantes. Je vais voir ce que je trouve la dessus !
Ça me permettrait a terme de rajouter une boucle et d'avoir l'enregistrement automatique tant recherché :)

a bientot
 

Pièces jointes

  • exemple2.jpg
    exemple2.jpg
    27.6 KB · Affichages: 92
  • Facturation.xlsx
    13.3 KB · Affichages: 95

Hieu

XLDnaute Impliqué
Re,

juste un point : quand tu as une macro, il faut enregistrer en .xlsm.

voilà, ce que j'ai initié :
VB:
Sub impression()
chemin = ThisWorkbook.Path & "\"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=chemin & Sheets("inv").Range("h5"), _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
End Sub

et pour les boutons :
VB:
Private Sub CommandButton1_Click()
Call impression
End Sub
Private Sub CommandButton2_Click()
Do
    Sheets("inv").Range("h5") = Sheets("Données").Range("a3").Offset(i, 0)
    i = i + 1
    If Sheets("inv").Range("h5") = "" Then Exit Sub
    Call impression
Loop
End Sub
 

Pièces jointes

  • exemple_v1.xlsm
    27.5 KB · Affichages: 87

Rv-centre

XLDnaute Nouveau
Encore merci Hieu, ça fonctionne bien ! le must maintenant serait de lui dire d'enregistrer que la première page (de cette façon, je garde les boutons sur la page 2 pour qu'on ne les voit pas).

si je rajoute From:=1, To:=1 ca devrait fonctionner ?

Sub impression()
chemin = ThisWorkbook.Path & "\"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=chemin & Sheets("inv").Range("h5"), _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
From:=1, To:=1, _
OpenAfterPublish:=False
End Sub

Dans l'attente de te lire,
Cordialement
 

Rv-centre

XLDnaute Nouveau
J'ai trouvé la solution pour les boutons et la mise en page pour le coup, très simple en faite: Mode création => propriété => print False

serait-il possible de modifier cet ligne pour démarrer l'enregistrement à partir de la ligne sélectionné dans h5 (et non depuis a3)? ca me permettr

Sheets("inv").Range("h5") = Sheets("Données").Range("a3").Offset(i, 0)
i = i + 1
Merci ;)
 

Hieu

XLDnaute Impliqué
Salut,

Pas tout compris, avant ^^
Merci de mettre ton fichier (le but de ce site étant de partager les solutions trouvées)

Pour le post #7 , suffit d'ajouter un équiv sur le i pour ne pas démarrer à 0, pour trouver la ligne :
VB:
Private Sub CommandButton2_Click()
i = WorksheetFunction.Match(Sheets("inv").Range("h5"), Sheets("Données").Range("a3:a1048576"), 0) - 1
Do
    Sheets("inv").Range("h5") = Sheets("Données").Range("a3").Offset(i, 0)
    i = i + 1
    If Sheets("inv").Range("h5") = "" Then Exit Sub
    Call impression
Loop
End Sub

N'oublie pas de modifier le titre de ton post, et rajouter ==> [RESOLU]
++
 

Pièces jointes

  • exemple_v2.xlsm
    27.9 KB · Affichages: 96

Rv-centre

XLDnaute Nouveau
Tout fonctionne du premier coup Hieu, tu es l'homme de la situation ;) grâce à toi j'économise des heures de recherche et plus que ça... je commence a comprendre le code VBA (sans pour autant pouvoir écrire mes propres lignes...mais c'est déjà un début).
Merci infiniment pour ton aide
 

Rv-centre

XLDnaute Nouveau
Je pense a un quatrième bouton me permettant d'envoyer la facture au client par mail en .pdf avec le fichier déjà enregistré.

Voici le code bouton 4 :

VB:
With olMail
      .To = Sheets("Feuil1").Range("a1") (PRENOM.NOM@GMAIL.COM)
      .Subject = "test envoi fichier"
      .Body = "Vous trouverez ci-joint le fichier PDF ..."
      .Attachments.Add chemin
      .Send

Mon problème est pour donnée le chemin d'accès à mon fichier qu'on a enregistré avec cette macro :

VB:
chemin = ThisWorkbook.Path & "\"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=chemin & Sheets("Feuil1").Range("e19"), _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

par avance merci
 

Rv-centre

XLDnaute Nouveau
Voila le fichier facture mis a jour, bien plus complet que le premier avec toutes les macro que l'on a fait jusqu’à maintenant ! du bon travail.

D'ailleur pour la macro "send e-mail" l'adresse mail client se trouve en "e6" (rendu invisible en modifiant la couleur du texte en blanc)
VB:
.To = Sheets("Feuil1").Range("e6")

Pour le bouton mail auto, je voudrais avoir une confirmation visuel si le mail a déjà été envoyé (pour éviter de spammer le même destinataire plusieurs fois), ex : si mail envoyé alors "e41" = texte
En gros après avoir cliqué sur "send e-mail" la cellule "e41" sera rempli avec exemple : Facture envoyé par mail le "date daujourdhui"

on se rapproche du sommet !! merci ;)
 

Pièces jointes

  • exemple.xlsm
    43.7 KB · Affichages: 109

Hieu

XLDnaute Impliqué
Salut,

Je ne trouve pas ton code dans le fichier post #11.
La fichier que tu souhaites envoyer doit ressembler à ça :
VB:
chemin = thisWorkBook.path & "\"
With olMail
      .To = Sheets("Feuil1").Range("e6")
      .Subject = "test envoi fichier"
      .Body = "Vous trouverez ci-joint le fichier PDF ..."
      .Attachments.Add chemin & Sheets("Feuil1").Range("e19") & ".pdf"
      .Send

A tester ; Je ne m'y connais pas du tout en envoi de mail
 

Rv-centre

XLDnaute Nouveau
J'ai utilisé le code de BRUNOM45 et ca fonctionne très bien

VB:
Sub SendWithAtt()
' Nécessite la référence : Microsoft Outlook 1x Object Library
Dim olApp As Outlook.Application
Dim olMail As MailItem
Dim CurFile As String
Set olApp = New Outlook.Application
Set olMail = olApp.CreateItem(olMailItem)
' "C:\Users\Thierry\AppData\Local\Temp\MaFeuille.pdf "
CurFile = ThisWorkbook.Path & "\" & "MaFeuille.Pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=CurFile, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
With olMail
.To = "xxx@gmail.com"
.CC = "name2@domain2.com"
.Subject = "Main courante Flashover"
.Body = "Vous trouverez ci-joint le fichier PDF ..."
.Attachments.Add CurFile
'.Attachments.Add "c:\My Documents\book.doc"
.Display '.Send
End With
MsgBox "Merci de vérifier que le message apparait dans -messages envoyés- dans votre messagerie OUTLOOK."
' Effacer les variables objets
Set olMail = Nothing
Set olApp = Nothing
End Sub


Merci pour ton aide ;)
 

Rv-centre

XLDnaute Nouveau
Dernière pierre à ajouter a l'édifice, un bouton me permettant de rembourser la tva !

J'ai commencé mais je ne sais pas comment rédiger les lignes de code suivante..

VB:
Sub VATRefund()
    Dim NumerodeTVA As String
    NumerodeTVA = InputBox("Saisissez le numéro de TVA")
    Range("e12") = NumerodeTVA

End Sub

Lorsque je clic sur le bouton, on me demande de renseigner le numero de TVA, celui-ci est enregistré en e12.
maintenant je souhaiterai ajouter une condition si :
1 : Si on saisie, alors on va a l'étape suivante sinon end sub (jusque la ca devrait etre simple, je vais chercher après)
2 : Après avoir renseigné le numéro de TVA, la TVA doit passé a zéro euro et par la même occasion modifier le montant TTC qui se retrouve diminué.
3 : Ajout le texte "blabla1" dans la cellule ("c20")
4 : Ajout le texte "blabla2" dans la cellule ("c21")

Pour 3 et 4 je peux faire une condition SI si remplissage ou non de la cellule e12

Par avance merci de votre aide
 

Pièces jointes

  • exemple.xlsm
    47.2 KB · Affichages: 136
Dernière édition:

Statistiques des forums

Discussions
312 248
Messages
2 086 596
Membres
103 252
dernier inscrit
Ersar