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

_Thierry

XLDnaute Barbatruc
Repose en paix
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
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re Pat

Oh moi je ne m'embourbe pas vraiment, j'essaie d'orienter Safranien avec différentes possibilités pour qu'il fasse le choix qu'il préfèrera avec le moins de gadoue possible LoL, tout ceci dans des codes "abordables" sans bottes jusqu'aux genoux ! ;)

Mais c'est vrai que le CodeName de WorkSheet est rarement utilisé dans ce context de selection de feuilles...

@+Thierry
 

patricktoulon

XLDnaute Barbatruc
re
je récapitule
on a
  1. un classeur avec X feuilles
  2. l'impression pdf doit être sélective en fonction d'un array prédeterminé de feuilles + d'autre ou pas
  3. l'array prédétermine doit être (modifiable)
  4. la selection d'autre feuilles (en plus ) doit être dynamique (dialog)
posez vous les bonnes questions

comment parvenir a fonctionner selon le cahier des charges repondant à 1,2,3,4

perso je vois
1° un dialog pour paramétrer les predeterminés ( peut être enregistrer la liste modifié par ce dialog dans une feuille
2° un dialog pour sélectionner en plus ( ce que j'ai déjà donné)


@_Thierry
mise a part le contexte qu'il faut comprendre de la méthode responsive,les codes dans mon model sont de niveau débutant moyen
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick ... le forum,
@ Patrick ton fichier du post 23 est super bien et il me sera très utile. Merci Patrick :)
2 ch'ti points à signaler... est-il possible de :

1 - que l'UF supprime les sélections à la fermeture,
2 - signaler si aucune feuille n'est sélectionnée ?

Sinon super !
@+,
lionel,
 

patricktoulon

XLDnaute Barbatruc
re
bonjour lionel
1 - que l'UF supprime les sélections à la fermeture,
2 - signaler si aucune feuille n'est sélectionnée ?

allez refait ton analyse de mon fichier ;) ;)
1° il ne sélectionne pas de feuille et si tu parle de sélection dans la listbox je pige pas ta remarque puisque c'est le but de ce dialogue
2° oui tu a raison

je crains fort justement que tu n'ai pas bien compris le principe de responsif
qui est JUSTEMENT!!!au final simplement de délivrer une réponse a la fermeture du userform
de la même manière EN TOUT POINTS qu'un msgbox inputbox ou meme les app.dilog(".....") de excel

si toi ou thierry ouvrez un post a ce sujet je veux bien vous expliquer le principe de A à Z
l'explication de base tiendrait en moins de 10 ligne d'un paragraphe c'est pour vous dire a quel point c'est simple
 
Dernière édition:

safranien

XLDnaute Occasionnel
bon alors j'ai finalement retenu la solution de modifier le CodeName pour tenir compte des remarques d'adaptabilité en cas de changement de nom et cela fonctionne parfaitement.
C'est super, je suis trop content merci merci.

Je vais maintenant pouvoir étudier les autres manières de faire proposées sur ce fil.

@patrick; le cahier des charges est bien de :

_ afficher une liste précise d'onglets (dans mon cas, 12 (toujours les mêmes) sur les 29 que comporte mon fichier
_ parmi ces 12 onglets, 7 (toujours les mêmes) doivent être cochés par défaut (mais doivent pouvoir être décochés) pour être imprimés en PDF (constituant le rapport de base).
_ les 5 autres onglets doivent pouvoir être cochés pour éditer un rapport plus complet / à la carte

Merci encore à tous. Faut vraiment que je m'achète le VBA pour les nuls, que je comprenne déjà les termes array, string etc
Si vous avez un ouvrage à me conseiller pour apprendre, je suis preneur ^^
 

patricktoulon

XLDnaute Barbatruc
ok
est tu capable de me dire mis a part les 7 qui le sont d'office

les 5 autres comment sont il déterminés

car c'est là ou le problème réside avec les éventuels suppressions ou ajouts de feuilles
cette parti là ne peut être fixé sinon tu risque l’erreur "l'indice n'appartient pas a la selection"

comment veux tu lister 12 feuilles dont 7 fixes et 5 autres modifiables, si dans le cahier des charges il y a possibilité de suppression et/ou ajout de feuilles

a moins de les nommer avec un prefixe ou suffixe précis , tu aura certainement un jour une erreur
 

safranien

XLDnaute Occasionnel
ci-dessous la liste des 12 onglets à avoir dans ma liste et les 7 qui doivent être cochés par défaut.
Comme je disais, dans le principe je ne suis pas amené à ajouter des feuilles ou à modifier des noms mais on ne sait jamais et je demandais comment faire si cela arrivait. Mais en l'état actuel des choses, c'est ce rendu que je cherchais à obtenir.
En appliquant la méthode de Thierry, si je dois modifier le nom d'un onglet, il devrait continuer à se retrouver dans la liste puisque son code récupère les onglets dont le codename commence par X. Et si je créée une nouvelle feuille que je veux voir apparaître dans la liste, j'ajouterai un X au début du codename comme pour les autres. Et si je veux que cette nouvelle feuille soit cochée, j'ajouterai son nom dans la commande
Case "PASTEL", "Graph Consos", "Graph Puissances", "Nuage - Annuel", "Nuage - Hebdo", "Nuage - Quotidien", "Nuage - Dérivées (MA)"

Il n'y a que si je change le nom d'un onglet qui doit être coché par défaut dans la liste que je serai obligé de modifier le nom dans la commande ci-dessus.

1593611109233.png
 
Dernière édition:

Discussions similaires

Réponses
8
Affichages
348