IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impression de page dans onglets differents


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut Impression de page dans onglets differents
    Bonjour à tous
    Je recherche le code VBA pour imprimer la page 1 de l'onglet Feuil2 en étant sur la feuil1 ceci afin d'éviter d'aller sur cette feuil 2. Meme chose pour la page 2 de cette meme feuille et ainsi de suite.
    Dans l'attente de votre réponse.
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Il y a plusieurs solutions, en voici deux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Solution_1()
      Dim n As Byte
      With ThisWorkbook
       For n = 1 To .Worksheets.Count
       .Worksheets(n).PrintOut Copies:=1
       Next
      End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Solution_2()
      Dim n As Byte
      Dim ns As Byte
      With ThisWorkbook
        ns = .Worksheets.Count
        ReDim sh(1 To ns)
        For n = 1 To ns
         sh(n) = .Worksheets(n).Name
        Next
      .Sheets(sh).PrintOut Copies:=1
      End With
    End Sub
    La solution 2 imprime en une seule fois l'ensemble des feuilles ce qui est plus intéressant si l'on numérote les feuilles ou si on souhaite exporter toutes les feuilles dans un seul fichier pdf

    [EDIT]
    Attention : Si le classeur contient plus de 255 feuilles, il y a lieu de typer la variable n et ns pour la solution 2 comme Integer au lieu de Byte

  3. #3
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut
    Merci pour ta réponse mais cela ne correspond tout à faire à ma demande, ton code de la solution 1 m'imprime toutes les feuilles de tout mes onglets alors que j'aurais voulu que cela m'imprime qu'une seule feuille par code. Je met en pièce jointe mon fichier cela sera peut-être plus explicite. J'ai créé des boutons sur la feuille BASE DONNÉES pour imprimer les pages d'étiquettes. Comme tu peux le voir il y a 14 lignes pour chaque page et donc chaque page à son bouton d'impression. Le premier bouton renvoie à l'impression de la page 1 de la feuille ETIQUETTE et le 2° renvoie à la page 1 de la feuille PROMO et ainsi de suite.
    Je sais que cela et plus facile d'aller directement sur la page mais je ne suis pas l'utilisateur final il faut donc que je fasse le plus ludique possible.
    En te remerciant encore.
    DG
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Merci pour ta réponse mais cela ne correspond tout à faire à ma demande
    Si ma réponse ne correspond pas à votre demande c'est que celle-ci, n'était pas suffisamment explicite.

    Je met en pièce jointe mon fichier cela sera peut-être plus explicite. J'ai créé des boutons sur la feuille BASE DONNÉES pour imprimer les pages d'étiquettes. Comme tu peux le voir il y a 14 lignes pour chaque page et donc chaque page à son bouton d'impression. Le premier bouton renvoie à l'impression de la page 1 de la feuille ETIQUETTE et le 2° renvoie à la page 1 de la feuille PROMO et ainsi de suite.
    Je n'ai pas besoin d'ouvrir un classeur pour comprendre ce que l'on m'explique, une image suffirait amplement et cela permet à tout lecteur de cette discussion de la suivre sans être obligé d'ouvrir un classeur.

    Globalement, en VBA, on peut manipuler n'importe quel objet, cellule, feuille, etc. sans avoir à le sélectionner donc l'instruction ThisWorkbook.Worksheets("maFeuille").PrintOut Copies:=1 imprimera la feuille nommée "maFeuille" du classeur où se trouve le code VBA et ce sans devoir sélectionner celle-ci.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Points : 1 156
    Points
    1 156
    Par défaut
    Bonjour,

    j'ai tendance à préférer dans ce cas de figure

    en prenant la peine de renseigner la propiété "(name)" - dans l'exemple toto - de la feuille, ce qui évite de trimbaler des noms d'onglet dans le code.

    Nom : Sans titre.png
Affichages : 160
Taille : 13,3 Ko

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    en prenant la peine de renseigner la propiété "(name)" - dans l'exemple toto - de la feuille, ce qui évite de trimbaler des noms d'onglet dans le code.
    La propriété que vous évoquez est CodeName et pas Name et c'est également celle que je privilégie.
    Cependant comme l'initiateur de cette discussion ne sait pas que l'on peut manipuler des objets sans les sélectionner, je me dis qu'il est inutile de l'encombrer avec une autre notion dans un premier temps.
    S'il continue à réagir, je lui suggérerai alors de s'intéresser au CodeName de la feuille bien plus intéressant pour la maintenance.

    Voir mon billet sur le sujet Comment s’affranchir de la modification du nom de la feuille en utilisant son CodeName

  7. #7
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Si ma réponse ne correspond pas à votre demande c'est que celle-ci, n'était pas suffisamment explicite.


    Je n'ai pas besoin d'ouvrir un classeur pour comprendre ce que l'on m'explique, une image suffirait amplement et cela permet à tout lecteur de cette discussion de la suivre sans être obligé d'ouvrir un classeur.

    Globalement, en VBA, on peut manipuler n'importe quel objet, cellule, feuille, etc. sans avoir à le sélectionner donc l'instruction ThisWorkbook.Workseets("maFeuille").PrintOut Copies:=1 imprimera la feuille nommée "maFeuille" du classeur où se trouve le code VBA et ce sans devoir sélectionner celle-ci.
    Tout d'abord milles excuses que vous ayez mal interprété mon "cela ne correspond pas à ma demande" j'ai sans doute mal expliqué cette dernière mais mes connaissances en VBA sont quasi nul j'essai de progresser grâce à des gens comme vous, mais cela n'est pas toujours simple à comprendre. Votre code solution 1 m'a imprimé toutes les pages de mon classeur ce qui n'était pas le but recherché
    J'ai donc testé votre dernier code et je vous met en capture d'écran le code d'erreur que ce produit. Par rapport à ce dernier, j'ai l'impression qu'il va m'imprimer toute la "feuil1" alors que je ne voudrez que la page 1 de cette dernière. Étant donné mon très faible niveau je me trompe sans doute. Dans tout les cas merci de donner de votre temps pour des gens comme moi
    Images attachées Images attachées  

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par rapport à ce dernier, j'ai l'impression qu'il va m'imprimer toute la "feuil1" alors que je ne voudrez que la page 1 de cette dernière
    Si vous souhaitez définir les pages à imprimer, il faut ajouter les arguments nommés From et To soit pour n'imprimer que la page 1, ThisWorkbook.Worksheets("maFeuille").PrintOut From:=1, To:=1, Copies:=1

    Au lieu d'avoir autant de bouton qu'il n'y a de feuilles et de pages à imprimer, ne serait-ce pas plus simple de créer un UserForm avec la liste des feuilles et un TextBox ou une liste déroulante permettant de sélectionner la page à imprimer ?

    [EDIT]
    J'ai donc testé votre dernier code et je vous met en capture d'écran le code d'erreur que ce produit
    Effectivement, il y avait une coquille dans le code que j'ai publié qui était une erreur de syntaxe. Je l'ai corrigée

  9. #9
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Si vous souhaitez définir les pages à imprimer, il faut ajouter les arguments nommés From et To soit pour n'imprimer que la page 1, ThisWorkbook.Worksheets("maFeuille").PrintOut From:=1, To:=1, Copies:=1

    Au lieu d'avoir autant de bouton qu'il n'y a de feuilles et de pages à imprimer, ne serait-ce pas plus simple de créer un UserForm avec la liste des feuilles et un TextBox ou une liste déroulante permettant de sélectionner la page à imprimer ?

    [EDIT]

    Effectivement, il y avait une coquille dans le code que j'ai publié qui était une erreur de syntaxe. Je l'ai corrigée
    Un grand MERCI à toi pour m'avoir donné la solution.

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Merci pour le retour.
    Comme je l'ai déjà évoqué dans l'une de mes réponses, au lieu d'avoir une procédure par bouton et par feuille, il serait préférable de passer par une liste. Il existe une autre option avec l'instruction Application.Caller
    On référence la même procédure (macro) à tout les boutons, par exemple Intercept et grâce à cette instruction on peut identifier le nom du bouton

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Intercept()
      Dim t As String
      t = Application.Caller
      MsgBox "Vous avez cliqué sur le bouton nommé " & t
    End Sub
    Il faut bien entendu donner un nom explicite à chaque bouton et ensuite à l'aide d'un Select Case, on peut choisir la page à imprimer en fonction du nom du bouton appelant

  11. #11
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Merci pour le retour.
    Comme je l'ai déjà évoqué dans l'une de mes réponses, au lieu d'avoir une procédure par bouton et par feuille, il serait préférable de passer par une liste. Il existe une autre option avec l'instruction Application.Caller
    On référence la même procédure (macro) à tout les boutons, par exemple Intercept et grâce à cette instruction on peut identifier le nom du bouton

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Intercept()
      Dim t As String
      t = Application.Caller
      MsgBox "Vous avez cliqué sur le bouton nommé " & t
    End Sub
    Il faut bien entendu donner un nom explicite à chaque bouton et ensuite à l'aide d'un Select Case, on peut choisir la page à imprimer en fonction du nom du bouton appelant
    Je reverrai d'avoir toutes vos connaissances en la matière, heureusement que des gens comme vous prennent le temps de partager leur savoir avec les moins éclairés d'entre nous, et par conséquent de nous faire progresser un petit peu à chaque fois qu'une solution nous est donné. Si j'avais 20 ans je saurais quoi faire comme métier. Mille merci encore.

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 974
    Points : 29 003
    Points
    29 003
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je reverrai d'avoir toutes vos connaissances en la matière, heureusement que des gens comme vous prennent le temps de partager leur savoir avec les moins éclairés d'entre nous, et par conséquent de nous faire progresser un petit peu à chaque fois qu'une solution nous est donné.
    Les connaissances s'acquièrent par l'expérience et je donne ce que j'ai reçu. En 1999, je savais à peine utiliser les fonctions de base d'excel.
    Si j'avais 20 ans je saurais quoi faire comme métier
    Il n'y a pas d'age, ni pour apprendre ni pour se lancer dans de nouvelles aventures. J'ai à de maintes reprises changé complètement d'orientation professionnelle.

  13. #13
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 389
    Points : 2 022
    Points
    2 022
    Par défaut
    Salut,

    Autre solution, si celles proposées par Pierre ne conviennent pas:
    Tu constitues une liste (collection) de références vers les feuille à imprimer.
    Tu parcours la liste pour imprimer chaque feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public Sub Impression()
        Dim Sh As Collection
        Set Sh = GetSheetsToPrint
     
        Dim Ws As Excel.Worksheet
        For Each Ws in Sh
            Ws.PrintOut
        Next
    End Sub
     
    Private Function GetSheetsToPrint() As Collection
        Dim Wb As Excel.Workbook
        Set Wb = ThisWorkbook
     
        Dim Sh As Collection
        Set Sh = New Collection
     
        Sh .Add Wb.Worksheets("ETIQUETTE")
        Sh .Add Wb.Worksheets("PROMO")
        Sh .Add Wb.Worksheets("TABLEAU")
        Set GetSheetsToPrint = Sh
    End Function

  14. #14
    Membre du Club
    Homme Profil pro
    passionné
    Inscrit en
    Octobre 2018
    Messages
    115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : passionné

    Informations forums :
    Inscription : Octobre 2018
    Messages : 115
    Points : 61
    Points
    61
    Par défaut
    Citation Envoyé par deedolith Voir le message
    Salut,

    Autre solution, si celles proposées par Pierre ne conviennent pas:
    Tu constitues une liste (collection) de références vers les feuille à imprimer.
    Tu parcours la liste pour imprimer chaque feuille.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Public Sub Impression()
        Dim Sh As Collection
        Set Sh = GetSheetsToPrint
     
        Dim Ws As Excel.Worksheet
        For Each Ws in Sh
            Ws.PrintOut
        Next
    End Sub
     
    Private Function GetSheetsToPrint() As Collection
        Dim Wb As Excel.Workbook
        Set Wb = ThisWorkbook
     
        Dim Sh As Collection
        Set Sh = New Collection
     
        Sh .Add Wb.Worksheets("ETIQUETTE")
        Sh .Add Wb.Worksheets("PROMO")
        Sh .Add Wb.Worksheets("TABLEAU")
        Set GetSheetsToPrint = Sh
    End Function
    Merci pour cette solution, mais la solution de Philippe fonctionne à merveille.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Même champ dans onglets differents
    Par elmander dans le forum WebDev
    Réponses: 14
    Dernier message: 14/03/2010, 20h09
  2. recherche multiple (onglet different) dans excel
    Par xadocle dans le forum Excel
    Réponses: 4
    Dernier message: 21/08/2008, 17h21
  3. ajout dynamique d'une page dans un contrôle onglet
    Par oclone dans le forum VBA Access
    Réponses: 1
    Dernier message: 22/02/2008, 17h31
  4. Ouvrir une page dans une nouvelle fenêtre ou un nouvel onglet
    Par coco38 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 15
    Dernier message: 29/05/2007, 11h11
  5. Pied de page dans une page web lors de l'impression ???
    Par beegees dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 09/03/2006, 18h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo