VBA : n'imprimer que tableau avec données

Willy53

XLDnaute Nouveau
Bonjour à tout le forum.

Je suis débutant dans la programation en vba et j'aimerais savoir si il est possible de créer une macro pour n'imprimer que les tableaux contenant des données sachant qu'à l'impression il y a un tableau par feuille et qu'il peut y avoir une trentaine de feuilles si tout les tableaux sont pleins.
Précisions : tout les tableaux sont dans le même onglet et ils se remplissent automatiquements grâce à des formules.

Merci d'avance.

PS : ci-joint le fichier excel

Le critère d'impression peut être le n° du dossard (cellule en haut à droite de chaque feuille)
 

Pièces jointes

  • Classeur1.xls
    36.5 KB · Affichages: 127
  • Classeur1.xls
    36.5 KB · Affichages: 129
  • Classeur1.xls
    36.5 KB · Affichages: 116

Cousinhub

XLDnaute Barbatruc
Inactif
Re : VBA : n'imprimer que tableau avec données

Bonjour,

salut willy *2

essaie avec ce code :

Code:
Sub Impr_dossard()
Application.ScreenUpdating = False
ActiveSheet.PageSetup.PrintArea = Cells.Address
hpb = ActiveSheet.HPageBreaks.Count
vpb = ActiveSheet.VPageBreaks.Count
For x = 1 To vpb
    For i = 1 To hpb
        If Cells(2 + ((i - 1) * 26), 9 + (x - 1) * 9) <> "" Then
            ActiveSheet.PageSetup.PrintArea = Range(Cells(1 + ((i - 1) * 26), 1 + (x - 1) * 9), Cells(i * 26, x * 9)).Address
            ActiveSheet.PrintPreview
        End If
    Next i
Next x
End Sub
 

wilfried_42

XLDnaute Barbatruc
Re : VBA : n'imprimer que tableau avec données

re: bhbh :)

un peu vexe d'avoir mal lu, je post une solution

plage nommée zone_d_impression : la formule
Code:
=DECALER(enveloppe!$A$1;(ENT((enveloppe!$A$1/3)+0,67)-1)*27;(SI(MOD(enveloppe!$A$1;3)=0;3;MOD(enveloppe!$A$1;3))-1)*9;26;9)
la macro qui va avec
Code:
Sub imprim()
    Dim gwcel As Range
    For i = 1 To 9
        Sheets("enveloppe").Range("A1") = i
        Set gwcel = Range("zone_d_impression")(1)
        If Val(gwcel.Offset(8, 2)) > 0 Then ActiveSheet.PrintPreview
    Next i
End Sub

attention, ta 1ere serie de dossard (1,2,3) ont 27 lignes, la 2eme 26 lignes, ton fichier en retour avec une ligne d'ajoutée
 

Pièces jointes

  • zone d impression.zip
    12 KB · Affichages: 61

Willy53

XLDnaute Nouveau
Re : VBA : n'imprimer que tableau avec données

Bonjour,

salut willy *2

essaie avec ce code :

Code:
Sub Impr_dossard()
Application.ScreenUpdating = False
ActiveSheet.PageSetup.PrintArea = Cells.Address
hpb = ActiveSheet.HPageBreaks.Count
vpb = ActiveSheet.VPageBreaks.Count
For x = 1 To vpb
    For i = 1 To hpb
        If Cells(2 + ((i - 1) * 26), 9 + (x - 1) * 9) <> "" Then
            ActiveSheet.PageSetup.PrintArea = Range(Cells(1 + ((i - 1) * 26), 1 + (x - 1) * 9), Cells(i * 26, x * 9)).Address
            ActiveSheet.PrintPreview
        End If
    Next i
Next x
End Sub

Salut,

Tout d'abord merci de t'être penché sur mon problème. J'ai essayé ta macro mais quand je veux l'exécuter il me met un message d'erreur et il me surligne en jaune la ligne 3 de la macro : ActiveSheet.PageSetup.PrintArea = Cells.Address

Que dois-je faire pour résoudre ce problème please.

Merci d'avance

Will
 

Willy53

XLDnaute Nouveau
Re : VBA : n'imprimer que tableau avec données

Bonsoir,

essaie en remplaçant cette ligne par celle-ci :

Code:
ActiveSheet.PageSetup.PrintArea = ""

J'ai bien fait la modification. La macro s'exécute mais elle se bloque sur un apperçu de la page telle qu'elle devrait s'imprimer. Malheureusement elle ne s'imprime pas. Donc je ferme la fenêtre en faisant un clique droit sur le nom du fichier excel dans la barre d'outil en bas de l'écran (ou Alt + F4) car je n'ai plus la possiblité d'intervenir sur les boutons de menu excel. Je ferme donc le fichier, il m'affiche alors la deuxième feuille telle qu'elle devrait s'imprimer et ainsi de suite jusqu'à retomber sur mon tableau initial.

Bref, il ne veut pas imprimer mes tableaux mais on ne doit pas être loin de la vérité.
Merci d'avance
 

Willy53

XLDnaute Nouveau
Re : VBA : n'imprimer que tableau avec données

re: bhbh :)

un peu vexe d'avoir mal lu, je post une solution

plage nommée zone_d_impression : la formule
Code:
=DECALER(enveloppe!$A$1;(ENT((enveloppe!$A$1/3)+0,67)-1)*27;(SI(MOD(enveloppe!$A$1;3)=0;3;MOD(enveloppe!$A$1;3))-1)*9;26;9)
la macro qui va avec
Code:
Sub imprim()
    Dim gwcel As Range
    For i = 1 To 9
        Sheets("enveloppe").Range("A1") = i
        Set gwcel = Range("zone_d_impression")(1)
        If Val(gwcel.Offset(8, 2)) > 0 Then ActiveSheet.PrintPreview
    Next i
End Sub

attention, ta 1ere serie de dossard (1,2,3) ont 27 lignes, la 2eme 26 lignes, ton fichier en retour avec une ligne d'ajoutée

Bonsoir et merci de t'être penché sur mon problème.
J'ai un petit problème quant à la formule de la "plage nommée zone d'impression". Je ne sais pas où l'insérer.

Petite précision concernant le N° de dossard, il s'affiche automatiquement grâce à une formule.
Merci de m'éclairer

Cordialement
Will
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Inactif
Re : VBA : n'imprimer que tableau avec données

Re-,
j'ai mis Aperçu pour ne pas imprimer inutilement

quand tu as l'aperçu, clique sur Fermer, pour continuer le code

Quand cela fonctionnera comme tu voudras, on mettra .Print, à la place de .PrintPreview
 

Willy53

XLDnaute Nouveau
Re : VBA : n'imprimer que tableau avec données

re,
Ok. Donc si je comprend bien le fait que cela bloque est normal vu que c'est juste un apperçu d'impression. Donc je fais Alt + F4 jusqu'à la fin.
Ca à l'air de fonctionner comme je le souhaite.
Ensuite j'ai essayé de remplacer printpreview par .print mais ça ne veux pas marcher. Il m'affiche un nouveau message d'erreur : erreur d'exécution 438.
Que dois-je faire ?
Merci
 

Discussions similaires

Statistiques des forums

Discussions
314 948
Messages
2 114 650
Membres
112 206
dernier inscrit
salah zabi