Passer à l'élément suivant du "segment"
Bonjour,
Je me permets de solliciter de l'aide, car je n'ai pas trouvé la solution dans les forums existants.
Ma situation est la suivante:
J'ai un gros fichier de base de données, avec des données se rapportant dans un pivot.
J'ai une feuille "export" qui va rechercher les différentes infos dont j'ai besoin dans les pivots, selon la personne que je sélectionne dans mon segments.
Actuellement, j'ai une macro qui me permet d'exporter un PDF et de l'enregistrer dans un dossier spécifique. Cependant, au départ j'avais 10 personnes et choisir une à une les personnes dans le segment puis lancer la macro pour exporter chaque PDF était très pratique.
A l'heure actuelle, j'ai plus de 50 personnes, et j'aimerais pouvoir exporter l'entier des personnes dans des PDF invididuels.
Ma macro se présente comme suit:
Private Sub CreateFolder()
Dim DesktopFolderPath As String
DesktopFolderPath = CStr(CreateObject("WScript.Shell").specialfolders("Desktop")) & "\Exported PDFs"
'Check if the folder exists
If Dir(DesktopFolderPath, vbDirectory) = "" Then
'Folder does not exist, so create it
MkDir DesktopFolderPath
End If
End Sub
Sub SaveAsPDF2020()
Call CreateFolder
NAME = Range("B1").Value
Dim DTAddress As String
DTAddress = CreateObject("WScript.Shell").specialfolders("Desktop") & "\Exported PDFs"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DTAddress & Application.PathSeparator & "Document_" & NAME & "_2020" & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
Sub SaveAllAsPDF()
Dim Dlig As Integer, X As Integer, NumRec As Integer, rng As Range
Dim Ws1 As Worksheet
Set Ws1 = Worksheets("NAMEList")
LastRow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row 'Calculates the last row filled
For NumRecord = 1 To LastRow 'Number of records
Call CreateFolder
Call SaveAsPDF2020
Next NumRecord
MsgBox "All ( " & NumRecord - 5 & " ) documents have been saved on your desktop," & Chr(10) & "in the Exported PDFs folder.", vbInformation
End SubCependant, étant donné que ma macro va simplement rechercher le nombre de personnes dans ma liste, je me retrouve avec un seul PDF au final, car je n'ai pas trouvé comment faire passer "simplement" le segment à son élément suivant.
Le but étant que la macro aille rechercher le nombre d'enregistrement dans la liste, qu'elle sélectionne le premier élément du segment, qu'elle l'exporte en PDF, qu'elle passe ensuite au suivant et re-PDF, et ainsi de suite jusqu'au dernier élément du segment.
Est-ce qu'il y a un code intégrable pour faciliter le changement de segment ?
D'avance grand merci pour votre aide !
Bonjour,
en faisant l'hypothèse que la cellule pour sélectionner le nom est B1 sur la feuille export, voici une proposition d'adaptation réduite au minimum.
Sub SaveAllAsPDF()
Dim Dlig As Integer, X As Integer, NumRec As Integer, rng As Range
Dim Ws1 As Worksheet
Sheets("export").activate
Set Ws1 = Worksheets("NAMEList")
LastRow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row 'Calculates the last row filled
For NumRecord = 1 To LastRow 'Number of records
range("B1")=ws1.cells(NumRecord,1)
Call SaveAsPDF2020
Next NumRecord
MsgBox "All ( " & NumRecord - 5 & " ) documents have been saved on your desktop," & Chr(10) & "in the Exported PDFs folder.", vbInformation
End SubMerci pour ta réponse h2so4.
Le problème étant que B1 affiche la donnée retournée d'un VLOOKUP d'après la donnée d'un tableau croisé dynamique. C'est n'est pas une liste déroulante pour sélectionner les enregistrements. Du coup si je fais tourner ta macro (c'est un peu celle j'avais tenté de faire au départ), ça me change bien le nom en haut de ma feuille, mais aucune autre donnée ne suit. Et plus embêtant, ça m'écrase mon VLOOKUP au final.
La sélection de la personne se fait via un segment de tableau croisé dynamique, car lorsque je sélectionne une personne, ma feuille reprend toutes les données du pivot en lien direct, sans passer par un VLOOKUP du nom de la personne.
Est-ce que tu vois une solution ?
Merci de ton aide
Bonjour eriiic,
Voici un exemple du fichier. J'ai du tailler beaucoup d'informations pour l'anonymiser, donc c'est normal qu'il y ait des N/A.
Mais comme tu pourras le voir, je sélectionne la personne dont je souhaite l'extrait sur le segment "Faculty", et la feuille reprend les données du Pivot.
Je ne peux pas simplement avoir une liste déroulante, étant donné que les personnes sont séparées par catégories, et le moyen le plus pratique de filtrer uniquement la liste de personnes concernées, c'est les segments du pivot.
Merci de ton aide
Bonjour,
code adapté au fichier fourni
Sub SaveAll2020()
Dim Dlig As Integer, X As Integer, NumRec As Integer, rng As Range
Dim Ws1 As Worksheet, Wsp As Worksheet
Sheets("export").Activate
Set Ws1 = Worksheets("TeachersList")
lastrow = Ws1.Cells(Rows.Count, "A").End(xlUp).Row 'Calculates the last row filled
Set Wsp = Sheets("pivots")
pn = ""
With Wsp.PivotTables("CourseByFaculty18.02").PivotFields("Faculty")
For Numrecord = 1 To lastrow
Nom = Ws1.Cells(Numrecord, 1) 'name to select
On Error Resume Next
.PivotItems(Nom).Visible = True 'select name
If Err = 0 Then 'if name in pivot
.PivotItems(pn).Visible = False 'deselect previous name
pn = Nom 'previous name= current selected name
Call SaveAllPDF2020 '
End If
On Error GoTo 0
Next Numrecord
End With
MsgBox "All ( " & Numrecord - 5 & " ) documents have been saved on your desktop," & Chr(10) & "in the Exported PDFs folder.", vbInformation
End SubBonjour,
Merci pour ce code.
Je viens de tester et j'ai trois choses qui posent apparemment problème :
• Le premier vient peut-être de ma manière de reporter la liste des personnes: La macro prend en compte l'entier de la liste pour l'export, au lieu d'une liste préfiltrée par le premier segment (Déparement). Je joins le fichier avec ce champ complété pour l'exemple (je n'avais pas vu qu'il avait sauté dans mon premier fichier).
Le but étant de sélectionner en premier lieu si la personne est dans le département 1 ou 2, puis d'exporter la liste de ce département uniquement.
• Le second élément est le fait que, d'après comme j'ai testé, si je ne sélectionne pas le premier élément de la liste, l'export n'est pas complet et crée un PDF d'export appelé "multiple". Dans l'absolu, ce n'est pas dramatique, je peux informer les personnes qui utiliseront le fichier que pour un export complet il faut aller re-sélectionner le premier élément. Mais si on peut le programmer d'office ce serait encore mieux.
• La dernière chose : le compte du nombre de documents exportés dans le message en fin de macro : il me sort le nombre de 304 - je ne vois pas d'où cela peut venir.
Voyez-vous une solution, surtout pour le premier point ?
D'avance merci.
Re-Bonjour h2so4
Finalement, je me suis débrouillé avec votre code pour simplifier, c'est parfait merci.
J'ai ajouté des MsgBox pour avertir les utilisateurs de comment procéder, ai supprimé le compte du nombre de fichiers (finalement pas importants). Et si c'est fait correctement, ça exporte tout ce dont j'ai besoin.
MERCI pour votre aide !
Bonjour Dams,
merci pour ton retour et désolé de t'avoir oublié, j'avais lu ton message et j'avais l'intention d'y répondre dès que j'aurais été devant mon PC, mais ma mémoire a failli.
content que tu aies pu trouver une solution par toi-même.