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

Impression via listing

  • Initiateur de la discussion Initiateur de la discussion Lbn
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

L

Lbn

Guest
Bonjour,
Peut être allez vous pouvoir me retirer une épine du pied...
Je travail actuellement sur un gros fichier de gestion de personnel de caisse. Il y a un grand nombre de feuilles et tableaux, mais chaque caissier à une feuille qui lui est propre. J'ai unonglet contenant la liste de tous les agents (de A1 : D40). J'ai autant d'onglets avec le nom des agents.

Je cherche a pouvoir selectionner par une checkbox (par exemple) chacun des agents dont je veux imprimer le bilan ( situé sur sa page selon un range bien défini).

Mon probleme, je n'arrive pas à trouver le code qui va me permettre de définir les feuilles à imprimer (leur nombre peut varier c'est pour cela...).

La zone à imprimer reste toujours la même selon les agents, mettons AA10 à AZ40.

auriez vous une idée à me soumettre ?

Merci de votre précieuse analyse

Lbn
 
Re : Impression via listing

Bonjour Lbn et bienvenu sur le forum,

Quelqu'un a posé une question similaire à la tienne à cette endroit.

Je n'ai pas regardé en détail le lien ci-dessus, mais à mon avis, le plus simple serait de ne pas utiliser les cases à cocher, lourd à mettre en place, d'autant plus si le nombre de caissier en variable!

Je te laisse regarder le lien pendant que je te prépare une proposition qui devrait être plus facile.

ATH (= A Tout à l'Heure 😉 ).
 
Impressions à la demande

Bonjour Lbn, le fil,

Me revoila! Voici ci-joint un brouillon!

Cette méthode a le mérite d'être rapide, facile à mettre en place, facile à comprendre.

Je suis partie du principe que le nom des onglets étaient le nom des caissiers.

Macro mise à jour de la liste des caissiers sur la page principal :

Code:
Sub MiseAjourListeCaissier()
For i = 2 To Worksheets.Count
   Cells(i, 1) = Sheets(i).Name
Next i
End Sub

Excel récupère le nom de chacun des onglets et les écrits dans la colonne A de la page principal.

Colonne B : mettre une croix en face de chaque nom pour lesquels tu veux une ou plusieurs éditions

Colonne C : indiquer le nombre d'exemplaire

Code:
Sub Impression()
For i = 2 To Worksheets.Count
[B][COLOR="Blue"]    If Cells(i, 2) = "x" Then ActiveSheet.PrintOut , Copies:=Cells(i, 3)[/COLOR][/B]
Next i
End Sub

Comme tu peux le voir dans le code VBA, aucune allusion à :
-> la zone à imprimer, fait au niveau des onglets : sélectionner la zone à imprimer, cliquer sur "fichier" / "zone d'impression" / "Définir..."
Permet ainsi d'avoir une zone d'impression différentes (ou identique 😉 pour chaque onglet).

-> la mise en page, faite également au niveau des onglets :
* taille des marges
* ligne ou colonne de titre à répéter sur chaque nouvelle page si ne rentre pas sur une seule page
* largeur = ajusté sur 1 page, hauteur = ajusté sur ?? page(s)
* bas de page
* ...

Cela permet d'avoir un code VBA plus clair, plus court, plus facile à comprendre, mais surtout, c'est plus souple d'utisation!!!! Car pas besoin de modifier le code VBA, si on veut changer un des paramètres ci-dessus.

Voir l'exemple ci-joint

Pour simplifier encore plus la vie :
remplacer la ligne de code ci-dessus par :
Code:
[COLOR="Blue"]    If Cells(i, 2) <> "" Then ActiveSheet.PrintOut , Copies:=Cells(i, 3)[/color]

Ainsi quelque soit le(s) caractère(s) saisie dans la colonne B, il prendra en compte les salariés correspondant. Que ce soit une croix! Un rond! La lettre "A"! Un tiret! Le mot "Coucou"! ...

Bonne journée
 

Pièces jointes

Dernière édition:
Version encore plus simple

Une proposition sur le même principe encore plus simple.

Il suffit juste de mettre le nombre de copie voulu, en face de la(es) personne(s) choisi(e) et de remplacer la ligne ci-dessus en bleu par celle-ci :
Code:
[COLOR="Blue"]   If Cells(i, 2) <> 0 Then ActiveSheet.PrintOut , Copies:=Cells(i, 2)[/COLOR]
(version dans le fichier ci-joint)

ou mieux encore :

Code:
[COLOR="Blue"]   If Cells(i, 2) <> 0 [B][U]Or Cells(i, 2) <> ""[/U][/B] Then ActiveSheet.PrintOut , Copies:=Cells(i, 2)[/COLOR]
(version à mettre dans le fichier ci-joint)

PS. 1. : mais je n'osais pas te la proposer au départ, tu semblais tellement tenir aux petites croix 😀

PS. 2. : c'est vrai, c'est moins jolie, plus fonctionnel, mais également PLUS RAPIDE à mettre en place ET à utiliser! Tu pourras ainsi passer plus de temps à la machine à café 😉

Bonne journée
 

Pièces jointes

Dernière édition:
Re : Impression via listing

Bonjour Excel-Lent, et merci beaucoup de l'aide que tu m'apporte !

J'ai regardé le liens du post que t m'a donné, je trouve que cela est un peu trop chargé pour l'utilité que j'en aurai. Sur le userform du fichier, bcp de fonctions me seraient inutilles.

Dans ton sources il y a quelques petites modifications à apporter mais cela me permet d'avancer.

Notament, le nombre de copie de l'impression est inutile (^^ je me suis mal exprimer si tu avais compris qu'il en était question).
De manière à affiner ma demande, voici dans le concrêt les éléments déjà en place sur mon worksheet.

Les 3-4 premieres feuilles sont des tableaux à ne pas imprimer.
les 15 feuilles suivantes sont des nom d'agents (bob, henry, etc..)
Ces feuilles ont le même range de select pour l'impression.
Les 3-4 dernieres feuilles sont des parametrage dont celle de la liste des agents : on y voit un tableau de 40 lignes d'agent possibles où seuls les 15 premieres sont remplies (les autres sont renseignées acutellement avec 'Prenom' 'NOM').
La derniere feuille est la feuille d'impression.
Elle doit faire référence à la liste du tableau précedement cité, et permetre l'impression des feuilles selectionnées par la 'x'.

Ce n'est donc pas important de generer la liste des onglets car ceux ci sont deja listé dans le tableau des agents. Il faut juste que je rajoute une colonne avec la X', et que je trouve comment lancer l'impression des onglets dont le nom est marqué par la croix.

Ps: Je ne sais pas si j'ai fait une erreur, mais lors du test de ta macro, la feuille qui s'est imprimée n'était pas la bonnne(cad a dire celle ou j'avais mi la croix pour tester), mais celle sur laquelle était le bouton d'impression.


Merci bcp du temps que tu passe sur mon petit probleme 🙂

Lbn
 
Re : Impression via listing

Je pense avoir trouvé pourquoi la feuille qui s'imprimait sur ton exemple n'est pas la bonne.

If Cells(i, 2) <> 0 Then ActiveSheet.PrintOut , Copies:=Cells(i, 2)

Ne faudrait il pas faire un Then ActiveSheet.select avant de faire le printout ?
En effet l'impression se lance de la feuille active, comme le stipule la formule, et meme en detectant le X, aucune opération ne le fait selectionner la feuille concernée.

lbn
 
Re : Impression via listing

Bonjour Lbn,

Je voulais tellement simplifié, qu'en effet la macro "impression" est fausse!
N'ayant pas d'imprimante, je n'ai pu tester la macro complètement et me rendre compte de mon erreur! Mea culpa!

La voici corrigé :
Code:
Sub Impression()
For i = 2 To Worksheets.Count
   If Cells(i, 2) <> 0 Or Cells(i, 2) <> "" Then
[B][COLOR="Red"]   Sheets(i).Select[/COLOR]
[/B]   ActiveSheet.PrintOut
[COLOR="Red"][B]   Sheets(1).Select[/B][/COLOR]
Next i
End Sub

Tu as bien trouvé mon erreur! Elle venait bien de là! La macro est sur la feuille "Liste de TOUS les caissiers" depuis le début, donc lorsque je lui demandais d'imprimer la feuille active, forcément il imprimait cette fameuse page!!!

J'ai enlevé "Copies:=Cells(i, 2)" qui ne sert plus à rien! j'avais mal compris! Donc dans la colonne Qté (de ma dernière version : colonne B), tu peux la renommer et l'appeler : "A imprimer? Oui / Non" (à écrire en [B1]). Puis mettre ce que tu veux dans les cellules B2 à B... pour lui dire d'imprimer.
 
Dernière édition:
Précisions

Bonjour Lbn, le fil,

Lbn à dit:
De manière à affiner ma demande, voici dans le concrêt les éléments déjà en place sur mon worksheet.(...)

J'ai dû faire mon fichier ainsi car n'ayant pas ces informations, j'ai dû imaginer à quoi pouvait ressembler ton fichier! C'est pourquoi, nous répétons souvent "besoin d'un exemple" (en plus on gagne du temps et évitons le hors sujet)!

Lbn à dit:
J'ai un onglet contenant la liste de tous les agents
D'où mon onglet "Liste de TOUS les caissiers", c'est en faite cette onglet, que j'ai voulu reproduire (en simplifié évidement!) 😀 et qui je pensais, gérait également l'impression.

Je me suis mal fait comprendre, ce n'était pas du tout un onglet à rajouter dans ton fichier!

De plus tu disais que le nombre d'agent était fluctuant, d'où la macro "mise à jours..." cela évite de se casser la tête à le faire manuellement et risquer d'en oublier!

Lbn à dit:
Ces feuilles ont le même range de select pour l'impression.
C'est pas un soucis pour la macro, puisque c'est fait manuellement, par toi, au niveau de la mise en page!

Généralement dans ce genre de fichier, on fait un onglet type "caissier", on le peaufine, faisons la mise en page, le testons, le gardons en modèle dans un coin (par exemple en onglet masqué)

Puis seulement à ce moment, le dupliquons. Ne reste ainsi qu'à changer le nom de l'onglet et les 2-3 premières lignes, s'il y a des info. propre à ce caissier!

(Tu n'avais pas besoin de toutes ces précisions, j'en ai conscience, mais cela peut aider les personnes qui liront ton post et ne l'auront pas fais)

Lbn à dit:
Les 3-4 premieres feuilles sont des tableaux à ne pas imprimer.

Tu as réussi à adapter ma macro en conséquence? Ou besoin d'aide?

Si j'ai bien compris comment est fait ton fichier, voici comment tu peux adapter la macro

Code:
Sub Impression()

' J'ai mis [COLOR="Red"][B]2[/B][/COLOR] car dans mon exemple, je commence à imprimer à
' partir du deuxième onglet, donc si l'onglet de ton premier caissier est en position 4,
' remplace [COLOR="Red"][B]2[/B][/COLOR] par [COLOR="Red"][B]4[/B][/COLOR]
' J'ai mis [COLOR="Blue"]Worksheets.Count[/COLOR], pour dire à Excel d'imprimer jusqu'au dernier onglet.
' Si la dernière feuille de ton caissier est l'avant dernier onglet remplace
' [COLOR="Blue"]Worksheets.Count[/COLOR] par [COLOR="Blue"]Worksheets.Count - 1[/COLOR]

For i = [COLOR="Red"][B]2[/B][/COLOR] To [COLOR="Blue"]Worksheets.Count[/COLOR]

' pour la ligne ci-dessous, il regarde la colonne [COLOR="Orange"][B]2 -> B[/B][/COLOR], pour chaque ligne de la ligne [COLOR="Red"][B]2[/B][/COLOR] à [COLOR="Blue"]Worksheets.Count[/COLOR]
' en effet, dans mon fichier, par le plus grand des hasards :) la position de l'onglet
' du caissier correspond au numéro de la ligne! :D Mais si ce n'est pas le cas, ce n'est pas grâve
' suffit juste de rajouter 2-3 lignes de code.

   If Cells(i, [COLOR="Orange"][B]2[/B][/COLOR]) <> 0 Or Cells(i, [COLOR="Orange"][B]2[/B][/COLOR]) <> "" Then
' la partie ci-dessous ne devrait pas poser soucis et s'adapter correctement! A tester en cas réél!
   Sheets(i).Select
   ActiveSheet.PrintOut
   Sheets(1).Select
   
Next i

End Sub
PS. : les lignes de code précédé du signe ' sont juste des explications, non prise en compte par Excel, c'est juste pour toi, tu peux les supprimer lors du copier coller de la macro, elle fonctionnera toujours pareil!
Sauf autre exception non indiqué dans tes précédents post, cette macro devrait te convenir.

Espérant ne pas avoir été trop technique ou incompréhensible!


Etant donné que pour l'impression il n'y a besoin que d'une 'x' (colonne B de mon dernier fichier mis en ligne). Tes deux onglets risquent de faire doublons? Tu ne peux pas inclure cette colonne sur ton premier onglet "liste de tous les agents"?

De plus cela peut éviter des risques d'erreurs supplémentaire! Imagine que ta liste de caissier est complète sur le premier onglet qui te sert de récap. et incomplète ou fausse, dans l'onglet qui te sert à l'impression?

Lbn à dit:
Il faut juste que je rajoute une colonne avec la X', et que je trouve comment lancer l'impression des onglets dont le nom est marqué par la croix.

Qu'est-ce qui t'aiderais le plus?
-> Que j'explique ma macro pour que tu puisse l'adapter tout(e) seul(le)?
-> une réponse précise? Auxquels cas, j'aurais juste besoin : de ton fichier avec le premier onglet, et un onglet type "caissier" nettoyé de toutes données inutiles, ainsi que les confidentiels, et le dernier onglet "impression" si tu décide de garder cette méthode.

Bonne soirée
 
Dernière édition:
Re : Impression via listing

Code:
Sub Impression()
For i = 2 To Worksheets.Count
   If Cells(i, 2) <> 0 Or Cells(i, 2) <> "" Then
[B][COLOR="Red"]   Sheets(i).Select[/COLOR]
[/B]   ActiveSheet.PrintOut
[COLOR="Red"][B]   Sheets(1).Select[/B][/COLOR]
Next i
End Sub

Bonsoir Excel-Lent,

J'obtiens un message d'erreur avec ces lignes : erreur de compilation, NEXT sans FOR

Pourtant le FOR semble bien la ...
 
Re : Impression via listing

Bonsoir Lbn,



La boucle For appelé : "FOR-To-Next" est ainsi constitué :
For ta variable = ton nombre de départ to ton nombre de fin
ton morceau de macro
Next ta variable (certain n'écrive que Next)

Ce qui signifie que ton morceau de macro sera exécuté ton nombre de fin - ton nombre de départ fois.

Pour cette partie ton code est juste, tous les éléments sont présents

Par contre, tu as une erreur concernant ton IF appelé : "IF-Then-(Else-)End If
(le Else est optionnel) est ainsi constitué :
IF ta condition Then
ton morceau de macro qui s'exécute quand ta condition est vrai
End If

Dans ton IF, il manque le "End If"

Pour information, concernant le "IF-Then-End If" si ton morceau de macro est court et que tu l'écrive ainsi :
IF ta conditionCOLOR="Blue"]Then[/COLOR] ton morceau de macro

Comme le morceau de macro est sur la même ligne, il ne faut pas écrire le "END IF"

Ta macro corrigé :
Code:
Sub Impression()
[COLOR="Red"][B]For[/B][/COLOR] i [COLOR="Red"][B]=[/B][/COLOR] 2[COLOR="Red"][B] To[/B][/COLOR] Worksheets.Count
   [B][COLOR="Blue"]If[/COLOR][/B] Cells(i, 2) <> 0 Or Cells(i, 2) <> "" [COLOR="Blue"][B]Then[/B][/COLOR]
      Sheets(i).Select
      ActiveSheet.PrintOut
      Sheets(1).Select
   [COLOR="Blue"][B]End If[/B][/COLOR]
[B][COLOR="Red"]Next i[/COLOR][/B]
End Sub

Comme tu as pu t'en rendre compte par toi même, c'est pas facile de voir comment tout est imbriqué et s'il ne manque rien! C'est pourquoi il est très important, pour que ton code soit clair, facile à comprendre et à corriger, de bien faire des retraits de ligne (touche espace - c'est pas aussi clair que les espaces + couleurs, mais sur excel dans la zone code il n'y a que les commentaires qui se colorie (en vert)).

Et ne pas hésiter à mettre des commentaires dans ton code, pour expliquer ce que tu veux faire. (mettre au début de ton commentaire le signe : '

Ainsi lorsque tu écris ton code c'est plus facile ; quand quelqu'un doit t'aider idem, il se plonge plus facilement dedans ; et lorsque tu dois reprendre ton code plusieurs mois après, tu te remets plus vite dans le bain 😉

Méa culpa pour l'erreur!

Bonne soirée à toi
 
Dernière édition:
Re : Impression via listing

Je suis impressioné du temps que tu passe à répondre avec précision aux questions qui te sont soumises ! Du formatage du texte aux explications des fonctions, rien n'y manque ! chapeau !

Je retourne donc bircoler mes macro et je me permetrai de revenir vers toi en cas de soucis !

Merci une nouvelle fois !

lbn
 
Re : Impression via listing

Code:
Sub Impression()
[COLOR="Red"][B]For[/B][/COLOR] i [COLOR="Red"][B]=[/B][/COLOR] 2[COLOR="Red"][B] To[/B][/COLOR] Worksheets.Count
   [B][COLOR="Blue"]If[/COLOR][/B] Cells(i, 2) <> 0 Or Cells(i, 2) <> "" [COLOR="Blue"][B]Then[/B][/COLOR]
      Sheets(i).Select
      ActiveSheet.PrintOut
      Sheets(1).Select
   [COLOR="Blue"][B]End If[/B][/COLOR]
[B][COLOR="Red"]Next i[/COLOR][/B]
End Sub

rebonsoir, j'avance tout doucement ^^

Je bloque désormais sur le fait de remplacer le "Sheets(i).Select" par une sorte de sheets.name.cell(i,1)

Bien évidement la syntaxe citée dessus n'est qu'un exemple ^^

Je t'ai joins un exemple du fichier, avec le range qui sera concerné.

je te laisse me guider, et je retourne essayer d'avancer ! merci merci ^^
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
6
Affichages
916
Réponses
16
Affichages
3 K
B
Réponses
10
Affichages
1 K
Brahim077
B
Réponses
13
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…