XL 2016 Atteinte de la limite de zones d'impression

laronzo

XLDnaute Nouveau
Bonjour à tous,

Je suis nouveau sur ce forum, J'utilise assez souvent Vba afin de me simplifier la vie pour l'utilisation de classeur excel.
Malheureusement, sur mon dernier classeur en date, je bute sur un obstacle.
J'ai créé une macro qui me permet de définir des zones d'impression en fonction de la présence ou non d'une valeur dans une des cellules de cette zone. La macro fait très bien son travail, mais lorsque que je dépasse un certain nombre de zones d'impression, j'ai une erreur d'exécution '1004' : "Impossible de définir la propriété PrintArea de la classe PageSetup".

Il semblerait que j'atteigne le nombre maximal de zones d'impression de la fonction PrintArea. Auriez-vous une solution pour contourner ce problème ?

Voici la macro en question :

VB:
Sub zoneimp()

Dim Plage As String
Dim plage2 As String
Dim place3 As String
Dim plagetot As String
Dim A As String
Dim C As String
Dim D As String
Dim E As String
Dim F As String

plage3 = "AA1:AH47"

Plage = "A1:I44"
A = 48

For I = 1 To 35

C = A - 1
D = A + 43

    If Sheets("Webbing - Schema").Range("I" + A) <> 0 Then

    Plage = Plage & "," & "A" & C & ":" & "I" & D

    End If

A = A + 46

Next

plage2 = "N1:V18"
A = 22

For I = 2 To 45
C = A - 1
D = A + 18

    If Sheets("Webbing - Schema").Range("V" + A) <> 0 Then

    plage2 = plage2 & "," & "N" & C & ":" & "V" & D

    Else

    End If

A = A + 20

Next

plagetot = Plage & "," & plage2 & "," & plage3
Sheets("Webbing - Schema").PageSetup.PrintArea = plagetot

End Sub

Merci d'avance pour votre aide !
 

laronzo

XLDnaute Nouveau
Bonjour,
Voici ce que me donne plagetot (C'est un peu long désolé) :
A1:I44,A47:I91,A93:I137,A139:I183,A185:I229,A231:I275,A277:I321,A323:I367,A369:I413,A415:I459,N1:V18,N21:V40,N41:V60,N61:V80,N81:V100,N101:V120,N121:V140,N141:V160,N161:V180,N181:V200,N201:V220,N221:V240,N241:V260,N261:V280,N281:V300,N301:V320,N321:V340,N341:V360,N361:V380,N381:V400,N401:V420,AA1:AH47
 

fanch55

XLDnaute Barbatruc
A1:I44,A47:I91,A93:I137,A139:I183,A185:I229,A231:I275,A277:I321,A323:I367,A369:I413,A415:I459,N1:V18,N21:V40,N41:V60,N61:V80,N81:V100,N101:V120,N121:V140,N141:V160,N161:V180,N181:V200,N201:V220,N221:V240,N241:V260,N261:V280,N281:V300,N301:V320,N321:V340,N341:V360,N361:V380,N381:V400,N401:V420,AA1:AH47
Le printarea est limité à 255 caractères.
Il est probable que certaines adresses sont redondantes.
vous pouvez tenter de simplifier les zones avec un union :
Code pour exemple :
VB:
Sub test()
Dim Plage As Range
    Plagetot = "A1:I44,A47:I91,A93:I137,A139:I183,A185:I229,A231:I275,A277:I321,A323:I367,A369:I413,A415:I459,N1:V18,N21:V40,N41:V60,N61:V80,N81:V100,N101:V120,N121:V140,N141:V160,N161:V180,N181:V200,N201:V220,N221:V240,N241:V260,N261:V280,N281:V300,N301:V320,N321:V340,N341:V360,N361:V380,N381:V400,N401:V420,AA1:AH47"
    Debug.Print Len(Plagetot), Plagetot
    p = Split(Plagetot, ",")
    For i = 0 To UBound(p)
        If Plage Is Nothing _
        Then Set Plage = Range(p(i)) _
        Else Set Plage = Union(Plage, Range(p(i)))
    Next
    Debug.Print Len(Plage.Address(False, False)), Plage.Address(False, False)
    ActiveSheet.PageSetup.PrintArea = Plage.Address(False, False)

End Sub
 

laronzo

XLDnaute Nouveau
Re-bonjour,
Tout d'abord, merci pour votre aide.
j'ai fait le test pour mon application, et ce n'est pas exactement ce dont j'ai besoin.
je vais essayer d'apporter un peu de précision.
Ma page est une suite de blocs comme le suivant:
1648127676715.png

La zone du bas permet d'ajouter une photo ou un schéma.

La macro "zoneimp" créer une zone d'impression pour chaque bloc s'il y a une valeur dans la case "length".
Lorsque je défini une zone d'impression propre à chacun des blocs, chaque bloc est affiché séparément sur une page différente. Ce qui m'évite de "bidouiller" les réglages d'impression pour que ça tombe juste.

Tandis que lorsque je créer une union de plusieurs zones d'impression, je me retrouve avec certains blocs coupés en deux entre deux pages.

Il y aurait-il une autre solution que d'utiliser Printarea ?

Mon but est d'avoir en sortie un fichier pdf avec un bloc par page sans à avoir à faire des réglages.

Encore merci pour l'attention que vous portez à mon problème.
 

laronzo

XLDnaute Nouveau
J'ai fait un test :
J'ai ajouté tous les blocs à la main un par un grace à la fonction :
1648133546815.png

(Je fais une nouvelle selection pour chaque bloc et je clique sur ajouter à la selection...)

Etonnamment, je n'ai pas de limite de plages d'impression, je peux avoir l'entièreté de mon document dans l'aperçu avant impression. Chaque bloc est sur sa propre page.

En parallèle, j'avais mis en route l'enregistreur de Macro. On voit bien la liste de printArea s'agrandit au fur et à mesure. Lorsque que j'atteins les 255 caractères, la liste arrête de grandir, mais les nouveau bloc sont bien présents dan l'aperçu avant impression. Où ces nouvelles plages sont-elles stockées ?
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 892
Membres
101 831
dernier inscrit
gillec