Pb mise à jour TCD

PERRINFAB

XLDnaute Nouveau
Bonjour

Je sollicite votre aide pour mettre en place une macro qui devrait me faire gagner un temps précieux. Je travaille dans le domaine RH et j'ai mis en place un document excel me permettant d'éditer une fiche par salarié sur l'évolution de sa rémunération dans la société.

Ce document s'appuie essentiellement sur un tableau croisé dynamique dont le critère principal de sélection est le matricule du salarié. J'ai joint un fichier simplifié "Test BSI" permettant de comprendre ma problématique :
- feuille TCD qui exploite les données de la feuille Base
- feuille liste qui contient les salariés de l'entreprise

Je souhaite mettre en place une macro qui permette :
1 - de sélectionner le 1er salarié de la feuille "Liste"
2 - d'actualiser le TCD
3 - d'imprimer la feuille TCD sur papier puis sous format PDF à sauvegarder automatiquement sous le nom + prénom du salarié
4 - de sélectionner le second salarié et de répéter les actions 2 et 3
5 - de sélectionner le 3ème salarié et de répéter les actions 2 et 3
6 - et ainsi de suite jusqu'à ce que le matricule soit vide (fin de liste)
Nota : j'ai plus de 400 lignes dans ma base réelle

Débutant en VBA je patine totalement et ne parviens pas à démarrer le programme ... ni à le terminer d'ailleurs.

Si l'une ou l'un d'entre vous à déjà mis en œuvre ce type d'application alors je suis à l'écoute car j'ai plus de 400 fiches à réaliser.

Merci d'avance

Fab
 

Pièces jointes

  • Test bsi.zip
    13.7 KB · Affichages: 31

JCGL

XLDnaute Barbatruc
Re : Pb mise à jour TCD

Bonjour à tous,

Peux-tu tester ce code :
Code:
Option Explicit

Sub Imprime()
Dim x As Byte

Application.ScreenUpdating = 0
For x = 2 To Sheets("Liste").Range("A65536").End(xlUp).Row
ActiveSheet.PivotTables("Tableau croisé dynamique1").PivotFields("Matricule").CurrentPage _
= Sheets("Liste").Range("A" & x).Value
ActiveWorkbook.RefreshAll
ActiveWindow.SelectedSheets.PrintOut Copies:=1, collate:=True
ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
ActivePrinter:="Création PDF sur CPW2:", collate:=True
Next x
End Sub

Sur la base de ton fichier
Les imprimantes actives sont à modifier
A+ à tous
 
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Pb mise à jour TCD

Bonjour Fab, Jean-Claude:)

Peut être une autre solution ainsi :


Attention dans ton tcd, il renvoie un matricule "vide", lorsque je l'ai refait je n'avais pas ce souci.

bon dimanche
@+

Edition : code supprimé... j'avais pas tout compris moi... désolé
 
Dernière édition:

JCGL

XLDnaute Barbatruc
Re : Pb mise à jour TCD

Bonjour à tous,
Salut Pierrot :),

Une autre solution...
Ta solution est bien plus efficiente que la mienne
Je prends mais reste le problème du Nom du fichier sur l'imprimante PDF (j'utilise CutePDFWriter)

A++
A + à tous
 

JCGL

XLDnaute Barbatruc
Re : Pb mise à jour TCD

Bonjour à tous,

Après avoir défini la plage des Données de la feuille 'Base' par :
Code:
=DECALER(Base!$A:$H;;;NBVAL(Base!$A:$A))
pour éviter les 'Vides'.

Je ne peux que conseiller le code de mon ami Pierrot :
Code:
Option Explicit

Sub Imprime() 'Pierrot93 sur XLD
Dim P As PivotItem
With Sheets("TCD").PivotTables(1).PivotFields("Matricule")
    For Each P In .PivotItems
        .CurrentPage = P.Name
        Sheets("TCD").PrintOut
    Next P
End With
End Sub

Ceci pour une impression papier.

Il me semble que Michel XLD a une solution dans son Wiki pour les impressions PDF mais il faut la trouver tant ses pages et ses discussions sont nombreuses ;)

A++
A+ à tous
 

PERRINFAB

XLDnaute Nouveau
Re : Pb mise à jour TCD

Bonjour

Merci de vos messages qui m'ont apporté l'éclairage demandé

J'ai intégré la première solution qui après plusieurs tests fonctionne parfaitement.

Pour les éditions, je me suis inspiré des préconisations de Michel XLD en donnant à l'édition le nom renvoyé par une cellule.

'Imprimer le BSI sur l'imprimante
Sheets("BSI").Select
Application.ActivePrinter = "HP Deskjet 5900 Series sur Ne01:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'Imprimer le BSI dans un fichier PDF
Application.ActivePrinter = "Microsoft Office Document Image Writer sur Ne00:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"Microsoft Office Document Image Writer sur Ne00:", PrintToFile:=True, _
Collate:=True, PrToFileName:="F:\Bilan social individuel\" & Range("I2") & "\" & Range("H2").Value

C'est nickel

Merci de votre aide et bonne fin de journée

Fab
 

Discussions similaires

Réponses
5
Affichages
136

Membres actuellement en ligne

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2