XL 2010 Macro enregistrement PDF + choix des feuilles

safranien

XLDnaute Occasionnel
Bonjour à tous

je vous sollicite car je ne suis pas très aguerri sur la manip VBA. Ci-joint un fichier exemple. Dans Feuil1 il y a un bouton qui me permet d'enregistrer en PDF les feuilles 1,4,5,6,8,9 et 10. Ces feuilles constituent un rapport de base. J'aimerais offrir la possibilité d'ajouter des feuilles et que lorsque je clique sur le bouton "Impression PDF"; il y ait une check box qui me permette de choisir les feuilles à ajouter. Par défaut, seraient cochées les cases correspondant aux feuilles de base citées précédemment. Voir l'onglet "Donnees" dans lequel j'ai imagé cela.

Deux autres questions :

j'ai essayé de manier le code présent dans mon fichier récupéré sur un forum mais il ne comportait pas ce qu'il fallait faire pour dissocier les feuilles et revenir sur une feuille précise la feuille 1). Ce que j'ai écrit est certainement très moche et doit pouvoir être optimisé

With Sheets("Feuil12")
.Activate
End With
With Sheets("Feuil1")
.Select
End With

Pour finir, j'exécute cette macro actuellement sur un fichier qui est assez lourd et chargé de données et de graphiques. Dans mon fichier, j'ai un menu déroulant qui me permet de passer d'une installation à une autre avec des mises à jour de données et de calculs. Je lance l'impression PDF, je passe au site suivant etc. Pour les premieres impressions, tout se passe bien, j'ai, par exemple, 14 pages qui sortent dans mon PDF. Au bout du 4e ou 5e changement de site, quand je lance l'impression PDF, je n'ai plus que 10 pages qui sortent dans le PDF (je devrais toujours avoir 14 pages). Je suis obligé de fermer excel, de relancer le fichier, l'impression et là j'ai bien mes 14 pages. Je me dis qu'en fermant tout l'excel je dois vider une sorte de mémoire cache. Si c'est cela selon vous, est ce qu'il est possible d'insérer dans le code une fonction permettant de vider la mémoire à chaque lancement d'impression?

J'espère que vous pourrez m'aider.

Bonne soirée
 

Pièces jointes

  • Safranien - Impression PDF macro.xlsm
    47.8 KB · Affichages: 19
Solution
Re

Pour le changer le CodeName :

1593602863180.png


Fenêtre "Propriété" => F4 pour l'afficher...


Et pour ta dernière demande essaies comme ceci :

VB:
For Each WS In ThisWorkbook.Worksheets
  Select Case WS.CodeName
    Case "Feuil1", "Feuil2", "Feuil4", "Feuil6", "Feuil7", "X_Feuil3"
       Me.ListBox1.AddItem WS.Name
        If WS.CodeName = "Feuil4" Or WS.CodeName = "Feuil7" Or WS.CodeName = "X_Feuil3" Then
           Me.ListBox1.Selected(x) = True
        End If
         x = x + 1
  End Select
Next WS

Mais c'est lourd si tu dois changer souvent les feuilles ou si tu en supprimes ... Une méthode "générique" évitait ceci...

Bien à toi, à vous,
@+Thierry

EDIT Re Patrick, Salut Fanch55

safranien

XLDnaute Occasionnel
Salut kiki29

merci beaucoup pour ton lien. Super boulot que tu as fait. Cela semble répondre en grande partie à ce que je cherche à faire. Je pense que je vais galérer à adapter tes codes à mon fichier, étant donné que je ne comprends pas la moitié de ce qui est écrit lol
Sinon, pour éviter de devoir aller sur l'onglet spécifique Recap pour pouvoir faire ses choix d'impression, ce serait possible d'avoir une checkbox qui s'ouvre après avoir cliqué sur un bouton à la place?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir @safranien , @kiki29, le Forum

J'ai fait une approche par UserForm, qui dans ce cas est bien plus ergonimique pour la selection des feuilles...
J'y ai ajouté une touche perso pour faire une pré-selection auto de certains onglets en fonction de la couleur de leur "Tab"... (si ca peut t'inspirer....)

@safranien je te laisse découvrir, c'est plus "à la carte" sur ton fichier que la démo proposée par Kiki.

Pour optimiser/libérer le cache, il n'y a pas grand chose à faire en VBA, j'ai remis les Set d'objets à nothing, mais bon mis à part de fermer régulièrement Excel après avoir manipulé des fichiers très volumineux ou gourmants en ressources il n'y a pas de solution miracle.

Bonne soirée
@+Thierry
 

Pièces jointes

  • XLD_Safranien-ImpressionPDF_USF_MultiSheets_v00.xlsm
    60.4 KB · Affichages: 19

kiki29

XLDnaute Barbatruc
Salut, pour te répondre : j'avais fait ce fichier pour un intervenant extérieur, et au départ il y avait une Usf mais ce dernier ayant par la suite jusqu'à 30 à 50 feuilles (!) et voulant pouvoir permuter l'ordre de certaines feuilles dans une fusion, plus vraiment le choix.
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir kiki29

Ah oui dans ce cas, ca devient compliqué, c'est clair et dans les Propriétés de Worksheet on n'a pas à disposition le "Tag" ou autres..., donc je comprends ton choix.

Bonne soirée
@+Thierry
 

safranien

XLDnaute Occasionnel
Bonsoir @safranien , @kiki29, le Forum

J'ai fait une approche par UserForm, qui dans ce cas est bien plus ergonimique pour la selection des feuilles...
J'y ai ajouté une touche perso pour faire une pré-selection auto de certains onglets en fonction de la couleur de leur "Tab"... (si ca peut t'inspirer....)

@safranien je te laisse découvrir, c'est plus "à la carte" sur ton fichier que la démo proposée par Kiki.

Pour optimiser/libérer le cache, il n'y a pas grand chose à faire en VBA, j'ai remis les Set d'objets à nothing, mais bon mis à part de fermer régulièrement Excel après avoir manipulé des fichiers très volumineux ou gourmants en ressources il n'y a pas de solution miracle.

Bonne soirée
@+Thierry

Bonsoir Thierry

merci beaucoup pour ton aide. Je regarde tout ça demain et reviens vers toi.

Bonne soirée
 

safranien

XLDnaute Occasionnel
Thierry,

finalement j'ai jeté un premier oeil maintenant, trop pressé ^^

Ca à l'air de coller cependant, 3 questions :

_ on est d'accord que je peux supprimer tout le code dans le module 1, il ne sert plus à rien?

_ initialement, dans mon fichier, le PDF généré s'enregistrait dans le même dossier que celui où est enregistré l'excel. Maintenant, le PDF va s'enregistrer dans "Documents". Comment, dans ton code, puis-je remettre comme avant? Pour aller plus loin, en s'inspirant de ce qu'a fait kiki29, est ce que la macro pourrait créer un dossier (nommé "PASTEL PDF") dans le dossier où se trouve l'excel et enregistrer les PDF dans ce sous-dossier?

_ dans mon fichier de travail, les onglets que je veux voir cochés par défaut dans le USF sont de couleur différentes. Est-ce qu'à la place de définir une pré-sélection selon les couleurs des onglets, on peut le faire selon les noms des onglets (noms qui ne changeront pas dans le temps) ?

Merci
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @safranien , @kiki29, le Forum

Oh pour tes trois questions, oui ça ne mange pas de pain, comme on dit ...

  • 1) Oui j'ai supprimé le code inutile dans le Module1 de la v01.
  • 2) Oui pas de souci, j'ai ajouté ces éléments dans la v01. (Check avec Dir et Création avec MkDir)
  • 3) Oui pas de problème, la liste des onglets se trouve en dûr dans un Select Case dans la v01.

Bonne découverte et journée !
@+Thierry
 

Pièces jointes

  • XLD_Safranien-ImpressionPDF_USF_MultiSheets_v01.xlsm
    60.3 KB · Affichages: 26

safranien

XLDnaute Occasionnel
Bonjour Thierry

super merci beaucoup beaucoup. J'ai normalement réussi à tout reproduire dans mon fichier de travail. Ce qui m'amène à une dernière (normalement) question :
_ mon fichier est composé de 23 onglets mais je ne souhaite en voir apparaître que certains (12) dans la liste de choix de l'impression. Pourrais tu m'aider sur ce dernier point stp?
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @safranien , le Forum

N'as tu pas lu et regardé mon code pour le point 3 ???

3) Oui pas de problème, la liste des onglets se trouve en dûr dans un Select Case dans la v01

Ca se passe ici dans code du Private Module du UserForm1 :

VB:
Private Sub UserForm_Initialize()
Dim WS As Worksheet
Dim x As Integer

Me.Caption = "Selection Feuilles"

With Me.ListBox1
.MultiSelect = fmMultiSelectMulti
.ListStyle = fmListStyleOption
End With


For Each WS In ThisWorkbook.Worksheets
    Me.ListBox1.AddItem WS.Name
  
    Select Case WS.Name
    Case "Feuil1", "Feuil3", "Feuil4", "Feuil6", "Feuil7"
      Me.ListBox1.Selected(x) = True
    Case Else
     'Do Nothing
    End Select
  
  
    If WS.Tab.Color = 255 Then
    End If
    x = x + 1
Next

End Sub

Tu remplaces par ce que tu veux :

Case "Feuil1", "Feuil3", "Feuil4", "Feuil6", "Feuil7", "Feuil8", "Feuil9", "Feuil12", "Feuiletc"


Bonne journée
@+Thierry

EDIT PS en revoyant le code, le résidu de la v00 :
If WS.Tab.Color = 255 Then
End If
Peut être supprimé, puisque tu ne travailles pas par couleur d'onglet.
 
Dernière édition:

safranien

XLDnaute Occasionnel
Si si , ça je l'ai bien vu, et si je comprends bien, c'est pour définir les onglets qui doivent être cochés par défaut.
Ma question est que le USF m'affiche tous les onglets de mon classeur avec la possibilité de cocher. En plus des onglets cochés par défaut, je voudrais la possibilité de cocher des onglets supplémentaires mais pas touts les onglets du classeur. Beaucoup étant des onglets dédiés à des calculs et n'ayant aucun intérêt à pouvoir être sélectionnés pour être intégrés dans la mise en PDF.
Je ne sais pas si je me fais bien comprendre.
 

Discussions similaires

Statistiques des forums

Discussions
315 090
Messages
2 116 106
Membres
112 661
dernier inscrit
ceucri