XL 2019 Zone impression multiple

Thomas-29

XLDnaute Nouveau
Bonjour à tous,

Je cherche une formule en VBA qui sélectionne une zone d'impression en fonction d'une valeur vrai ou fausse.

Feuille 1:
A1 = "oui" ou "non"
B1 = "oui" ou "non"
C1 = "oui" ou "non"

Feuille 2:
Si A1="oui" alors zone d'impression =A1:B2
si B1 ="oui" alors zone d'impression =A3:B4
si C1 ="oui" alors zone d'impression =A5:B7

Mais si A1="oui";B1="oui";C1="non" alors zone d'impressions = A1:B4
Mais si A1="oui";B1="non";C1="oui" alors zone d'impressions = A1:B2 et A5:B7
Mais si A1="non";B1="oui";C1="oui" alors zone d'impressions = A3:B7
ect....

J'ai trouvé comment choisir une zone mais pas additionner les zones :)

A savoir aussi, j'aurais une 100ène de zone d'impression différente

Merci d'avance.

Thomas
 

fanch55

XLDnaute Barbatruc
Bonjour,
La sélection multiple non contigüe n'est pas possible avec PageSetup.PrintArea .

Essayez ce code qui n'est pas parfait notamment pour les objets graphiques éventuels :
VB:
Sub PrintArea()
Dim CM As Variant, C As Variant
Dim RM As Variant, R As Variant
Dim I As Long
    With Worksheets("Feuil1")
       ' Sauvegarde des lignes et colonnes masquées
        With .UsedRange
            For I = .Column To .Column + .Columns.Count - 1
                If .Columns(I).Hidden = True Then CM = CM & I & " "
            Next
            For I = .Row To .Row + .Rows.Count - 1
                If .Rows(I).Hidden = True Then RM = RM & I & " "
            Next
        End With
        
        ' Affichage des areas désirés avant impression
        .Columns.Hidden = True
        .Rows.Hidden = True
        For Each Adr In Array("A1:B2", "A5:B7")
            With .Range(Adr)
                .Columns.Hidden = False
                .Rows.Hidden = False
            End With
        Next
        .PrintPreview
        
        ' Rétablissement de la feuille à son état d'origine
        .Columns.Hidden = False
        .Rows.Hidden = False
        For Each C In Split(Trim(CM)): .Columns(Val(C)).Hidden = True: Next
        For Each R In Split(Trim(RM)): .Rows(Val(R)).Hidden = True: Next
        
        Application.Goto .Cells(1, 1), True
    End With
    
End Sub
 
Dernière édition:

fanch55

XLDnaute Barbatruc
Re bonjour,
pour la partie choix des zones d'impressions,
Code:
With Worksheets("Feuil2")
    Select Case -(.[A1] = "oui") & -(.[B1] = "oui") & -(.[C1] = "oui")
        Case "000":
        Case "100": MsgBox "A1:B2"
        Case "010": MsgBox "A3:B4"
        Case "001": MsgBox "A5:B7"
        Case "110": MsgBox "A1:B4"
        Case "101": MsgBox "A1:B2 et A5:B7"
        Case "011": MsgBox "A3:B7"
    End Select
End With

/CODE]
 

Thomas-29

XLDnaute Nouveau
Bonjour Fanch,

Merci pour ton retour.

Cela me parai complexe a faire avec une centaines de choix en entrée.

Je déposerai le fichier lundi pour mon exemple. Il y a peux être plus simple car chaque tableau fais la taille d'une page. La mise en page de chaque tableau ne change jamais.

je me rend compte que je ne suis que au début de mon apprentissage VBA :)
 

Statistiques des forums

Discussions
314 627
Messages
2 111 305
Membres
111 095
dernier inscrit
Ahitos