Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 Impression d'un tableau en plusieurs fois en avec numéro différent

NathN1984

XLDnaute Nouveau
Bonjour,
Tous les mois, je dois imprimer un tableau 97 fois (pour 97 chambres d'un établissement).
Pour le moment, les numéros des chambres sont inscrits à la main car je ne sais pas le faire sur Excel.
Je souhaiterais lancer les impressions avec les numéros des 97 chambres.
Je pense qu'il est possible de faire une macro, mais je ne sais pas faire...
Quelqu'un pourrait-il m'aider svp ?
En vous remerciant par avance.
 
Solution
@NathN1984

ton fichier en retour.

sur "Feuil2", fais Ctrl e ➯ ça devrait imprimer toutes tes feuilles comme tu le souhaites, avec un n° de chambre qui change à chaque fois en G1 et en G36 ; j'ai pas testé, car j'veux pas gaspiller du papier !

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "Feuil2" Then Exit Sub
  Dim k%, i&, n&: n = Cells(Rows.Count, 1).End(3).Row
  For i = 2 To n
    k = Val(Cells(i, 1))
    If k > 0 Then
      With Worksheets("Feuil1")
        .[G1] = k: .[G36] = k: .PrintOut
      End With
    End If
  Next i
End Sub

soan

soan

XLDnaute Barbatruc
Inactif
Bonjour Nathalie,

juste une piste :

VB:
Option Explicit

Sub Essai()
  Dim i%
  For i = 1 To 4
    MsgBox "N° de chambre : " & i
  Next i
End Sub

cette sub affiche successivement ces 4 messages :

Code:
N° de chambre : 1
N° de chambre : 2
N° de chambre : 3
N° de chambre : 4



pour se rapprocher de ta demande :

1) à la place de l'instruction MsgBox qui affiche le message dans une boîte de dialogue, utilise une instruction pour imprimer ; mais imprimer quoi au juste ? si tu as un fichier .pdf pour chacune des chambres, utilise PrintOut pour imprimer le fichier .pdf ; si tu as un fichier Excel pour chacune des chambres, utilise PrintOut pour imprimer le fichier .xlsm ou .xlsx ; mais peut-être que c'est pas un fichier à imprimer ? peut-être que ton classeur Excel contient 97 feuilles (1 feuille pour chacune des chambres) ? dans ce cas, il s'agit d'imprimer la bonne feuille de calcul de ton classeur Excel ; exemple : si le nom de la feuille de la 38ème chambre est par exemple "CHM38", alors utilise cette instruction VBA pour imprimer la feuille "CHM38" : Worksheets("CHM38").PrintOut ; et pour imprimer les 4 premières feuilles des 4 premières chambres : Worksheets("CHM" & i).PrintOut (dans la boucle For i = 1 To 4)

2) quand tu auras réussi à faire ce que tu veux pour 4 chambres, et si vraiment tu veux imprimer toutes les 97 feuilles de ton classeur, ou les 97 fichiers (.pdf .xlsm ou .xlsx), alors tu auras juste à remplacer 4 par 97 pour le compteur de boucle : For i = 1 To 97



peut-être que toutes les infos de ce post te suffiront pour résoudre ton problème ? par contre, si tu as besoin de davantage d'aide, tu devras mieux détailler ta demande, et aussi joindre un fichier Excel exemple (sans données confidentielles) ; pour envoyer un fichier, tu pourras utiliser le bouton "Joindre un fichier" qui est situé en bas à gauche d'un post en cours d'édition.​

soan
 

NathN1984

XLDnaute Nouveau
Bonjour Soan,
merci pour ta réponse.
Il s'agit d'un fichier Excel avec un seul tableau que je souhaite imprimer 97 fois en changeant automatiquement le numéro des chambres à l'impression.
Voici mon fichier, sur la 1ère feuille, mon tableau et sur la deuxième, la liste des numéros de chambre.
Je souhaiterai que le numéro change à la cellule G1 et se reporte également en G36.

Nathalie
 

Pièces jointes

  • FEUILLE ménage des chambres.xls
    41.5 KB · Affichages: 11

soan

XLDnaute Barbatruc
Inactif
@NathN1984

ton fichier en retour.

sur "Feuil2", fais Ctrl e ➯ ça devrait imprimer toutes tes feuilles comme tu le souhaites, avec un n° de chambre qui change à chaque fois en G1 et en G36 ; j'ai pas testé, car j'veux pas gaspiller du papier !

VB:
Option Explicit

Sub Essai()
  If ActiveSheet.Name <> "Feuil2" Then Exit Sub
  Dim k%, i&, n&: n = Cells(Rows.Count, 1).End(3).Row
  For i = 2 To n
    k = Val(Cells(i, 1))
    If k > 0 Then
      With Worksheets("Feuil1")
        .[G1] = k: .[G36] = k: .PrintOut
      End With
    End If
  Next i
End Sub

soan
 

Pièces jointes

  • FEUILLE ménage des chambres.xls
    55 KB · Affichages: 4

NathN1984

XLDnaute Nouveau
@soan

Ca a l'air de fonctionner !
Je viens d'essayer de lancer l'impression (sans que mon imprimante soit allumée), et les numéros de chambres défilaient en G1 et en G36 !
J'essaierai lundi au boulot car moi non plus je ne veux pas utiliser tout mon papier
En tout cas, Merci beaucoup !!!!

Nathalie
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Nathalie,

attention : dans ce post #6, il y a 2 fichiers différents !



tu as écrit : « ...les numéros de chambres défilaient en G1 et en G36 ! »

c'est normal que les numéros de chambres défilent, mais c'est car j'ai oublié de mettre une instruction qui évite cette gêne visuelle : Application.Screenupdating = 0 : ça désactive la mise à jour de l'écran lors de l'exécution de la macro ; en plus, j'ai ajouté quelques améliorations.



A) pour le 1er fichier v2

sur "Feuil2", fais Ctrl F2 ➯ Aperçu avant impression ; c'est en très petit, car pour que ça tienne sur une seule page, j'ai mis un zoom de 56 % ; appuie sur la touche Echap pour quitter l'Aperçu ; fais Ctrl e ➯ ça imprime les feuilles avec les bons numéros de chambre (même si tu ne vois plus défiler les numéros) ; à la fin de l'impression, G1 et G36 de "Feuil1" sont vides ➯ c'est de nouveau comme un formulaire vierge ; étant sur "Feuil1", fais Ctrl F2 : tu peux voir que là aussi, l'Aperçu tient sur une seule page, grâce à un zoom de 75 % ; autre bonus : quand tu veux imprimer, tu peux faire Ctrl e à partir de "Feuil2" ou "Feuil1", au choix.​

VB:
Option Explicit

Sub Essai()
  Dim sh1 As Worksheet, sh2 As Worksheet, k%, i&, n&
  Set sh1 = Sheets("Feuil1"): Set sh2 = Sheets("Feuil2")
  n = sh2.Cells(Rows.Count, 1).End(3).Row
  Application.ScreenUpdating = 0
  With sh1
    For i = 2 To n
      k = Val(sh2.Cells(i, 1))
      If k > 0 Then
        .[G1] = k: .[G36] = k: .PrintOut
      End If
    Next i
    .[G1, G36].ClearContents: .Select
  End With
End Sub



B) pour le 2ème fichier v3

sur "Feuil2", tu vois de suite que j'ai changé la présentation : c'est maintenant sur 5 colonnes au lieu d'une seule ; bien sûr, ça tient plus facilement sur une seule page : fais Ctrl F2 ; le zoom est de 100 % ; fais Echap ; si plus tard tu ajouteras des lignes et des colonnes à ce tableau de base, elles seront automatiquement prises en compte, sans que tu aies besoin de modifier le code VBA ; fais Ctrl e ➯ ça imprime les feuilles avec les bons numéros de chambre (même si tu ne vois plus défiler les numéros) ; à la fin de l'impression, G1 et G36 de "Feuil1" sont vides ➯ c'est de nouveau comme un formulaire vierge ; pour l'Aperçu de "Feuil1", le zoom est resté le même : 75 % ; là aussi, tu as le choix de faire Ctrl e à partir de "Feuil2" ou "Feuil1".

t'es gâtée aujourd'hui : voici un autre bonus : pour le tableau de "Feuil2", c'est pas obligé que toutes les colonnes soient de la même hauteur : tu peux mettre une colonne moins haute ou plus haute que les autres, quelle que soit sa position : ça peut tout aussi bien être la 1ère colonne A, la dernière colonne à droite (ici E), ou une des colonnes qui sont entre (ici B à D).​

VB:
Option Explicit

Sub Essai()
  Dim sh1 As Worksheet, sh2 As Worksheet, nlm&, m%, j%, i&, k%, n&
  Set sh1 = Worksheets("Feuil1"): Set sh2 = Worksheets("Feuil2")
  nlm = Rows.Count: Application.ScreenUpdating = 0
  m = sh2.Cells(2, Columns.Count).End(1).Column
  With sh1
    For i = 1 To m
      n = sh2.Cells(nlm, i).End(3).Row
      For j = 2 To n
        k = Val(sh2.Cells(j, i))
        If k > 0 Then
          .[G1] = k: .[G36] = k: .PrintOut
        End If
      Next j
    Next i
    .[G1, G36].ClearContents: .Select
  End With
End Sub



perso, j'préfère le fichier v3, avec les numéros de chambre sur 5 colonnes ; mais si pour une raison ou une autre tu dois absolument avoir les numéros de chambre sur une seule colonne, alors c'est le fichier v2 que tu dois utiliser. (le fichier v3 aussi peut servir pour des numéros de chambre sur une seule colonne, mais le code VBA du fichier v2 est bien plus simple)

bonne chance pour tes essais au boulot !

soan
 

Pièces jointes

  • FEUILLE ménage des chambres v2.xls
    67 KB · Affichages: 4
  • FEUILLE ménage des chambres v3.xls
    67 KB · Affichages: 6

NathN1984

XLDnaute Nouveau
Bonjour Soan,

Merci beaucoup
Les numéros de chambre ne doivent pas être absolument sur une seule colonne, ton fichier v3 me convient très bien.
Je regarde demain au boulot et te tiens au courant.
Encore merci !

Nathalie
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…