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 :

zone d'impression en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut zone d'impression en VBA
    Bonsoir le Forum

    Mon souci, dans la feuille "BD", je voudrais masquer le contenu de certaines colonnes avant impression.

    En particulier: de A à B inclus, de Jà L et la colonne S
    J'y arrive sur les colonne J à L avec le code suivant mais quand je demande plus, il me met un message d'erreur 6 ou 13.

    votre aide serait la bienvenue.
    Cordialement
    Lps02

    Mon code (récupéré sur la FAQ)
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Option Explicit
    Option Base 1
     
     
    Sub Impression()
     
        MasqueContenuCell_Print Worksheets("BD"), Columns("J:L")
    End Sub
     
     
    Sub MasqueContenuCell_Print(Feuille As Worksheet, Plage As Range)
        Dim FormatInit() As Variant
        Dim Cell As Range
        Dim i As Integer
     
        'Redimesionne le tableau qui va stocker les formats initiaux
        ReDim Preserve FormatInit(Plage.Cells.Count)
     
        'Boucle sur la plage de cellules
        For Each Cell In Plage
            i = i + 1
            FormatInit(i) = Cell.NumberFormat
        Next Cell
     
        'Applique le format ;;; pour masquer le contenu des cellules.
        Plage.NumberFormat = ";;;"
        'Feuille.PrintPreview
        Feuille.PrintPreview
     
        i = 0
        'Boucle sur la plage de cellules pour réattibuer les formats initiaux
        For Each Cell In Plage
            i = i + 1
            Cell.NumberFormat = FormatInit(i)
        Next Cell
    End Sub

  2. #2
    Expert éminent 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
    Par défaut
    Essaies comme ceci
    (Regarde la déclaration de i et l'appel de la sub)
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Sub Impression()
     
    With Worksheets("BD")
        MasqueContenuCell_Print Intersect(.UsedRange, Union(.Range("A:B"), .Range("J:L"), .Range("S:S")))
    End With
    End Sub
     
     
    Sub MasqueContenuCell_Print(Plage As Range)
    Dim FormatInit() As Variant
    Dim c As Range
    Dim i As Long
     
    'Redimesionne le tableau qui va stocker les formats initiaux
    ReDim FormatInit(Plage.Cells.Count)
     
    'Boucle sur la plage de cellules
    For Each c In Plage
        i = i + 1
        FormatInit(i) = c.NumberFormat
    Next c
     
    'Applique le format ;;; pour masquer le contenu des cellules.
    Plage.NumberFormat = ";;;"
    'Feuille.PrintPreview
    Plage.Parent.PrintPreview
     
    i = 0
    'Boucle sur la plage de cellules pour réattibuer les formats initiaux
    For Each c In Plage
        i = i + 1
        c.NumberFormat = FormatInit(i)
    Next c
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut
    merci Mercatog

    peux tu m'expliquer la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MasqueContenuCell_Print Intersect(.UsedRange, Union(.Range("A:B"), .Range("J:L"), .Range("S:S")))
    par ailleurs, cela fonctionne, mais toutefois, il y a des blanc à la place des cellules concernées. Est il possible de revoir la pagination comme on pourrait le faire manuellement en :
    -masquant les colonnes sur la feuille excel,
    -copiant les cellules concernées dans une nouvelle feuille et en imprimant cette derniere (ce qui est long et rébarbatif)
    En clair, ces actions sont elles possible à partir de vba?
    Cordialement
    LPS02

  4. #4
    Expert éminent 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
    Par défaut
    Quand tu as écris C'est toutes les cellules des colonnes J et L qui seront traitées (pour excel 2003 tu auras plus de 65000 cellules)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Intersect(.UsedRange, Union(.Range("A:B"), .Range("J:L"), .Range("S:S")))
    On fait l'intersection de la plage utilisée avec l'union des colonnes A,B,J,L,S
    On aura la plage utile.

    J'avais seulement adapté ton code.

    Maintenant si tu veux cacher les colonnes juste avant l'impression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Impression()
     
    With Worksheets("BD")
        Union(.Range("A:B"), .Range("J:L"), .Range("S:S")).EntireColumn.Hidden = True
        .PrintPreview
        Union(.Range("A:B"), .Range("J:L"), .Range("S:S")).EntireColumn.Hidden = False
    End With
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Janvier 2012
    Messages : 177
    Par défaut
    Merci beaucoup Mercatog pour ta disponibilité et tes conseils avisés

    Cordialement

    Lps02
    (j'avais regardé à la question de cacher les colonnes en faisant une macro mais je n'avais pas la solution aussi complète)

  6. #6
    Expert éminent 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
    Par défaut
    Tu peux remplacer le code précédent (même fonctionnel fait à la hâte) par celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Impression()
     
    With Worksheets("BD")
        Union(.Range("A1:B1"), .Range("J1:L1"), .Range("S1:S1")).EntireColumn.Hidden = True
        .PrintPreview
        Union(.Range("A1:B1"), .Range("J1:L1"), .Range("S1:S1")).EntireColumn.Hidden = False
    End With
    End Sub

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

Discussions similaires

  1. [VBA-E] modifier une zone d'impression
    Par LeXo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 22h53
  2. [VBA-E] : Excel et word (Zone d'impression)
    Par Geoffray dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/06/2006, 12h34
  3. [VBA-E]Definir une zone d'impression
    Par byflo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/06/2006, 09h29
  4. [VBA-E] Range de la page d'une zone d'impression ?
    Par JulienCEA dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/05/2006, 15h39
  5. Vba excel agrandir la zone d'impression a droite
    Par mb95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/12/2005, 07h42

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