Répéter ligne du haut lors d'une impression en VBA
Bonjour à tous,
J'ai un fichier et souhaite automatiser l'impression avec VBA en utilisant un bouton "icône imprimante"
J'ai modifié les paramètres d'impression comme je le souhaitais mais je rencontre un souci. Le nombre de lignes étant variable, le fichier peut s'imprimer sur 1 voire 2 voire plusieurs pages.
Mon souci est le suivant: Comment procéder pour répéter la ligne qui contient le mot "PAYS" ou "VILLE" ou "COMMUNE" ou "REGION" en fonction de l'endroit où sont coupées mes données ?
Je sais qu'il faut utiliser le code suivant mais je ne sais pas quoi renseigner comme plage de données: PageSetup.PrintTitleRows
Dans mon exemple, il faudrait répéter la ligne suivante au début de la 2ème page (en haut de la ligne 49 de EXCEL):
Par contre, si le saut de page devait se faire entre les lignes 70 et 71, il faudrait répéter la ligne suivante par exemple:
Je joins ici mon fichier.
Merci à vous tous
JB
Bonjour JBP
Si je puis me permettre, lorsqu'on doit traiter différentes données, on les mets sur différentes feuilles
Comme ça pas de souci de ligne à définir
A+
Bonsoir BrunoM45,
En fait cet onglet servira de récapitulatif de toutes mes feuilles VILLE, COMMUNE , REGION...avec pour objectif une impression par la suite.
Je ne connais pas suffisamment VBA mais je m'imaginais pouvoir mémoriser les numéros des 2 lignes qui sont fusionnées en colonne A (ex: 9et 10) ou (67 et 68) etc. Ensuite en fonction de l'endroit où il y a le saut de page, on vient répéter les lignes 9 et 10 si le saut de page est fait avant la ligne 53, on répète les lignes 67 et 68 si le saut de page est fait avant la ligne 73, ainsi de suite.
Si ce n'est pas possible je comprendrais aussi.
Bonne soirée
JB
Re,
Vous êtes contradictoire dans ce que vous dites
Vous voulez pouvoir imprimer avec la 1ère ligne de chaque tableau comme ligne à répéter
mais il s'agit d'une feuille récap, n'y a t'il pas un illogisme
Bonsoir BrunoM45,
Oui je veux UNIQUEMENT répéter la 1ère ligne du tableau qui est scindé en deux, c'est tout.
Merci à vous
JB
bonjour le fil,
ce n'est pas aussi simple que ça ! Il faut presque écrire une macro et créer une feuille auxiliaire pour résoudre ce problème. N'est ce pas plus facile d'imprimer en 4 fois, une pour chaque tableau.
Bonjour BsAlv,
Malheureusement je souhaitais avoir tous les tableaux à la suite mais je comprends que cela ne soit pas si simple que ça. Je vais donc me résoudre à ne pas recopier l’en-tête du tableau qui est scindé sur 2 pages.
Merci quand même.
JB
Bonsoir JeanBaptisteP, le Fil,
Tout va dépendre de plusieurs réglages des marges de l'imprimante.
On peut définir auparavant la zone d'en-tête à reproduire.
Ci-dessus les 2 lignes 9 et 10.
Par VBA il suffit de connaître la position du terme VILLE (à rechercher par Find) et si la ligne est supérieure à une certaine position compte tenu des marges. On change alors par VBA la ligne répéter en haut et cela uniquement lorsque la première page est imprimée.
Donc imprimer en définissant une première zone pour la première page. Puis mettre en Lignes à répéter en haut les 2 lignes trouvées pour la ville pour imprimer la deuxième page. Pour le fichier fourni, compte tenu des marges actuelles imprimante on ne fait qu'inscrire $9:$10.
Présenter plusieurs onglets avec des données à imprimer pour tester plusieurs hypothèses.
re, avec cette macro "testing"
Const iMax = 60 '>>>>> pour modifier le nombre de lignes par page
Sub Testing()
Dim UN As Range, aL() As Long, iC, iL
arr = Array("Pays", "Ville", "Commune", "region")
Sheets("IMPRESSION").Copy Before:=Sheets(1)
With ActiveSheet
iC = .UsedRange.Columns.Count
Set UN = Range("A1")
ptr = 0
Do
ptr = ptr + 1
Set c = Cells(ptr * 60, 1)
Application.Goto c.Offset(-5), 1
If c.Row < .UsedRange.Rows.Count Then
Set c1 = Range("A1").Resize(c.Row)
ReDim aL(0 To UBound(arr))
For i = 0 To UBound(arr)
aL(i) = Evaluate("max(if(" & c1.Address & "=""" & arr(i) & """,row(" & c1.Address & "),0))")
Next
iL = Application.Max(aL) 'dernier ligne avec pays, ville, commune, ...
If iL > 0 Then
c.Offset(1).Resize(2).EntireRow.Insert
Rows(iL).Resize(2).Copy c.Offset(1)
End If
End If
Set UN = Union(UN, c.Offset(-59).Resize(60, iC + (ptr Mod 2)))
Loop While c.Row < .UsedRange.Rows.Count
With .PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesTall = ptr + 1
.FitToPagesWide = 1
.PrintArea = UN.Address
End With
.PrintPreview
End With
End Sub