Macro VBA pour export PDF suivant lignes filtrées (Résolu)

Dollismine

XLDnaute Nouveau
Bonjour,

Dans le fichier suivant j'aurais besoin d'une macro (je l'exprime de manière littérale car je ne connais rien au VBA) :

- Pour 1 ou plusieurs mois sélectionnés, exporte moi un PDF individuel pour chaque personne reprenant son détail de vente + son total (le petit tableau de 2 lignes en haut de feuille), choix du dossier de destination, et enregistrer sous PDF avec les initiales de la personne + nom du mois filtré (ex : AJ - Mars 2019)

Questions accessoires :
  • Si je rajoute ultérieurement des onglets au classeur, est-ce qu'il faudra modifier la macro ? (je suppose qu'on peut lier la macro uniquement à la feuille active)
  • Les personnes sont identifiées par leurs initiales. Y'a t'il un moyen de répercuter le nom complet de la personne sur le PDF (exemple, AJ dans le fichier devient Aurélien Jojo sur le PDF, en titre)
Je suppose que ça passe par une sorte de table à créer dans un onglet.

Merci d'avance à ceux qui prendront le temps
 

Pièces jointes

  • Suivi Ventes.xlsx
    22.2 KB · Affichages: 7
C

Compte Supprimé 979

Guest
Bonsoir Dollismine,
Voici ton fichier avec une solution à tester
Pas de soucis avec l'ajout d'onglet
La base avec le nom complet est à créer dans la feuille "Params"
A+
 

Pièces jointes

  • Dollismine_Suivi Ventes.xlsm
    35 KB · Affichages: 30

Dollismine

XLDnaute Nouveau
Un grand merci BrunoM45 pour ton aide et ton temps. Je ne vois ta réponse que ce matin (désolé pour le double sujet sur un autre forum, je craignais que ma demande ne trouve pas de réponse)

J'ai une erreur d'exécution 1004 "Document non enregistré. Le document est peut-être ouvert ou une erreur s'est produite lors de l'enregistrement"[/i] ...je pense que c'est relatif au chemin d'accès du dossier.

Je vais essayer d'aller voir le code, si je peux changer ça.
 

Dollismine

XLDnaute Nouveau
Vu et trouvé, merci.

Par contre, même avec le mois filtré, la macro génère l'enregistrement de tous les mois (alors que je ne voudrais que le mois sélectionné)

Détails (rien de vital, je ne voudrais pas trop abuser):
-Est-ce qu'il est possible sur le PDF généré de ne pas voir le bouton "Exporter PDF" ?
-Est-ce qu'il est possible d'avoir le nom complet de la personne en entête du PDF (en plus du nom de fichier)?
 
Dernière édition:

Dollismine

XLDnaute Nouveau
Dernière question (après j'arrête !)

Est-ce qu'il est possible d'avoir une boîte de dialogue qui s'ouvre pour définir le chemin du dossier d'enregistrement ? (plutôt qu'un emplacement fixe et "imposé"...tout en gardant la même méthode de nommage des pdf générés)
Juste lui dire "enregistre moi tout à tel endroit".

Mille mercis !
 
C

Compte Supprimé 979

Guest
Re,
Je suis d'humeur généreuse, mais n'en profite pas trop
Voici le fichier modifié avec demande du dossier de destination
 

Pièces jointes

  • Dollismine_Suivi Ventes.xlsm
    37.4 KB · Affichages: 30

Dollismine

XLDnaute Nouveau
:oops:
Je comprends bien, et de mon côté je fais des recherches avant de poser les questions.
Malheureusement, quand tu ne connais pas le VBA, ni la logique du code de manière générale, c'est compliqué de formuler son besoin (d'autant plus que les idées viennent petit à petit...)....alors aller trifouiller dans le code, ça devient costaud (super tes explications sur chaque ligne, ça permet déjà d'y voir plus clair).

Sauf erreur de ma part, la dernière modification renomme le PDF au nom du dossier de destination et sauvegarde sur le bureau (et non dans le dossier choisi) o_O

J'avais trouvé ça hier (en gras la partie qui me semble gérer la demande du dossier de destination, mais je n'en suis pas certain et ne sait pas la relier avec le reste du code qui permet de renommer le PDF suivant l'artisan et le mois concernés)

Sub PDFActiveSheet()
'www.contextures.com
'for Excel 2010 and later
Dim wsA As Worksheet
Dim wbA As Workbook
Dim strTime As String
Dim strName As String
Dim strPath As String
Dim strFile As String
Dim strPathFile As String
Dim myFile As Variant
On Error GoTo errHandler

Set wbA = ActiveWorkbook
Set wsA = ActiveSheet
strTime = Format(Now(), "yyyymmdd\_hhmm")

'get active workbook folder, if saved
strPath = wbA.Path
If strPath = "" Then
strPath = Application.DefaultFilePath
End If
strPath = strPath & "\"

'replace spaces and periods in sheet name
strName = Replace(wsA.Name, " ", "")
strName = Replace(strName, ".", "_")

'create default name for savng file
strFile = strName & "_" & strTime & ".pdf"
strPathFile = strPath & strFile

'use can enter name and
' select folder for file
myFile = Application.GetSaveAsFilename _
(InitialFileName:=strPathFile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Select Folder and FileName to save")


'export to PDF if a folder was selected
If myFile <> "False" Then
wsA.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=myFile, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False
'confirmation message with file info
MsgBox "PDF file has been created: " _
& vbCrLf _
& myFile
End If

exitHandler:
Exit Sub
errHandler:
MsgBox "Could not create PDF file"
Resume exitHandler
End Sub
 
C

Compte Supprimé 979

Guest
Non,

C'est simplement l'antislash de fin que j'ai oublié de mettre et comme je n'ai pas tout testé :p
Avant
VB:
' Demande à l'utilisateur de choisir le dossier d'enregistrement
  sPath = ChoixDossier("C:\", "CHOIX du DOSSIER de DESTINATION")
  ' Vérifier si dossier choisi, sinon on sort de la procédure
  If sPath = "" Then
    MsgBox "Aucun choix de dossier, abandon de la procédure !", vbExclamation, "PAS de DOSSIER..."
    Exit Sub
  End If
  '
  ' Créer une instance de dictionnaire pour enregistrer les initiales
  Set monDico = CreateObject("Scripting.Dictionary")
Après
Code:
  ' Demande à l'utilisateur de choisir le dossier d'enregistrement
  sPath = ChoixDossier("C:\", "CHOIX du DOSSIER de DESTINATION")
  ' Vérifier si dossier choisi, sinon on sort de la procédure
  If sPath = "" Then
    MsgBox "Aucun choix de dossier, abandon de la procédure !", vbExclamation, "PAS de DOSSIER..."
    Exit Sub
  End If
  ' Ajouter l'antislash de fin
  sPath = sPath & "\"
  '
  ' Créer une instance de dictionnaire pour enregistrer les initiales
  Set monDico = CreateObject("Scripting.Dictionary")

Après tu fais comme tu veux, mais je ne serais plus là pour t'aider
 

Pièces jointes

  • Dollismine_Suivi Ventes.xlsm
    36.6 KB · Affichages: 42

Discussions similaires

Réponses
3
Affichages
308

Statistiques des forums

Discussions
315 127
Messages
2 116 538
Membres
112 773
dernier inscrit
claire3651