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 :

Imprimer zone d'impression selon critère [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut Imprimer zone d'impression selon critère
    Bonjour à tous,

    Mes connaissances en VBA étant toujours proche du néant j'ai besoin de votre aide.

    J'ai un fichier excel dans lequel j'ai défini 1 zone d'impression multiple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Print_area=Sheet1!$A$11:$R$46;Sheet1!$A$48:$R$83;Sheet1!$A$85:$R$120
    J’ai créé un bouton afin de lancer l’impression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWindow.SelectedSheets.PrintOut Copies:=1
    Ce que je souhaiterai c’est :
    -imprimer uniquement la première feuille si C13 n'est pas vide
    -imprimer la première et la deuxième feuille si C50 n'est pas vide
    -imprimer la première, la deuxième et la troisième feuille si C87 n'est pas vide

    Merci d'avance!

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Sub Printe()
    Dim Print_Area As String
     
    With Sheet1
        If .Range("C13") <> "" Then
            Print_Area = "Sheet1!$A$11:$R$46"
            If .Range("C50") <> "" Then
                Print_Area = Print_Area & ",Sheet1!$A$48:$R$83"
                If .Range("C87") <> "" Then Print_Area = Print_Area & ",Sheet1!$A$85:$R$120"
            End If
            .PageSetup.PrintArea = Print_Area
            .PrintPreview
        End If
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Super c'est exactement ce que je voulais.

    J'ai rajouté 2 nouvelles pages (ce qui m'en fait 5 en tout).

    J'ai donc adapté ton code mais j'ai un message d'erreur "erreur end with without with"

    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
    Dim Print_Area As String
     
    With Sheet1
        If .Range("C13") <> "" Then
            Print_Area = "Sheet1!$A$11:$R$46"
            If .Range("C50") <> "" Then
                Print_Area = Print_Area & ",Sheet1!$A$48:$R$83"
                If .Range("C87") <> "" Then
                    Print_Area = Print_Area & ",Sheet1!$A$85:$R$120"
                        If .Range("C124") <> "" Then
                            Print_Area = Print_Area & ",Sheet1!$A$122:$R$157"
                                If .Range("C161") <> "" Then
                                    Print_Area = Print_Area & ",Sheet1!$A$159:$R$194"
            End If
            .PageSetup.PrintArea = Print_Area
            .PrintOut
     
        End If
     
    End With
     
    End Sub
    As-tu une idée ?

    Encore merci

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour,
    J'y vois surtout de nombreuses expressions conditionnelles 'If ... Then" non terminées par un "End If" ...
    Ton indentation (gien faite, elle) fait sauter pourtant cela aux yeux.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Comme je l'ai dis , je suis plus que nul en VBA ...
    Du coup je ne vois vraiment pas...

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Bonjour,

    Il y a 2 manières d'écrire une instruction If:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If .Range("C50") <> "" Then
      Print_Area = Print_Area & ",Sheet1!$A$48:$R$83"
    End If
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If .Range("C50") <> "" Then Print_Area = Print_Area & ",Sheet1!$A$48:$R$83"
    La tienne est entre les 2.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Membre régulier
    Inscrit en
    Avril 2011
    Messages
    465
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 465
    Points : 97
    Points
    97
    Par défaut
    Mon problème est résolu.

    Merci à tous pour votre précieuse aide!

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 23/06/2009, 17h00
  2. Activer une ligne de zone de liste selon un critère
    Par dut-dut dans le forum VBA Access
    Réponses: 3
    Dernier message: 30/07/2008, 14h11
  3. imprimer plusieures zones d'impression sur la même feuille
    Par gratesnif dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/10/2007, 14h05
  4. [Etat] imprimer une partie d'un état selon critères
    Par The_Super_Steph dans le forum IHM
    Réponses: 1
    Dernier message: 13/06/2007, 16h46
  5. Réponses: 3
    Dernier message: 12/03/2007, 23h23

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