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)
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
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
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
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.
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
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
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