Imprimer Sélection sur plusieurs feuilles.
Résolu
Nai
Messages postés
714
Date d'inscription
Statut
Membre
Dernière intervention
-
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
Nai Messages postés 714 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Sélectionner plusieurs feuilles excel vba
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Word et excel gratuit - Guide
- Regrouper plusieurs feuilles excel en une seule - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
7 réponses
Voir ceci pour imprimer directement sans prévisualisation:
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-19
https://silkyroad.developpez.com/VBA/FeuilleDeCalcul/#LII-A-19
Si la 1ère macro fonctionne, pourquoi ne pas mettre cela au début de la macro avant la boucle. Elle ne s'affichera qu'une fois seulement et l'utilisateur pourra faire son choix:
Sheets("nom de la 1ère feuille").Range("A34:K91").Select Application.Dialogs(xlDialogPrint).Show ActiveWindow.Selection.PrintPreview
Merci et désolé pour le temps de réaction ^^
La macro donne donc ceci :
Ça fonctionne relativement bien ! :D
Les seuls hics, mais je chipote un soupçon :
- La macro a pour effet de lancer deux impressions distinctes (mais qu'importe).
- Par contre, je n'ai l'aperçu que de la première feuille (finalement, ça importe moins que je ne le pensais)
- Plus important, est-ce qu'il est possible de ne pas nommer la feuille par son nom mais par son chiffre (en l'occurrence, "Feuil2" et non "Machin") ?
La macro donne donc ceci :
Sub print_p1() Sheets("Accueil").Range("A34:K91").Select Application.Dialogs(xlDialogPrint).Show ActiveWindow.Selection.PrintPreview Dim Feuille For Each Feuille In ActiveWorkbook.Sheets If Feuille.Index > 1 And Feuille.Index < 16 Then Feuille.Select Range("A34:K91").Select End If Next Sheets(Array((2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16))).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True End Sub
Ça fonctionne relativement bien ! :D
Les seuls hics, mais je chipote un soupçon :
- La macro a pour effet de lancer deux impressions distinctes (mais qu'importe).
- Par contre, je n'ai l'aperçu que de la première feuille (finalement, ça importe moins que je ne le pensais)
- Plus important, est-ce qu'il est possible de ne pas nommer la feuille par son nom mais par son chiffre (en l'occurrence, "Feuil2" et non "Machin") ?
Oui l'on peut nommer son nom par son chiffre, c'est le CodeName. Voir ceci:
Je pense que vu tes connaissances tu pourras l'adapter à tes besoins
'http://silkyroad.developpez.com/VBA/FeuilleDeCalcul/ Dim Ws As Worksheet 'Boucle sur toutes les feuille de calcul du classeur. Les onglets graphiques ne sont pas pris 'en compte. 'ThisWorkbook correspond à l'objet classeur contenant la macro For Each Ws In ThisWorkbook.Worksheets 'Renvoie le CodeName de chaque feuille MsgBox Ws.CodeName Next Ws
Je pense que vu tes connaissances tu pourras l'adapter à tes besoins
Merci pour cette réponse :)
J'ai résolu le problème avec :
Mais je ne comprend pas, j'ai plusieurs impression (dont certaines non demandées). Si j'ai bien compris, le Sheets array demande le numéro de la feuille dans l'ordre d'affichage. Ce sont donc les 30 premières feuilles à partir de la deuxième. Mais je n'indique donc pas le numéro spécifique de la feuille (Feuil1, Feuil2, etc...)
Qu'est-ce que ça imprime de votre côté ? https://www.cjoint.com/c/EEeuZs4bfbT
J'ai résolu le problème avec :
Sub print_p1() Application.ScreenUpdating = False Dim Feuille For Each Feuille In ActiveWorkbook.Sheets If Feuille.Index > 1 And Feuille.Index < 31 Then Feuille.Select Range("A34:K91").Select End If Next Application.Dialogs(xlDialogPrint).Show Sheets(Array((2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19), (20), (21), (22), (23), (24), (25), (26), (27), (28), (29), (30), (31))).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner Application.ScreenUpdating = True End Sub
Mais je ne comprend pas, j'ai plusieurs impression (dont certaines non demandées). Si j'ai bien compris, le Sheets array demande le numéro de la feuille dans l'ordre d'affichage. Ce sont donc les 30 premières feuilles à partir de la deuxième. Mais je n'indique donc pas le numéro spécifique de la feuille (Feuil1, Feuil2, etc...)
Qu'est-ce que ça imprime de votre côté ? https://www.cjoint.com/c/EEeuZs4bfbT
si tu m'avais dit cela dès le départ, on aurait perdu moins de temps!!
Ça t'imprime les ateliers Machin à Plantes et 1 à 15 ?
Le problème vient de la sélection des feuilles. Je ne peux pas deviner les feuilles à copier quand tu mets:
pour moi ceux sont les feuilles de 2 à 31!
voici donc le code qui fonctionne pour imprimer les feuilles Machin à Plantes et les feuilles de 1 à 15:
a adapter pour les autres impressions.
Ça t'imprime les ateliers Machin à Plantes et 1 à 15 ?
Le problème vient de la sélection des feuilles. Je ne peux pas deviner les feuilles à copier quand tu mets:
Sheets(Array((2), (3), (4), (5), (6), (7), (8), (9), (10), (11), (12), (13), (14), (15), (16), (17), (18), (19), (20), (21), (22), (23), (24), (25), (26), (27), (28), (29), (30), (31))).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True
pour moi ceux sont les feuilles de 2 à 31!
voici donc le code qui fonctionne pour imprimer les feuilles Machin à Plantes et les feuilles de 1 à 15:
Sub print_p1() Application.ScreenUpdating = False Dim Feuille For Each Feuille In ActiveWorkbook.Sheets If Feuille.Index > 1 And Feuille.Index < 17 Then 'Feuilles Machin à Plantes Feuille.Select Range("A34:K91").Select Worksheets(Feuille.Name).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner End If Next For Each Feuille In ActiveWorkbook.Sheets If Feuille.Name >= 1 And Feuille.Name <= 15 Then 'Feuille' de 1 à 15 Feuille.Select Range("A34:K91").Select Worksheets(Feuille.Name).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner End If Next Application.ScreenUpdating = True End Sub
a adapter pour les autres impressions.
Désolé. Je tâcherais d'être plus précis à l'avenir ;)
Effectivement, ça fonctionne beaucoup mieux ^^
Aussi, peut-on faire apparaître la boite de dialogue de l'imprimante (une seule fois) ? Mon impression (recto verso) place la reliure sur le haut, je voudrais pouvoir la placer à gauche.
Merci infiniment ! :)
Effectivement, ça fonctionne beaucoup mieux ^^
Aussi, peut-on faire apparaître la boite de dialogue de l'imprimante (une seule fois) ? Mon impression (recto verso) place la reliure sur le haut, je voudrais pouvoir la placer à gauche.
Merci infiniment ! :)
C'est simple, comme ceci:
Sub print_p1() Application.ScreenUpdating = False Dim Feuille Application.Dialogs(xlDialogPrint).Show 'affiche la boite de dialogue For Each Feuille In ActiveWorkbook.Sheets If Feuille.Index > 1 And Feuille.Index < 17 Then 'Feuilles Machin à Plantes Feuille.Select Range("A34:K91").Select Worksheets(Feuille.Name).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner End If Next For Each Feuille In ActiveWorkbook.Sheets If Feuille.Name >= 1 And Feuille.Name <= 15 Then 'Feuilles de 1 à 15 Feuille.Select Range("A34:K91").Select Worksheets(Feuille.Name).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner End If Next Application.ScreenUpdating = True End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Peut-être cela:
Peut-être cela:
Application.Dialogs(xlDialogPrint).Show
Essaie ceci:
Sub parcourir() Dim feuille For Each feuille In ActiveWorkbook.Sheets If feuille.Index > 1 And feuille.Index < 16 Then feuille.Select Range("A1:K91").Select Range(Selection, Selection.End(xlDown)).Select 'ActiveWindow.Selection.PrintPreview ' au choix Application.Dialogs(xlDialogPrint).Show ' au choix End If Next End Sub
Merci pour cette réponse ! C'est super, ça fonctionne ^^
Cependant, je dois accepter l'impression de chacune des feuilles. N'est-il pas possible d'afficher toutes les sélections pour une seule impression ?
J'ai choisi :
Lorsque je lance la macro, j'ai l'aperçu de la sélection de la première feuille. J'imprime, et je passe à l'aperçu de la deuxième feuille, j'imprime, etc... pour les 16 feuilles.
En tout cas, encore merci !
Cependant, je dois accepter l'impression de chacune des feuilles. N'est-il pas possible d'afficher toutes les sélections pour une seule impression ?
J'ai choisi :
ActiveWindow.Selection.PrintPreview ' au choix
Lorsque je lance la macro, j'ai l'aperçu de la sélection de la première feuille. J'imprime, et je passe à l'aperçu de la deuxième feuille, j'imprime, etc... pour les 16 feuilles.
En tout cas, encore merci !
Essaie ceci:
a adapter pour les autres impressions
Sub print_p1() Application.ScreenUpdating = False Dim Feuille For Each Feuille In ActiveWorkbook.Sheets If Feuille.Name > 1 And Feuille.Name < 31 Then Feuille.Select Range("A34:K91").Select Worksheets(Feuille.Name).PrintOut Copies:=1, _ ActivePrinter:="", _ Collate:=True Call Impression.selectionner End If Next Application.ScreenUpdating = True End Sub
a adapter pour les autres impressions
Mais ce n'est pas ce que je cherche ^^
Je suis parvenu à ceci :
L'argument Collate me faisait défaut. Là, tout fonctionne, à une exception : Pas d'aperçu :/ Le document est assemblé et imprimé sans aperçu et sans pouvoir sélectionner l'imprimante à utiliser.
A ce propos, j'aurais pu utiliser l'argument ActivePrinter, mais cela ne fait que choisir l'imprimante, toujours sans afficher l'aperçu :/
J'ai besoin que l'utilisateur puisse avoir un aperçu avant impression. Problème, quand je tente :
ou
Ca ne marche pas :/
On est pas loin du bout ! :)
Encore merci !