Selectionner toutes les pages visibles de mon fichier

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Marilo
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 1 avril 2016
Version d'Excel : 2010

Message par Marilo » 15 décembre 2017, 09:39

Bonjour,

Dans le cadre de mon travail, j'ai fait en vba tout un traitement de mes dépenses. Je souhaite, à la fin, l'exporter en pdf, après avoir masquer les feuilles qui ne m'intéressent pas (les feuilles contenant les données de base avant traitement notamment).

Je peux alors soit l'imprimer en pdf via pdf creator en imprimant tout le classeur actif, soit l'enregistrer en pdf, maintenant qu'Excel le permet. J'essaye donc de réaliser cet enregistrement.

A vrai dire, l'enregistrement fonctionne très bien. Le problème c'est qu'il ne m'enregistre que la première page visible de mon classeur. Si je sélectionne à la main toutes les pages visibles et que j'enregistre, j'ai alors toutes mes pages dans mon document pdf. Le soucis c'est que je n'arrive pas à sélectionner toutes mes pages via vba sans avoir à les nommer.

Sheets.Select
Activeworkbook.Sheets.Select
L'enregistreur ne macro se contente de sélectionner selon les noms, tout cela ne fonctionne pas.

Bref ma question est: comment sélectionner toutes les pages visibles de mon classeur?

Merci d'avance,

Marilo
Avatar du membre
vbMsgBoxHelpButton
Membre fidèle
Membre fidèle
Messages : 288
Appréciations reçues : 15
Inscrit le : 7 décembre 2017
Version d'Excel : 2007 FR

Message par vbMsgBoxHelpButton » 15 décembre 2017, 10:19

Bonjour, le code qui suit permet de sélectionner toutes les feuilles du classeur, et la gestion d'erreur les évite si la feuille est masquée :
Sub vbMBHB()
    Dim Feuille As Worksheet
    On Error Resume Next
    For Each Feuille In ThisWorkbook.Sheets
        Feuille.Select Replace:=False
    Next
End Sub
Avec ceci il n'y a pas besoin de connaitre le noms des feuilles.
vbMBHB
vbMsgBoxHelpButton ou bien 16384 pour les intimes :lole:
Je pars pour un très long voyage, donc aujourd'hui le 08/02/2018, je vous dis "au revoir" (°v°)°
M
Marilo
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 1 avril 2016
Version d'Excel : 2010

Message par Marilo » 15 décembre 2017, 13:59

Bonjour,

C'est parfait, merci beaucoup.

Par contre je ne suis pas sûr de comprendre le code.

On Error Resume Next: Pour chaque page en erreur, passer à la suivante, c'est cela?
Feuille.Select Replace:=False: Là je capte pas, le coup du Replace:=False. Qu'est-ce qui devient False?

Merci en tout cas

Marilo
Avatar du membre
vbMsgBoxHelpButton
Membre fidèle
Membre fidèle
Messages : 288
Appréciations reçues : 15
Inscrit le : 7 décembre 2017
Version d'Excel : 2007 FR

Message par vbMsgBoxHelpButton » 15 décembre 2017, 14:16

C'est mon secret... Je trouve des solutions sur le net "qui datent" mais qui marchent. Après le fonctionnement "exacte" du code... Je suis navré, mais vous avez raison sans le On Error Resume Next le code provoque une erreur sur la sélection d'une feuille masquée...Donc si erreur on continue. Par contre le Feuille.Select Replace:=False si on veut l'expliquer serait : on sélectionne la feuille suivante (par la boucle) mais on ne remplace pas celle(s) qui est (sont) déjà sélectionnée(s) Replace=: False, du coup on garde ce qui est déjà sélectionné, donc on a bien toutes les feuilles.
vbMBHB
vbMsgBoxHelpButton ou bien 16384 pour les intimes :lole:
Je pars pour un très long voyage, donc aujourd'hui le 08/02/2018, je vous dis "au revoir" (°v°)°
M
Marilo
Jeune membre
Jeune membre
Messages : 12
Inscrit le : 1 avril 2016
Version d'Excel : 2010

Message par Marilo » 15 décembre 2017, 14:37

Jsuis pas sûr d'avoir complètement capté le truc, n'empêche que c'est parfait !!

Merci pour l'explication :)

Bonne journée
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 15'759
Appréciations reçues : 577
Inscrit le : 27 août 2012
Version d'Excel : 365 Insider

Message par Jean-Eric » 15 décembre 2017, 14:47

Bonjour,
une alternative :
Public Sub TEST()
Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Sheets
        If ws.Visible = xlSheetVisible Then ws.Select Replace:=False
    Next ws
End Sub
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
Avatar du membre
vbMsgBoxHelpButton
Membre fidèle
Membre fidèle
Messages : 288
Appréciations reçues : 15
Inscrit le : 7 décembre 2017
Version d'Excel : 2007 FR

Message par vbMsgBoxHelpButton » 15 décembre 2017, 17:56

Bonsoir, c'est plus propre car pas d'erreur... Mais Est-ce mieux ? Plus rapide ? Autant c'est plus "léger" car il n'y a pas de mise en mémoire des codes erreurs...
Pour le "On Error Resume Next" vous aviez compris, si VBA détecte une erreur, cette instruction lui dit de continuer...
On lance la boucle sur toutes les feuilles du classeur.
On essaie de sélectionner la première, il n'y a pas d'erreur (elle est visible) elle est donc sélectionnée, mais on ne remplace pas la sélection d'avant. Hors il n'y a rien de sélectionner donc pas grave on sélectionne.
La boucle boucle, on passe donc à la feuille 2, elle est visible, on la sélectionne, mais on ne remplace pas la sélection d'avant, donc comme on a déjà sélectionné la feuille une et qu'on remplace pas, alors on se retrouve avec la sélection de la feuille 1 et 2.
on boucle,
On passe à la feuille 3, elle est masquée, on ne peut pas la sélectionner, cela déclenche une erreur VBA, mais comme VBA sait qu'il doit continuer, alors il boucle.
Feuille 4 visible on la sélectionne sans remplacer la sélection existante donc on l'ajoute on a bien 1,2 et 4 de sélectionnées !
etc....
vbMBHB
vbMsgBoxHelpButton ou bien 16384 pour les intimes :lole:
Je pars pour un très long voyage, donc aujourd'hui le 08/02/2018, je vous dis "au revoir" (°v°)°
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message