Zone d'impression automatique

Bonjour à tous,

Toujours aussi bête, je n'arrive pas à comprendre les explications données sur différents forum.

Je voudrai pouvoir imprimer uniquement les lignes et colonnes non vides de mon tableau

Les informations devant être imprimer se trouvent dans les colonne B à I et le lignes 1 à 102.

les lignes se colorent automatiquement en blanc lorsqu'elles sont non vides

Pourriez vous une fois de plus m'aider?

46classeur1.xlsm (39.75 Ko)

Bonjour,

à tester avec une imprimante ^^'

Bonne journée !

ps : le bouton rajouté peut être supprimé, c'était pour ma recherche

234test.xlsm (42.70 Ko)

Bonjour Guitouille,

Merci beaucoup cela fonctionne super bien, juste encore une question.

J'ai d'autres feuilles pour lesquels je voudrai appliquer cette procédure. Pourrais tu m'expliquer comment tu as fait

Merci

Bonjour, il suffit que tu appelle la macro Imprimer avec un bouton que tu met sur la feuille en question et ensuite tu vas avoir le même résultat, en gros il te suffit de copier ton bouton imprimer et le coller sur une autre feuille

Bonjour,

je te remercie pour toutes ces informations c'est super.

hello,

je repasserais dans l'aprem pour expliquer en détail ma macro ^^'

Ma démarche a simplement été de masquer les lignes vides avant d'appeler l’impression, puis de les re-afficher en fin de macro

voici le code principal

Sub Imprimer()
Application.ScreenUpdating = False
Call masquer_lignes
 ActiveSheet.PageSetup.PrintArea = "$B$1:$I$102"
  With ActiveSheet.PageSetup
         .FitToPagesWide = 1
        .FitToPagesTall = 1
        End With

ActiveWindow.SelectedSheets.PrintOut
Call afficher_lignes
Application.ScreenUpdating = True
End Sub

Application.ScreenUpdating = False permet d’arrêter le rafraîchissement de l'image pendant l’exécution de la macro, ici c'est plus une histoire d'esthétisme et d'éviter de voir toutes les lignes se masquer une à une (on peut voir la différence en mettant un ' devant la ligne) mais pour les macro longues à exécuter ça permet même de gagner du temps !

Ensuite Call masquer_lignes permet d'appeler la procédure "maquer-lignes" qui permet ... de masquer les lignes ^^

La voici :

Sub masquer_lignes()
Dim i, j As Integer
Dim vide As Boolean
i = 8
While i <= 100
vide = True
j = 2
    While j <= 4
        If Cells(i, j).Value <> "" Then
        vide = False
        End If
     j = j + 1
    Wend

    j = 6
    While j <= 8
        If Cells(i, j).Value <> "" Then
        vide = False
        End If
     j = j + 1
    Wend

If vide = True Then
Cells(i, 1).Select
Selection.EntireRow.Hidden = True
End If
i = i + 1
Wend
End Sub

Un peu barbare comme code mais j'aime bien me froisser le cerveau

La macro utilise i et j pour parcourir respectivement les lignes et les colonnes du tableau avec des boucles, et un booléen (vrai ou faux) qui passe à faux si la ligne n'est pas vide, puis avant de changer de ligne on regarde la valeur de ce booléen pour masquer la ligne ou non avec cette partie de la macro

If vide = True Then
Cells(i, 1).Select
Selection.EntireRow.Hidden = True
End If

Une fois les lignes vides masquées, on définit la zone d’impression et on imprime avec cette partie du code principal :

ActiveSheet.PageSetup.PrintArea = "$B$1:$I$102"
  With ActiveSheet.PageSetup
         .FitToPagesWide = 1
        .FitToPagesTall = 1
        End With

ActiveWindow.SelectedSheets.PrintOut

ActiveSheet.PageSetup.PrintArea = "$B$1:$I$102" défini la zone d’impression.

Le reste permet de tout mettre sur une seule page et la dernière ligne de code à lancer l’impression.

Pour finir il ne reste plus qu'à re-afficher les lignes masquées avec cette partie du code principal qui appelle la procédure afficher_lignes

Call afficher_lignes
Application.ScreenUpdating = True

Application.ScreenUpdating = True re-active le rafraichissement de l'écran (inutile il me semble quand utilisé en toute fin de macro m'enfin ça mange pas de pain)

Sub afficher_lignes()
Dim i As Integer
i = 8
While i <= 100
Cells(i, 1).Select
Selection.EntireRow.Hidden = False
i = i + 1
Wend
End Sub

Cette procédure balaye toutes les lignes et les "démasque"

En espérant que ce ne soit pas imbuvable comme explication ^^'

Bonne fin de semaine !

Un grand merci à toi Guitouille,

Encore légèrement pas trop buvable pour moi, mas ce n'est pas grave, je débute dans la programmation et en apprends tous les jours.

Merci c'est super sympa à toi d’avoir perdu un peu de ton temps avec moi

1004

Bonjour Guitouille,

Encore un petit soucis, lorsque je protège mes feuille par le biais de l'onglet Révision ==> Protéger la feuille, et que je veux utiliser le bouton Imprimer, je reçois l'erreur ci-dessus:

Ensuite le code:

Sub masquer_lignes()
Dim i, j As Integer
Dim vide As Boolean

i = 8

While i <= 100
vide = True

j = 2
    While j <= 4
        If Cells(i, j).Value <> "" Then
        vide = False
        End If
     j = j + 1
    Wend

    j = 6
    While j <= 8
        If Cells(i, j).Value <> "" Then
        vide = False
        End If
     j = j + 1
    Wend

If vide = True Then
Cells(i, 1).Select
Selection.EntireRow.Hidden = True
End If

i = i + 1
Wend

End Sub

==> Selection.EntireRow.Hidden = True Étant surligné en jaune Pourrais tu m'expliquer ce qui ce passe?

merci par avance

Rechercher des sujets similaires à "zone impression automatique"