Imprimer une sélection

Résolu
aminesc Messages postés 70 Statut Membre -  
 Utilisateur anonyme -
Bonjour ,
j'aimerai bien imprimer un tableau sur excel , le nombre de ligne change .
voici se que j'ai essaye mais sa marche pas

Sub IMPR()

Sheets("Brouillarde_Caisse").Select

ligne = Worksheets("Brouillarde_Caisse").Range("B" & Rows.Count).End(xlUp).Row 'deteriner fin de ligne

   
    Range("B2":"B" &ligne).Select
    
    ExecuteExcel4Macro "PRINT(1,,,1,,TRUE,,,,,,1,,,TRUE,,FALSE)"
End Sub


il y a t'il une possibilité de mentionner de copie d'impression
merci

1 réponse

  1. Utilisateur anonyme
     
    Bonjour aminesc,

    Pourquoi donc utiliser les anciennes macros XL4 ?

    C'est mieux d'utiliser le VBA, qui a été créé et mis en place par
    Microsoft afin de les remplacer plus efficacement !

    ----------------------------------------

    D'autre part, la façon dont la dernière ligne est déterminée
    indique qu'il n'y a rien d'autre sous le tableau ; et donc
    on peut imprimer la feuille entière :

    
    Sub IMPR()
      WorkSheets("Brouillarde_Caisse").PrintOut
    End Sub
    
    

    En français comptable, on écrit : « Brouillard de Caisse » ;
    donc le nom de la feuille à indiquer est peut-être plutôt :
    WorkSheets("Brouillard_de_Caisse").PrintOut

    Et si on nomme cette feuille "Brouillard de Caisse", ce sera :
    WorkSheets("Brouillard de Caisse").PrintOut
    avec 2 " " (espaces) au lieu de 2 "_" (soulignés).

    Mais vous pouvez aussi appeler cette feuille "Caisse", donc :
    WorkSheets("Caisse").PrintOut

    Cordialement.  😊
     
    0
    1. aminesc Messages postés 70 Statut Membre
       
      Bonjour albkan ,
      Pour se qui concerne ta solution :
      Sub IMPR()
      WorkSheets("Brouillarde_Caisse").PrintOut
      End Sub

      elle n'est pas utile pour mois car j' besoin d'imprimer une sélection et non pas la page entière .
      voici se que j'ai trouve comme solution :
      Sub IMPR()

      Sheets("Brouillarde_Caisse").Select

      ligne = Worksheets("Brouillarde_Caisse").Range("B" & Rows.Count).End(xlUp).Row 'deteriner fin de ligne



      Range("B2:H" & ligne).Select
      ExecuteExcel4Macro "PRINT(1,,,2,,TRUE,,,,,,1,,,TRUE,,FALSE)"

      End Sub

      quesque vous en dit .
      0
      1. Utilisateur anonyme > aminesc Messages postés 70 Statut Membre
         
        Bonjour aminesc,

        ================================

        A) Choix de la feuille

        Pour sélectionner la feuille, mettez plutôt :
        Worksheets("Brouillarde_Caisse").Select

        Car Sheets est pour tout type de feuille (y compris graphique),
        alors que Worksheets est pour feuille de calcul (c'est-à-dire
        avec toutes les cellules), ce qui est le cas. De plus, la feuille
        sera trouvée plus rapidement par Excel, car au lieu de la
        chercher dans toutes les feuilles de tout type, il la cherchera
        seulement dans les feuilles de calcul (soit un seul type).

        --------------------------------------------------------

        Sélectionner la feuille indiquée est une bonne solution, mais comme
        en général on préfère voir d'abord ce qu'on va imprimer, je pense
        que c'est mieux que la macro refuse de se lancer si on n'est pas
        sur la bonne feuille, et ce sera à l'utilisateur d'aller sur la feuille
        "Brouillarde_Caisse" pour voir les données (et vérifier si besoin),
        puis de lancer la macro. Pour cela, en 1ère ligne de la macro :

        If AcriveSheet.Name <> "Brouillarde_Caisse" Then Exit Sub

        ================================

        B) Impression de la plage, sans sélection de cette plage

        Pour la suite, après avoir utilisé une des 2 méthodes ci-dessus,
        on est donc forcément sur la bonne feuille : "Brouillarde_Caisse",
        donc il sera alors inutile de spécifier cette feuille, et le code VBA
        sera plus court. Ainsi :

        ligne = Worksheets("Brouillarde_Caisse").Range("B" & Rows.Count).End(xlUp).Row ' déterminer fin de ligne

        peut devenir plus simplement :

        ligne = Range("B" & Rows.Count).End(xlUp).Row ' déterminer fin de ligne

        Vous pouvez imprimer votre plage sans avoir à faire de sélection.

        Option Explicit
        
        Sub IMPR()
          If AcriveSheet.Name <> "Brouillarde_Caisse" Then Exit Sub
          Dim ligne As Long
          ligne = Range("B" & Rows.Count).End(xlUp).Row ' déterminer fin de ligne
          Range("B2:H" & ligne).PrintOut
        End Sub
        

        Solution sans macro XL4 (obsolète) et avec VBA seulement.

        ================================

        C) Complément

        Comme on imprime la plage sans faire de sélection, on peut l'imprimer depuis
        n'importe quelle feuille, sans même aller sur la feuille "Brouillarde_Caisse".

        Mais cette fois, bien sûr, on est obligé d'indiquer le nom de la feuille :

        Option Explicit
        
        Sub IMPR()
          Dim ligne As Long
          ligne = Range("B" & Rows.Count).End(xlUp).Row ' déterminer fin de ligne
          Worksheets(Brouillarde_Caisse).Range("B2:H" & ligne).PrintOut
        End Sub
        


        ================================

        Bien sûr, si vraiment vous y tenez (par habitude ou autre), vous pouvez
        continuer à utiliser les macros XL4 ; à vous de choisir !  😉

        Pouvez-vous me dire ce que vous pensez de ce long article ?

        Cordialement.  😊
         
        0
    2. Utilisateur anonyme
       
       
      Rectificatif
      Il y a 2 erreurs dans mon code VBA qui figure en partie C) Complément.

      1) Pour la ligne 5 :
      La feuille doit aussi être indiquée pour le Range correspondant à « ligne ».

      2) Pour la ligne 6 :
      Le nom de la feuille Brouillarde_Caisse doit être entre guillemets.

      D'où ce nouveau code VBA :

      Option Explicit
      
      Sub IMPR()
        Dim ligne As Long
        With Worksheets("Brouillarde_Caisse")
          ligne = .Range("B" & Rows.Count).End(xlUp).Row ' déterminer fin de ligne
          .Range("B2:H" & ligne).PrintOut
        End With
      End Sub
      

      Attention : il faut un point ( . ) devant le R des 2 Range !
       
      0