Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Créer un document PDF avec affichage personnalisé

hatem1234

XLDnaute Junior
Bonjour à tous,
J'ai eu beaucoup de succès et de l'aide sur ce forum alors je partage avec vous un dernier projet dans lequel j'aimerais imprimer un tableau Excel vers un document PDF
Pour le moment, j'imprime bien les données sélectionnées et le document PDF est bien créée
Le problème est que le document PDF affiche les données exactement comme dans le tableau or je cherche à modifier l'affichage comme suit :

Titre1
Colonne 1 Colonne 2 Colonne 3 Colonne 8 Colonne 9 Etc

Titre2
Colonne 1 Colonne 2 Colonne 3 Colonne 10 Colonne 11 Etc

Je joins un fichier pour plus d'informations

Je ne sais pas si la solution passe par copier les données dans une autre feuille Temp ou si c'est possible de spéficier l'affichage du document PDF sans créer de nouvelle feuille Temp

Merci d'avance
 

Pièces jointes

  • ImprimerPDF.xlsm
    41.5 KB · Affichages: 48

grisan29

XLDnaute Accro
bonjour hatem1234 et le forum
j'ai un peu regarder ton classeur et ai trouvé 2 anomalies, maintenant corrige les et reviens
tu as mis
Code:
Option Explicit
Public ZonePrint As Range 'Définit la zone d'impression

Sub Imprimer()

Application.ScreenUpdating = False

With Sheets("Data").PageSetup

    .PrintTitleRows = Sheets("Data").Rows("2").Address
    .CenterHeader = "Liste des employés pour Alain"
    .LeftFooter = "&T"
    .CenterFooter = Format("&D", "yyyy-mm-dd")
    .RightFooter = "Page &P sur &N"
    .LeftMargin = Application.InchesToPoints(0.75)
    .RightMargin = Application.InchesToPoints(0.75)
    .TopMargin = Application.InchesToPoints(1)
    .BottomMargin = Application.InchesToPoints(1)
    .HeaderMargin = Application.InchesToPoints(0.5)
    .FooterMargin = Application.InchesToPoints(0.5)
    .PrintHeadings = False
    .PrintGridlines = True
    .PrintComments = xlPrintNoComments
    .CenterHorizontally = True
    .CenterVertically = False
    .Orientation = xlLandscape   'Portrait ou Landscape
    .Draft = False
    .PaperSize = xlPaperLegal   'xlPaperA4
    .FirstPageNumber = xlAutomatic
    .Order = xlDownThenOver
    .BlackAndWhite = False
    .Zoom = 100
End With

With Sheets("Data")

.Select

Dim Fin, Cel
  
    Fin = Sheets("Data").Range("A65535").End(xlUp).Row
  
    Set ZonePrint = Range("A2:P" & Fin)
  
    'Masquer la colonne du nom du directeur
    Sheets("Data").Columns("D").EntireColumn.Hidden = True
  
    'Masquer les lignes dont le nom du directeur est autre que Alain
    For Each Cel In ZonePrint.Range("D2:D" & Fin)
        If Not Cel.Value = "Alain" Then Cel.EntireRow.Hidden = True
    Next
 
  ZonePrint.ExportAsFixedFormat Type:=xlTypePDF, Filename:="ListeEmployésPourAlain", Quality:=xlQualityStandard, _
      IncludeDocProperties:=False, IgnorePrintAreas:=True, OpenAfterPublish:=True

Sheets("Data").Cells.EntireColumn.Hidden = False
Sheets("Data").Cells.EntireRow.Hidden = False

End With

Application.ScreenUpdating = True

End Sub

hors si tu l'observe bien with sheets "data" ne sert a rien qu'a sélectionner la feuille,puisque chaque ligne démarre par le nom de feuille
sauf une dont tu as oublier le . devant "range"
et il y a la fonction "printarea" qui sert pour définir les zones d'impressions, mais je ne sais pas l'adapter a ton cas
 

hatem1234

XLDnaute Junior
Bonjour Grisan29 et le forum,
voilà j'ai corrigé même si je pouvais comme-même créer le document PDF
J'ai donc laissé With Sheets("Data") et enlever le nom devant chaque ligne
Le problème demeure le même : comment Afficher les éléments dans le document PDF
Merci
 

Pièces jointes

  • ImprimerPDF-2.xlsm
    41.5 KB · Affichages: 29

jecherche

XLDnaute Occasionnel
Bonjour,

Je ne comprends pas bien... parlons seulement de la première page pour l'instant ...
À l'impression, tu veux masquer les colonnes D,E,F,G sur la première page ou seulement les éléments du Titre ... i.e. ligne 2 (D2:G2) ?


Jecherche
 

hatem1234

XLDnaute Junior
Bonjour,
Voici ce que je cherche à faire : Afficher dans un document PDF les colonnes appropriées pour chaque catégorie d'employés
En d'autres termes, afficher les colonnes comme suit :

Gestionnaires : Colonnes B, C, E et P
Cadres : Colonnes B, C, E et O
Agents : Colonnes B, C, E, L, M et N
Commis : Colonnes B, C, E, F, G, H, I, J et K

Merci
 

job75

XLDnaute Barbatruc
Bonjour hatem1234, grisan29, jecherche,

Voyez dans le fichier joint les 4 tableaux de la feuille "PDF" dotés de formules matricielles très classiques.

Grâce à ces formules le code du bouton est vraiment très simple :
Code:
Private Sub CommandButton1_Click()
On Error Resume Next
Cells.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Hidden = True
On Error GoTo 0
Me.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\ImprimerPDF.pdf" 'à adapter
'---RAZ---
Rows.Hidden = False
End Sub
Quant à "aucun nom trouvé" c'est tout à fait inutile si l'on a de bonnes lunettes

A+
 

Pièces jointes

  • ImprimerPDF(1).xlsm
    57.1 KB · Affichages: 33

hatem1234

XLDnaute Junior
Bonjour Jobs75 et le forum,
C'est une bonne idée et si je comprends bien, il faut créer une nouvelle feuille nommée PDF et dans laquelle on doit créer 4 nouveaux tableaux pour chacun des employés : Gestionnaire, Cadre, Agent et Commis
Par la suite, il est vrai que le bouton pour imprimer le PDF devient facile (un peu comme dans mon fichier original)
J'avoue que je suis plutôt à la recherche de solution entièrement en VBA et qui ne demande pas de créer de nouvelles feuilles dans le classeur
Je vais m'inspirer de ton beau travail pour l'adapter à mon but
Si vous avez d'autres solutions en VBA seulement et qui ne passent pas par la création de nouvelles feuilles, n'hésitez surtout pas à les partager
Merci bien
 

job75

XLDnaute Barbatruc
Bonjour hatem1234, le forum,

Si vous avez d'autres solutions en VBA seulement et qui ne passent pas par la création de nouvelles feuilles, n'hésitez surtout pas à les partager
Allons allons, pour créer un fichier PDF il faut bien exporter une feuille formatée correctement !

Mais si vous voulez masquer les 4 tableaux sources c'est facile, voyez ce fichier (2) et la macro :
Code:
Private Sub CommandButton1_Click()
Dim i As Byte, P As Range
Application.ScreenUpdating = False
Rows.Hidden = False
Rows("1:9").Hidden = True 'lignes à adapter éventuellement
On Error Resume Next
Cells.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Hidden = True 'masque les valeurs d'erreur
For i = 1 To 4
  Set P = Cells(15 * i - 3, 2).CurrentRegion 'cellule initiale B12 à adapter éventuellement
  Set P = P.Resize(P.Rows.Count + 1)
  With Shapes("Label" & i)
    .Left = P.Left - 3: .Top = P.Top - 3: .Width = P.Width + 6: .Height = P.Height + 6
    If IsError(P(2, 1)) Then .Visible = True
  End With
Next
Me.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & [D2] & ".pdf" 'à adapter
'---RAZ---
For i = 1 To 4
  Shapes("Label" & i).Visible = False
Next
Rows("10:69").Hidden = True 'lignes à adapter éventuellement
Rows("1:9").Hidden = False 'lignes à adapter éventuellement
ActiveWindow.ScrollRow = 1
End Sub
Pour les miros j'utilise 4 Labels avec le texte "Aucun nom trouvé".

Le fichier PDF porte maintenant le nom du directeur recherché.

A+
 

Pièces jointes

  • ImprimerPDF(2).xlsm
    63.1 KB · Affichages: 48

hatem1234

XLDnaute Junior
Bonjour job75,
Je vais regarder ta solution car je la trouve pas mal intéressante
Ce que j'ai essayé d'éviter c'est de créer une nouvelle feuille mais ta solution fonctionne bien même si elle passe par celà
je pense également à créer une feuille temporaire et la supprimer une fois le PDF enregistré
Je vous reviens avec d'autres fichiers à jour
Merci encore pour cette idée
 

job75

XLDnaute Barbatruc
Bonjour hatem1234,

je pense également à créer une feuille temporaire et la supprimer une fois le PDF enregistré

Bonjour la galère, car il faut tout reformater à chaque fois dans la feuille temporaire.

Il est bien plus simple de masquer la feuille des 4 tableaux, l'afficher pour la création du fichier PDF puis la remasquer.

Mais visiblement vous êtes têtu...

A+
 

mdo100

XLDnaute Occasionnel
Bonjour à toutes et tous,

Bof, pourquoi s'évertuer a trouver une solution à hatem1234, puisque les réponses ne lui sont apparemment pas satisfaisante.
Je dis ça parce que hatem1234 ou misig sur un autre forum pose la même question aujourd'hui à 9h35.
j'dis ça, j'dis rien !
 

Pièces jointes

  • Capture.JPG
    118.5 KB · Affichages: 39

mdo100

XLDnaute Occasionnel
Bonjour job75,

Oui j'avais vu aussi, ce n'ai pas interdit d'aller voir ailleurs si l'herbe y est plus verte, mais quand on pose une question sur un forum, on va jusqu'au bout, ne serait-ce que pour respecter les contributeurs de leurs efforts.

Il y a autant de compétence ici, comme ailleurs.

C'est comme ça

Bonne fin de dimanche.
 

Discussions similaires

Réponses
1
Affichages
439
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…