[VBA] Zone d'impression Excel
Résolu
Bonjour,
Je sais qu'il existe de nombreux postes à ce propos mais je n'arrive pas à trouver mon bonheur dans l'existant. Surtout que je ne m'y connait guère en macro.
Voici ma question :
J'ai un devis de réaliser sur Excel pouvant aller de 1 à 200 lignes. Chaque pages contient 40 lignes, soit un devis pouvant aller de 1 à 5 pages.
J'aimerais que la zone d'impression se sélectionne à partir d'une formule qui me dit si une valeur est égal à zéro ou pas. Puis lorsque l'on appuis sur le bouton la sélection s'imprime et s'enregistre.
Exemple :
Devis 1 de 40 lignes : Si "40 lignes" alors on imprime une page
Devis 2 de 41 lignes : Si "41 lignes" alors on imprime deux pages
Merci d'avance
Isomer
PS : Je sais pas faire un bouton sur excel... xD
Je sais qu'il existe de nombreux postes à ce propos mais je n'arrive pas à trouver mon bonheur dans l'existant. Surtout que je ne m'y connait guère en macro.
Voici ma question :
J'ai un devis de réaliser sur Excel pouvant aller de 1 à 200 lignes. Chaque pages contient 40 lignes, soit un devis pouvant aller de 1 à 5 pages.
J'aimerais que la zone d'impression se sélectionne à partir d'une formule qui me dit si une valeur est égal à zéro ou pas. Puis lorsque l'on appuis sur le bouton la sélection s'imprime et s'enregistre.
Exemple :
Devis 1 de 40 lignes : Si "40 lignes" alors on imprime une page
Devis 2 de 41 lignes : Si "41 lignes" alors on imprime deux pages
Merci d'avance
Isomer
PS : Je sais pas faire un bouton sur excel... xD
22 réponses
-
C'est bon j'ai trouvé ma solution :
Sub PrintDevis() 'Déclaration des variables Dim LigFin As Integer 'Zone impression "devis 1 2 3 4" Const Colonnes = 14 'adater au nombre de colonne Const Lig = 59 'Première ligne où commencer après page de garde Sheets("DEVIS 1 2 3 4").Select 'adapter le nom de la feuille If Cells(103, 13) <> 0 Then LigFin = Lig + 53 ElseIf Cells(156, 13) <> 0 Then LigFin = Lig + 106 ElseIf Cells(209, 13) <> 0 Then LigFin = Lig + 159 ElseIf Cells(262, 13) <> 0 Then LigFin = Lig + 212 ElseIf Cells(315, 13) <> 0 Then LigFin = Lig + 265 End If ActiveSheet.PageSetup.PrintArea = Range(Cells(1, 1), Cells(LigFin, Colonnes)).Address ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub
Merci à toi lermite et à Pijaku pour votre aide très précieuse.
Bonne continuation, encore merci
A+
Iso -
lol , pas grave ^^
Bon j'explique : ma zone d'impression fait 2 pages.
Lorsque je lance l'impression de cette zone au lieu de m'imprimer un pdf de 2 pages (avec page 1 et page2), et bien il m'imprime deux pdf de 1 page chacun (page 1 sur un pdf et page 2 sur un autre pdf)
Suis-je plus clair ? :) -
ContributeurBeh éventuellement, mais là.. je sais plus où j'en suis. C'est quoi cette histoire de PDF ?
-
Toujours avec moi ? ^^
-
En faites je suis pas encore parti ^^
Bah lorsque j'imprime mon devis au lieu de m'enregistrer un devis PDF de 3 pages, il m'enregistre le devis page par page dans des PDF différent. C'est à dire j'ai la page 1 de mon devis dans le pdf 1, ma page 2 dans le pdf 2, etc.
Hors j'aimerais avoir mes 3 pages dans le même PDF. C'est plus clair ? -
ContributeurJe m'explique si mon devis fait 3 pages il va m'imprimer les 3 pages dans des pdf
Là je comprend plus..
A la semaine prochaine.
A+
-
C'est trop cool ^^
Alors l'impression ça va impec sauf que en faites, il m'imprime les feuilles une par une.
Je m'explique si mon devis fait 3 pages il va m'imprimer les 3 pages dans des pdf différents... C'est pour ça les enregistrement successif...
Désolé, je sais que je suis agaçant... :S
Encore merci pour votre aide, merci beaucoup lermite !
NB : Désormais je ne pourrais répondre que lundi ou mardi, donc bon week end :D -
ContributeurOK, avec le > 2003 c'est différent.
Clic sur... Affichage >> Barre d'outils >> Boite à outils controls.
Dans la barre d'outils affichée tu clic sur ..Bouton de commande, dans la feuille Excel tu créer un rectangle qui sera le bouton.
Changer le libellé du bouton, clic droit >> propriétés
Changer le caption par exemple par "Imprimer"
Fermer la fenêtre propriétés. (la croix)
Double clic sur le bouton que tu viens de créer.
Tu arrive dans l'IDE de VBA sur le code de la feuille (l'onglet)
avec un début de code qui devrait ressembler à..Private Sub CommandButton1_Click() End Sub
au milieu de ce code tu tape.. PrintDevis pour avoir..Private Sub CommandButton1_Click() PrintDevis End Sub
C'est tout.. tu retourne sur Excel, tu clic sur le bouton 'désactiver le mode de création' sur la barre d'outils Contrôle (le triangle bleu,vert)
Et Opppss, c'est terminer. -
version 2003
Merci beaucoup !! -
ContributeurNormalement la macro ne s'exécute qu'une seule fois.. c'est que ta façon de la "lancer" n'est pas bonne !!
Pour le faire avec un bouton,
Je vais tout prendre depuis le début ..
Zut, tu n'a pas dis ta version d'Excel, pour éviter de recommencer.. Tu dis.
Version Excel ?
-
Merci beaucoup de votre patience, ça fonctionne bien. Je ne l'avais pas mis dans un module et pas bien mis le nom de la feuil. Et oui la ligne c'est bien surligné en jaune lors du débogage...
Mais... Oui parce qu'il y a un mais....
Actuellement dès que j'active la macro il me lance l'impression 5 ou 6 fois, j'aimerais que la macro se lance avec un bouton et qu'une seule fois si possible.
En tout cas merci infiniment pour votre aide, vous aurez remarqué je ne suis pas très fort en VBA. Enfin on peut pas être bon partout...
Encore merci ! :) -
ContributeurBien sur que c'est dans VBA. :-)
Et tu "compile" pas.. tu exécute la macro.
Tu a bien adapter le nom de la feuille ??, remplacer "Feuil1" par le nom de l'onglet.
Et met le code dans un module public, Insertion >> Module
Et pour info, quand tu a un message d'erreur, dans le code il y a une ligne surlignée en jaune... C'est cette ligne là qui est en erreur. Et probablement que c'est la ligne en question qui génère cette erreur.
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques. -
C'est pas sur une ligne c'est dans VBA lorsque je compile...
-
Contributeurprochaine fois crée ton topic...
Sub copier() Sheets("Feuil1").Range("A1:C16").Copy 'adapter la plage à copier Sheets("Feuil2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlFormats Selection.PasteSpecial Paste:=xlValues End Sub
A+ -
Bonjour à vous tous,
désolé de vous déranger, mais je galere avec exel, et je suis vraiment nulle sur tout ce qui concerne les macros, Bref..
je souhaiterais recopier des informations d'une feuille à l'autre tout en gardant la même mise en forme, même couleur, même remplissage etc. sur excel 2003.
En fait je voudrais que les infos de la feuille A se retrouve automatiquement dans la feuille B tout en gardant la même couleur de fond, la même police, couleur de police etc. La mise en forme en fait! J'ai des formules du style : « =SI(janvier!C6<>"";janvier!C6;"") » j'ai le bon texte qui se retrouve dans la case (logique) mais la mise en forme, est différente de l'original et je n'arrive pas à garder la mise en forme de la cellule souche...Est-ce possible???
Merci d'avance de vos réponses
NB: cé uuuurgent -
Contributeursur quel ligne ?
-
Merci, mais ça me met un message d'erreur.
Erreur d'exécution '9'
L'indice n'appartient pas à la sélection
Que dois-je faire ?
Sinon on peut pas déclencher la zone de sélection lorsque B7 (par exemple est différent de 0 ?
Encore merci :) -
ContributeurUp, croisement de poste, regarde mon poste précédant que je viens de mofifier
-
Bonjour,
Oui j'ai une entête répétitive et un bas de page aussi qui se répète mais donc la valeur total de ma page devis change en fonction des valeurs des lignes des devis, cela va de soit.
Non j'ai pas d'espace entre mes lignes et oui si j'imprime en manuel je change juste la plage d'impression en hauteur (en largeur elle ne bouge jamais).
J'aimerais que ma macro fonctionne comme cela :
Si D100 <>0 alors zone d'impression de A1 à D101
Si D200 <>0 alors zone d'impression de A1 à D201
Etc.
Mes pages sont calibrés de tel sorte que la zone d'impression se calibre comme il le faut. Je ne sais pas si je suis assez clair ^^.
Merci d'avance. -
ContributeurOui, avant de cogiter une macro,
Tu à une entête fixe ?
Il n'y a pas d'espace entre tes lignes ?
Et si je comprend bien tu devrais avoir entre disons.. 40 et 200 lignes l'une en dessous de l'autre.
Tu à une entête répétitive ? .. pour comprendre, si tu imprime en "manuel", tu change uniquement la plage d'impression ?
Si c'est comme ça, une macro pour imprimer le nombre de pages utiles n'est pas un problème.
Tu dis.
peut-être avec ce code à adapter...Sub PrintDevis() Dim Lig As Integer Const Colonnes = 5 'adater au nombre de colonne Const Ligne1 = 3 'Première ligne où commencer Sheets("feuil1").Select 'adapter le nom de la feuille For Lig = Ligne1 To [C65536].End(xlUp).Row Step 40 ActiveSheet.PageSetup.PrintArea = Range(Cells(Lig, 1), Cells(Lig + 39, Colonnes)).Address ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True Next Lig End Sub
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
- 1
- 2
Suivant