Zone d'impression selon cellule variables + impression + envoi mail

Résolu/Fermé
stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 - 14 mars 2019 à 11:08
stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 - 19 mars 2019 à 10:20
Bonjour,

Je mets ici une copie de mon travail, pour mieux comprendre ce que je cherche à faire.

https://www.cjoint.com/c/ICokeFovccD

J'ai donc une feuille Excel faites de 4 tableaux successifs représentant chacun une destination, adresse etc. différentes les unes des autres.


Je cherche à faire un bouton qui pourrait :
1 / définir la zone d'impression + imprimer, selon le nombre de tableau remplit.
Pour ce faire, je pensais faire un "if" en lui indiquant la cellule contenant le code postal (donnée obligatoire pour un envoi). si la cellule n'est pas vide, fais une zone d'impression englobant ce tableau et imprime.
je suppose que ma syntaxe est foireuse, mais il ne me dit rien du tout, même pas de plantage... il ne fait juste rien. Je suis passé par l'enregistreur de macro.

Donc, si mon tableau 1 est remplit, alors définir zone d'impression + impression du tableau 1 (2 exemplaires à chaque fois). Si le tableau 1 et 2 sont remplis, zone d'impression + impression du tableau 1 et 2 ensemble, etc. Pas de risque de remplir le tableau 2 sans le 1, et les formats de tableau sont tous identiques. je pars toujours de la 1ère cellule pour garder ce qui sert d'en-têtes.

Par contre, en ligne 41, j'ai une phrase que je voudrais trouvé quelque soit le nombre de tableaux imprimés... et là aussi, je sèche.

2 / envoyer le classeur Excel par mail. ça, je sais faire (au moins d'une manière), je reviendrais si jamais je plante...

Bon, j'imagine que mon code va vous faire mal aux yeux...
Merci d'avance et bonne journée à tous !

Private Sub CommandButton1_Click()

'zone d'impression

If Cells(6, 12) <> "" Then
Range("A1:H16").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R16C8"
Selection.PrintOut Copies:=1, Collate:=True
End If

If Cells(6, 12) <> "" And Cells(6, 19) <> "" Then
Range("A1:H23").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R23C8"
Selection.PrintOut Copies:=2, Collate:=True
End If

If Cells(6, 12) <> "" And Cells(6, 26) <> "" Then
Range("A1:H30").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R30C8"
Selection.PrintOut Copies:=2, Collate:=True
End If

If Cells(6, 12) <> "" And Cells(6, 33) <> "" Then
Range("A1:H33").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R33C8"
Selection.PrintOut Copies:=2, Collate:=True

End If

ActiveSheet.PageSetup.PrintArea = ""

End Sub




Configuration: Windows / Firefox 65.0
A voir également:

2 réponses

stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 2
18 mars 2019 à 15:33
Bon j'ai un peu amélioré le code il me semble, sans grand effet pour autant...
Sub imprim()

'zone d'impression + impression

If Cells(6, 33) <> "" Then
Range("A1:H33").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R33C8"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Cells(6, 26) <> "" Then
Range("A1:H30").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R30C8"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Cells(6, 19) <> "" Then
Range("A1:H23").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R23C8"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Cells(6, 12) <> "" Then
Range("A1:H16").Select
ActiveSheet.PageSetup.PrintArea = "R1C1:R16C8"
Selection.PrintOut Copies:=2, Collate:=True
End If

ActiveSheet.PageSetup.PrintArea = ""

End Sub


Ce code est mis dans un module, et mon bouton ActiveX appelle cette macro, mais que je lance la macro seule ou bien par le bouton, rien ne se passe !!
Je continue mes recherches, si quelqu'un voit ce qui cloche je suis preneur :)

Et je n'ai toujours aucune idée de comment faire apparaitre ma phrase, je pense qu'il faut que je l'inclue à la macro elle-même, un peu comme un texte de mail par vba.

bon, je continue.
0
stitchbouck Messages postés 129 Date d'inscription mercredi 12 janvier 2011 Statut Membre Dernière intervention 7 novembre 2024 2
Modifié le 19 mars 2019 à 10:20
et finit ! finalement, j'ai réussit tout seul :)

Sub imprim()

'zone d'impression + impression

If Range("F33") <> "" Then
Range("A1:H33").Select
ActiveSheet.PageSetup.PrintArea = "A1:H37"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Range("F26") <> "" Then
Range("A1:H30").Select
ActiveSheet.PageSetup.PrintArea = "A1:H30"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Range("F19") <> "" Then
Range("A1:H23").Select
ActiveSheet.PageSetup.PrintArea = "A1:H23"
Selection.PrintOut Copies:=2, Collate:=True

ElseIf Range("F12") <> "" Then
Range("A1:H16").Select
ActiveSheet.PageSetup.PrintArea = "A1:H16"
Selection.PrintOut Copies:=2, Collate:=True


End If
ActiveSheet.PageSetup.PrintArea = ""
End Sub


Pour ma phrase que eje voulais à chaque fois, je l'ai mis en début de page plutôt qu'en fin. et je ne sais pas pk, mais l'enregistreur appelle ses plages "R1C1:R23C8" par exemple, et il n 'est pas capable de se relire lui-même !!
Bref, ce code fonctionne.

++
0