Imprimer une sélection

Résolu
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. 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. 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
    2. @aminescBonjour 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
    3.  
      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