Imprimer plusieurs feuille avec condition
bonjour a tous
je suis debutante et j essaie de creer un logiciel pour un ami qui est aveugle donc tout doit etre automatise.
Comment faire en code vba pour imprimer la feuille 2 si la cellule B53 par exemple contient des donnees?
ou alors selectionner et imprimer de la ligne 1 jusqu a une cellule nommee?
merci d avance pour votre aide
lindette
Salutlindette a écrit :bonjour a tous
je suis debutante et j essaie de creer un logiciel pour un ami qui est aveugle donc tout doit etre automatise.
Comment faire en code vba pour imprimer la feuille 2 si la cellule B53 par exemple contient des donnees?
ou alors selectionner et imprimer de la ligne 1 jusqu a une cellule nommee?
merci d avance pour votre aide
lindette
Si tu es débutante, et que tu veux pouvoir adapter la macro qu'on va te faire, il faut être précise :
If Not (IsEmpty(Sheets("feuille 2").Range("B53"))) Then _
Sheets("feuille 2").PrintOutimprimera "feuille 2" si la cellule B53 de celle-ci n'est pas vide
Range([A1], Range("nom de la cellule")).PrintOutimprimera la plage de A1 à cellule "nom de cellule"
A+
bonjour Gorfael
merci pour ta reponse mais je me rend compte que j aurais du mieux m expliquer.
dans mon classeur j ai une feuille nommee "devis" ou donc on tape les informations du devis et une autre "piedpage' ou il y a le total, la remise, le montant total.
quand on a fini de remplir le devis dont la longueur est variable en faisant controle=f , cela cherche la dernier ligne du devis et cela va coller la feuille'piedpage' dessus et ensuite cela l enregistre automatiquement sous le nom du client et le numero du devis et ouvre une userform avec les boutons : IMPRIMER - ENVOYER PAR MAIL - MODIFIER DEVIS
'
Sub finalisation()
'
' finalisation Macro
' Macro enregistrée le 05/10/2007 par saint martin alu
'
' Touche de raccourci du clavier: Ctrl+f
'
'on recherche la dernière ligne de la colonne A de la feuille DEVIS
derli = Sheets("DEVIS").Columns(1).Find("*", , , , , xlPrevious).Row
'on cherche le multiple de 46
derli = Application.Ceiling(derli, 46)
'on colle
Sheets("piedpage").Select
Range("A1:F9").Select
Selection.Copy
Sheets("DEVIS").Select
Range("A" & derli).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Columns("a:a").Select
Selection.EntireColumn.Hidden = True
ActiveSheet.SaveAs Filename:=("C:\Documents and settings\SM ALU\Mes documents\clients\" & Range("D11").Value & Range("B23").Value)
UserForm1.Show
End Sub
'
mon probleme c est de pouvoir selectionner sur cette feuille devis de la premiere cellule a la derniere cellule rempli car si je fais juste imprimer et bien apres le montant total il reste le tracage des bordures des colonnes et cela m imprime 15 feuilles....
voila mon probleme c est pour cela que je cherche une solution pour limiter la zone d impression.
j ai essayer de faire avec cellule nommee, mais le probleme c est que la cellule nomme est sur la feuille'piedpage' et comme on la colle ensuite sur devis cela ne fonctionne pas.
j espere que je me suis un peu mieux expliquer
je veux bien vous envoyer mon classeur si necessaire
merci beaucoup pour votre aide
lindette
salut lindette et le forum
Sub finalisation()
derli = Sheets("DEVIS").Columns(1).Find("*", , , , , xlPrevious).Row
'on cherche le multiple de 46
derli = Application.Ceiling(derli, 46)
'on colle
Sheets("piedpage").Select
Range("A1:F9").Copy
Sheets("DEVIS").Select
With Range("A" & derli)
.PasteSpecial Paste:=xlPasteValues
.PasteSpecial Paste:=xlPasteFormats
.EntireColumn.Hidden = True
End With
PageSetup.PrintArea = "$A$1:$F$" & derli + 8 '*******
ActiveSheet.SaveAs Filename:=("C:\Documents and settings\SM ALU\Mes documents\clients\" & _
.Range("D11") & .Range("B23"))
UserForm1.Show
End SubTon code un peu remanié, mais ce que tu cherches, si j'ai bien compris se fait à la ligne de code avec les étoiles. comme j'ai pas testé, le principe : redéfinir la zone d'impression, en fonction de derlin + hauteur du pied de page
Je ne trouve pas l'instruction Celling : c'est une instruction d'une version supérieure à 2003, ou une function ?
A+
Salut Gorfael
merci pour ta reponse mais malheureusement cela ne fontionne pas. j ai essaye beaucoup de choses mais rien a faire... il me manque juste ca pour que le logiciel soit operationnel pour mon collaborateur qui je le repete est aveugle.
Je veux bien envoye le classeur si quelqu un aurait le temps de regarder ce qui cloche cela serait vraiment sympa car cela nest vraiment pas facile a expliquer.
concernant l instruction Celling je ne peux pas te repondre car c est quelqu un qui m a aide pour le code, desolee
lindette
Salut le forum
Gorfael et Lindette, Ceiling c'est la fonction Plafond en formule.
Lindette regarde du côté de CurrentRegion ou CurrentArray
Mytå
Salut Lindette, myrta et le forumlindette a écrit :Salut Gorfael
merci pour ta reponse mais malheureusement cela ne fontionne pas. j ai essaye beaucoup de choses mais rien a faire... il me manque juste ca pour que le logiciel soit operationnel pour mon collaborateur qui je le repete est aveugle.
Je veux bien envoye le classeur si quelqu un aurait le temps de regarder ce qui cloche cela serait vraiment sympa car cela nest vraiment pas facile a expliquer.
concernant l instruction Celling je ne peux pas te repondre car c est quelqu un qui m a aide pour le code, desolee
lindette
Laisse tombé ma macro (je ne l'ai pas testée, donc on va supposer qu'elle est bourrée d'erreurs
Dans ta macro, en final :
tu mets ton pied de page (9 lignes dont la 4 correspond à derli ) => donc, il faut que tu définisses une zone d'impression de A1 à F(derli+8 lignes)
Sheets("DEVIS").PageSetup.PrintArea = "$A$1:$F$" & derli + 8
tu peux vérifier la justesse de l'instruction en passant en affichage "Aperçu des sauts de pages"
il faut mettre cette ligne juste avant la ligne de sauvegarde, pour que derli soit à la bonne valeur et que la zone d'impression soit enregistrée dans le fichier
A+
Bonjour Gorfael, bonjour à tous
merci Gorfael pour ta réponse mais cela ne fonctionne ceci j'ai trouvé !!!!
voici le code que j utilise directement sur la commande de mon bouton imprimer
'
Private Sub CommandButton1_Click()
With Range("A:E")
Worksheets("DEVIS").Activate
ActiveSheet.PageSetup.PrintArea = Range("A1:E" & .Find("TOTAL US", .Item(1), , , , xlPrevious).Row).Address
End With
ActiveWindow.SelectedSheets.PrintOut , Copies:=2, ActivePrinter:="hp color LaserJet 2550 PS", Collate:=True
End Sub
'
et cela fonctionne oufffff
merci encore pour tout
Lindette