XL 2016 Passer à la page suivante automatiquement

bennp

XLDnaute Occasionnel
ok, j'avais pas compris qu'il fallait que je lance ma procédure ..

je n'arrive pas à insérer ce que tu m'as dit en vert dans la fonction plage_suivante dans ma macro

VB:
Option Explicit
Private CelDéb As Range, CelCou As Range, CelPgBk As Range, _
   NbLMaxParPage, NbLVides As Long, NbColMax As Long, Wsh As Worksheet
 
Sub InitialiserMiseEnPage(ByVal Cel As Range, ByVal NbLMaxPg As Long, NbLVid As Long)
Rem. ——— Commence un garnissage de feuille à partir de la cellule Cel
'        en précisant qu'il ne doit pas y avoir plus de NbLMaxPg lignes dans une page
'        et qu'il faut laisser NbLVid lignes devant chaque PlageSuivante.
'    Exemple :
        InitialiserMiseEnPage ActiveSheet.Cells(13, "A"), 16, 6
Set CelDéb = Cel: Set CelCou = Cel: Set CelPgBk = Cel
NbLMaxParPage = NbLMaxPg: NbLVides = NbLVid
Set Wsh = Cel.Worksheet
CelDéb.Resize(1000000).EntireRow.Delete
Wsh.ResetAllPageBreaks
End Sub

Function PlageSuivante(TRés(), ByVal LMax As Long) As Range
Rem. ——— Verse LMax lignes du contenu de Trés dans une plage, laquelle est renvoyée
'        au programme appelant pour correction des formats et ajout de formules.
'    Exemple :
'        Dim LaPlage As Range, TR(), L As Long
'        Redim TR(1 to 1000, 1 to 11)
'        … avec dans des boucles L = L + 1
'        …   Puis des TR(L, C) = CeQueVousVoulez
'        Set LaPlage = PlageSuivante(TR, L)
'        LaPlage.Rows(3).Resize(LaPlage.Rows.Count - 2).Borders … etc.

If CelCou.Row + NbLVides + LMax - CelPgBk.Row > NbLMaxParPage Then
   Wsh.HPageBreaks.Add Before:=CelCou
Else
   Set CelCou = CelCou.Offset(NbLVides)
   End If
Set PlageSuivante = CelCou.Resize(LMax, UBound(TRés, 2))
PlageSuivante.Value = TRés
Set CelCou = CelCou.Offset(LMax)
If NbColMax < UBound(TRés, 2) Then NbColMax = UBound(TRés, 2)
End Function

Sub TerminerMiseEnPage()
Rem. ——— Termine le processus.
'        Corrige la zone d'impression et ajuste à 1 page en largeur.
Wsh.PageSetup.PrintArea = Range(CelDéb, CelCou.Offset(-1, NbColMax - 1)).Address
Wsh.PageSetup.FitToPagesWide = 1
Set CelDéb = Nothing
Set CelCou = Nothing
Set CelPgBk = Nothing
Set Wsh = Nothing
NbColMax = 0
End Sub
 

bennp

XLDnaute Occasionnel
Vu que la macro que vous m'avez proposé est trop compliquée pour moi, j'ai essayé de chercher une autre solution :
J'ai essayé de déterminé combien de tableau devaient être afficher sur ma 1ère pas, avec des formules et ça à l'air de fonctionner. Maintenant comment le mettre en vba, et dire au tableau n° X de passer à la page suivante, je sais pas. Voici mon fichier, ça peut peut-être donner des solutions.

Je sélectionne d'abord mon tableau et supprime tous les lignes vides avec une macro (remonter).

A voir...

Je reste bien sûr à l'écoute de votre 1ère proposition.

Merci encore !
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour.
La structure de la feuille de donnée est toujours aussi incompréhensible et forcément votre code qui en découle aussi. Qu'est-ce qui est compliqué. C'est pas difficile de mettre le résultat dans un tableau au lieu de le mettre dans des cellules et d'appeler PlageSuivante pour qu'il le mette, lui, dans des cellules, en s'occupant d'ajouter devant soit un saut de page soit des lignes vides.
 

bennp

XLDnaute Occasionnel
proposez moi une macro qui fonctionne svp en renvoyant mon fichier modifié svp, ça m'aidera beaucoup. Je ne peux pour l'instant pas répondre à vos attentes, je n'y arrive pas. Desolé
 

bennp

XLDnaute Occasionnel
Bonjour, merci c'est génial !! ça à l'air d'être plus rapide que mon code (à voir avec la mise en forme des tableaux) Par contre j'ai rajouté données pour vérifier et j'ai le dernier tableau qui est à la page suivante alors qu'il devrait être à la suite de l'autre. Je ne vois pas comment modifier ça. d'autre part, les colonnes épaiseur étaient multipliées par 100 pour l'avoir en cm, vous pouvez me le rajouter svp ?
Merci beaucoup pour votre aide !
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour.
C'était un oubli : dans la Function PlageSuivante, derrière Set CelCou = CelCou.Offset(1) ajoutez :
VB:
   Set CelPgBk = CelCou
Par ailleurs dans TerminerMiseEnPage il y a un …Offset(-1, … qui n'était pas sans une certaine logique mais incohérent avec le reste, de sorte qu'il faut … Offset(0, … pour que le dernier total ne se retrouve plus en dehors de la zone d'impression.
On voit mieux les choses, je trouve, avec l'affichage Avec les sauts de page qu'avec le Mise en page.
Pour la multiplication par 100 profitez de son versement depuis TE(LE, 3) vers TS(LS, 3) pour le faire au passage. Ça ne vaut plus le coup de faire une boucle pour les deux qui restent. Remplacez donc la boucle des 3 C et le Next C, LE par :
VB:
   If Not IsEmpty(TE(LE, 3)) Then TS(LS, 3) = TE(LE, 3) * 100
   If Not IsEmpty(TE(LE, 4)) Then TS(LS, 4) = TE(LE, 4)
   If Not IsEmpty(TE(LE, 5)) Then TS(LS, 5) = TE(LE, 5)
   Next LE
 

Dranreb

XLDnaute Barbatruc
Bonjour.
Vous n'avez pas ajouté l'instruction Set CelPgBk = CelCou pour mettre à jour la cellule de référence du dernier HPageBreak quand on en ajoute un, comme je vous l'avais dit.
Remarquez on pourrait se contenter de noter la ligne dans une variable LgnPgBk et de remplacer partout ailleurs CelPgBk.Row par LgnPgBk
 

bennp

XLDnaute Occasionnel
je viens de l'ajouter derrière Set CelCou = CelCou.Offset(1)
mais ça n'a pas l'air de changer..
l'autre façon que vous proposez n'est pas très clair pour moi
 

bennp

XLDnaute Occasionnel
Bonjour @Dranreb
Mon insertion de tableau commence à la ligne 131, par contre ayant déjà pas mal d'information au dessus, la zone d'impression n'est plus bonne, j'ai essayé de modifier mais pas réussi. Autre chose, à la suite de ces tableaux j'ai d'autres informations et d'autres tableaux différents à insérer, pourrais-tu donner des explications sur les codes pour que j'essaie de reproduire pour les autres tableaux ?

Merci beaucoup
 

Fichiers joints

Dranreb

XLDnaute Barbatruc
Bonjour.
La zone d'impression est définie par TerminerMiseEnPage. Elle va de la cellule spécifiée au InitialiserMiseEnPage jusqu'à la dernière cellule à laquelle est arrivé PlageSuivante d'après les tableaux qui lui ont été spécifiés successivement. Vous n'allez quant même pas la commencer à partir de la ligne 131 ?!!… à quoi ça sert ?
Si vous voulez pouvoir spécifier des tableaux TR de 25 colonne au lieu de 11 il faut d'abord corriger le Redim TR en conséquence.
Si vous avez d'autres tableaux à mettre dans la même zone d'impression, ce n'est pas impossible. C'est curieux. Il faut les préparer dans TR
et continuer les Set Rng = PlageSuivante(TR, LR)
 
Dernière édition:

bennp

XLDnaute Occasionnel
les tableaux commencent à partir de la ligne 131 mais j'ai d'autres info qui viennent avant mais qui n'on pas eu besoin de macro. D'ailleurs je souhaite comencer la macro en C31, ça fonctionne, par contre je voudrais que mes colonnes "Épais", "Chiffre", "Clé" soit en Y Z et AA (23, 24 et 25) mais en modifiant, ça ne fonctionne pas
 

bennp

XLDnaute Occasionnel
c'est pour cela que la zone d'impression doit commencer en A1 et prendre les colonnes de A à AA (d'après le dernier fichier envoyé
 

Dranreb

XLDnaute Barbatruc
Débrouillez vous, j'en ai marre.
Avez vous corrigé le Redim TR(1 To 50, 1 To 11) en Redim TR(1 To 50, 1 To 25) comme je vous l'avais dit ?
 

bennp

XLDnaute Occasionnel
oui desolé, j'avais pas vu votre remarque, une dernière chose s'il vous plait. pouvez vous me détailler chaque ligne pour que je comprenne le code, ça pourra m'aider avec la suite svp. Je vous embêterai plus promis !!
 

Dranreb

XLDnaute Barbatruc
Si la zone d'impression doit toujours commencer en A1, initialisez LgnPgBk = 1 au lieu de Cel.Row et à la fin
Wsh.PageSetup.PrintArea = Range(Wsh.[A1], CelCou.Offset(0, NbColMax - 1)).Address

Quelles est la 1ère chose que vous ne comprenez pas ?
 

Dranreb

XLDnaute Barbatruc
Je ne vais pas commenter chaque instruction. J'estime que ça rend la programmation plus lourde et le code encore plus obscur, parce qu'il faut comprendre les commentaires en plus de comprendre les instructions.
Mes codes sont généralement concis. Leur incompréhension résulterait de lacunes dans vos notions de base de VBA. Alors dites moi ce que vous ne comprenez pas, quitte à mettre vous même des commentaires après pour vous rappeler de certains détails, après que je vous les aurai expliqués.
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas