Macro zone d'impression

Bonjour,

j'ai un probleme concernant une macro pour une zone d'impression. Voici une partie de la macro:

Sub printAreaMod()
Dim derLig As Integer
Application.ScreenUpdating = False 'bloquage écran'

Sheets("Usinées").Select
derLig = Cells(65000, 1).End(xlUp).Row
ActiveSheet.PageSetup.printArea = "A9:D" & derLig + 1

Rows("1:8").RowHeight = 16.5 ' hauteur lignes 3 et 4 à 25
For lig = 9 To derLig ' pour les lignes de 5 à 6 ajustement automatique
Range(Cells(lig, "A"), Cells(lig, "D")).Select 'concerne les colonnes de A à D
Selection.EntireRow.autoFit ' hauteur ligne automatique
'Selection.EntireRow.RowHeight = Selection.EntireRow.RowHeight + 15 ' + 15 pixel
If Selection.EntireRow.RowHeight < 16.5 Then Selection.EntireRow.RowHeight = 16.5 ' hauteur de ligne 16.5 mini
Next

j'aimerai que lors de l'impression la dernière page soit complete: je m'explique, actuellement en fonction du nombre de colonne que je tape dans mon tableau la dernière page imprimée aura un nombre de ligne qui ne remplie pas la page entière. (une moitié de tableau au milieu de la page)
En gros est-ce que je peux remplacer le deLig +1 par quelque chose qui me rajoute des cases non utilisées jusqu'a la marge de fin de la dernière page? (je veux garder des cases vides jusqu'à la fin de ma page et non qu'une seule)

Merci pour vos réponses

3 réponses

  1. Bon ça ne marche pas, mon pc calcule dans le vide.... merci quand même d'avoir pris de ton temps
    1
    1. Ah bon !? C'est curieux car chez moi ça marche!

      Voici le fichier exemple sur lequel j'ai travaillé : https://www.cjoint.com/c/DJAlNOmNjto

      La procédure est dans Module1.
      0
    2. Merci je test plu tard !
      0
    3. Merci pour ton exemple, mais je reviens car ma macro ne fonctionne toujours pas. J'avais abandonné un moment mais ça m'agace.
      En gros j'ai 3 feuilles (usinées, commerce, visseries) et je voudrais que la macro s'applique sur les 3 feuilles. Quand je lance ma macro, on dirai que le pc calcul dans le vide et ajoute des pages indéfiniment. Bref je ne sais plus quoi faire. on dirait un bug avec le système de boucle (while)
      Si tu pouvais me dire d'où vient le problème ce serai le top ! voici le fichier sur lequel je travaille.
      http://dl.free.fr/getfile.pl?file=/YQBDSTzl
      0
    4. @DavYoshiSalam DavYoshi.

      Excuse-moi de ne pas t'avoir répondu plus tôt mais c'est parce que je suis un peu occupé ces jours-ci.

      Je pense que dans le code de la procédure printAreaMod(), il faut remplacer la 6ème ligne :

      ActiveSheet.PageSetup.PrintArea = "A9:D" & derLig

      par :

      ActiveSheet.PageSetup.PrintArea = False

      ce qui a pour effet d'annuler la zone d'impression avant la suite du code.

      Est-ce que ça marche maintenant ?
      0
    5. Merci j'essayerai
      0
  2. Merci je test ça demain je te dirais
    0
    1. Salam DavYoshi. :)

      J'ai ajouté un bout de code à celui que tu as posté. Essaye-le et dis-nous si ça répond à tes attentes :

      Sub printAreaMod()
      Dim derLig As Integer
      Application.ScreenUpdating = False 'bloquage écran'

      Sheets("Usinées").Select
      derLig = Cells(65000, 1).End(xlUp).Row
      ActiveSheet.PageSetup.PrintArea = "A9:D" & derLig

      Rows("1:8").RowHeight = 16.5 ' hauteur lignes 3 et 4 à 25
      For lig = 9 To derLig ' pour les lignes de 5 à 6 ajustement automatique
      Range(Cells(lig, "A"), Cells(lig, "D")).Select 'concerne les colonnes de A à D
      Selection.EntireRow.AutoFit ' hauteur ligne automatique
      'Selection.EntireRow.RowHeight = Selection.EntireRow.RowHeight + 15 ' + 15 pixel
      If Selection.EntireRow.RowHeight < 16.5 Then Selection.EntireRow.RowHeight = 16.5 ' hauteur de ligne 16.5 mini
      Next

      ''' Le code que j'ai ajouté commence ici '''
      nbs = ActiveSheet.HPageBreaks.Count ' compte le nombre de sauts de page
      nbs2 = nbs
      While nbs2 = nbs 'tant que le nombre de saut de pages n'a pas augmenté
      Rows(derLig).Copy
      derLig = derLig + 1
      Rows(derLig).PasteSpecial Paste:=xlPasteFormats 'ajouter une ligne en dernier avec le même format (quadrillage) que la ligne précédente
      ActiveSheet.PageSetup.PrintArea = "A9:D" & derLig 'redéfinir la zone d'impression
      nbs2 = ActiveSheet.HPageBreaks.Count 'compter le nouveau nombre de sauts de pages
      Wend ' arrêter d'ajouter des lignes quand le nombre de sauts de pages a augmenté de 1
      ActiveSheet.PageSetup.PrintArea = "A9:D" & derLig - 1 ' redéfinir la zone d'impression

      End Sub

      1