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.
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
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.
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.
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
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 !!!!
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 v3aussi peut servir pour des numéros de chambre sur une seule colonne, mais le code VBA du fichier v2 est bien plus simple)
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 !