Imprimer des onglets à partir d'un tableau en page de garde

ELvt -  
 ELvt -
Bonjour,
je travaille depuis quelques jours sur une macro:
j'ai un fichier excel 2010 contenant plusieurs onglets (je vais les appeler ici Onglet1/Onglet2/Onglet3...), mon premier onglet sert de page de garde pour constituer un dossier. Sur cette page j'y ai mis un tableau sous forme de formulaire, ce dernier s'ouvre lorsque clique sur un bouton. Je souhaite pouvoir inscrire le nombre de copie de chaque onglet que je souhaite imprimer et lancer ensuite l'impression. J'ai réussi à faire un code en mettant la référence de la cellule dans le code ( "copies=[ref]") mais le procédé s'arrête si la cellule est vide ou égale à zéro (j'ai le code d'erreur m'ordonnant d'indiquer un chiffre compris entre 1 et 37000 et des brouettes)

Auriez vous une solution ?
Merci d'avance

4 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour

    Difficile à dire sans connaître ta macro

    mais le problème doit pouvoir se contourner avec un IF qui teste si la valeur est > 0

    lignes de macro avec sans doute une boucle For...

    copies=ref
    If copies >0 then
    lignes de macro pour l'impression
    End if

    suite de la macro (dont le Next de la boucle ...

    Cdlmnt
    0
  2. ELvt
     
    bonjour merci pour le début de réponse
    voici donc la macro:
    note: la commande se faisant à partir de Onglet1, la référence est en case A1, les liaisons ne sont plus bonnes dès la deuxième ligne car A3 fait référence à l'onglet1 alors que j'ai activé l'onglet2 mais je règlerais cela plus tard...

    Private Sub CommandButton2_Click()

    '
    ' ImpressionDossierFormulaire
    '

    '
    Sheets("Onglet1").Select
    ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=[A1], Collate:=True, IgnorePrintAreas:=False
    Sheets("Onglet2").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[A3], Collate:=True, IgnorePrintAreas:=False
    Sheets("Onglet3").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[AB1], Collate:=True, _
    IgnorePrintAreas:=False
    Sheets("Onglet4").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[A5], Collate:=True, _
    IgnorePrintAreas:=False
    Sheets("Onglet5").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[A6], Collate:=True, _
    IgnorePrintAreas:=False
    Sheets("Onglet6").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[A7], Collate:=True, _
    IgnorePrintAreas:=False
    Sheets("Onglet7").Select
    ActiveWindow.SelectedSheets.PrintOut Copies:=[A8], Collate:=True, _
    IgnorePrintAreas:=False

    End Sub
    0
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Essaie de modifier ta macro ainsi :

      Sheets("Onglet1").Select
      if range("A1").value >0 then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=[A1], Collate:=True, IgnorePrintAreas:=False

      idem pour les autres impressions

      Cdlmnt
      0
    2. ELvt
       
      Bonjour
      j'ai modifié la macro comme telle:
          Sheets("Onglet1").Select
      If Range("A1").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=[A1], Collate:=True, IgnorePrintAreas:=False

      Sheets("Onglet2").Select
      If Range("M1").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut Copies:=[M1], Collate:=True, IgnorePrintAreas:=False

      Sheets("Onglet3").Select
      If Range("AB1").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut Copies:=[AB1], Collate:=True, IgnorePrintAreas:=False

      ...

      Sheets("Onglet15").Select
      If Range("AB1").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut Copies:=[A17], Collate:=True, _
      IgnorePrintAreas:=False
      End Sub

      cela ne fonctionne pas, le procédé s'arrête toujours si la cellule A1 de la première ligne est nulle
      0
    3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Bonjour,

      Précise à chaque fois la feuille où trouver la valeur ;

      If sheets(("Onglet1").Range("A1").Value > 0 Then ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=[A1], Collate:=True, IgnorePrintAreas:=False

      Cdlmnt
      0
  3. foo
     
    Bonjour
    Je voie un truc comme ca

    Sub Test()
    Set Sh = Sheets("Liste")
    Sheets("Onglet1").Select
    Nc = Val(Sh.Range("A1").Value)
    If Nc > 0 Then
    ActiveWindow.SelectedSheets.PrintOut Copies:=Nc, Collate:=True
    End If
    '
    '
    Set Sh = Nothing
    End Sub
    0
  4. ELvt
     
    Cette dernière solution fonctionne plutôt bien, il faut juste retirer le "End If" sinon ça passe pas.

    Dernière petite chose: lorsque je lance l'impression, chaque onglet va s'afficher successivement. Est-il possible qu'une fois que je lance l'impression, il n'y ai pas ce défilement ? Je suppose qu'il faut modifier le "ActiveWindow" ?
    0