XL 2016 Atteinte de la limite de zones d'impression

  • Initiateur de la discussion Initiateur de la discussion laronzo
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 !
 
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
 
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
 
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.
 
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 ?
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
247
Réponses
4
Affichages
360
Réponses
3
Affichages
534
Retour