[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

22 réponses

  1. 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
    1. 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 ? :)
      1. Contributeur
        Beh éventuellement, mais là.. je sais plus où j'en suis. C'est quoi cette histoire de PDF ?
        1. 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 ?
          1. Contributeur
            Je 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+
            1. 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
              1. Contributeur
                OK, 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.
                1. Contributeur
                  Normalement 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 ?
                  1. 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 ! :)
                    1. Contributeur
                      Bien 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.
                      1. Contributeur
                        prochaine 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+
                        1. un grand merci pour toi lermite,
                          ton programme m'a vraiment servi,
                          et excusez moi pour le derangement, c'été ma premier fois que j'écris sur ce forum et je savais pas comment créer un topic

                          A+
                      2. 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
                        1. 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 :)
                          1. Contributeur
                            Up, croisement de poste, regarde mon poste précédant que je viens de mofifier
                            1. 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.
                              1. Contributeur
                                Oui, 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