[Impression] 50 onglets - 2 zones

  • Initiateur de la discussion Initiateur de la discussion Stef
  • 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 !

S

Stef

Guest
Bonjour à tous !

Je découvre ce forum bien sympathique, et j'en suis ravi.

J'ai essayé de trouver - sans succès - la réponse à mon problème... je vous le soumet donc...

Je dispose d'un fichier de 50 onglets.
Sur chaque onglet je dispose de 2 zones : 'Budget' / 'Réalisé'
Je dispose également de 2 synthèses... la synthèse budget, et la synthèse réalisé (évidemment).

Bon à ce stade vous devriez avoir deviner la question...

Je souhaite imprimer toutes les zones 'Budget' de mes 50 onglets ou toutes les zones 'Réalisé' en un seul bloc de façon à avoir mon petit botin 'Budget' ou mon petit botin 'Réalisé' avec sa synthèse.

Comment faire :S ?

Message édité par: Stef, à: 16/06/2005 10:48

Message édité par: Stef, à: 16/06/2005 10:50

Message édité par: Stef, à: 16/06/2005 18:29
 
Re,


Mmmmhhhh ....

Ca risque de faire une ou des grandes listes. Même si c'est figé.

Bon, solution 1 :

Code:
i = 1
For Each sh In Sheets
Select Case i
Case 7, 8, 9, 11, 15, 17, 18, 19 à 33, 37, 42
With Sheets(i).PageSetup
        .PrintArea = 'la plage'
        .Orientation = xlLandscape 'pour le format paysage
    End With
End Select
i = i + 1
Next


Solution 2. On se passe de la liste :

tu mets en A1, ou ailleur, une indication (par exemple la lettre 'P' pour paysage) en couleur de police blanche pour qu'on ne la voit pas.

puis :

Code:
i=1
For Each ws in worksheets
if range('a1')='P' then
With Sheets(i).PageSetup
        .PrintArea = 'la plage'
        .Orientation = xlLandscape 'pour le format paysage
    End With
End Select
end if
i=i+1
Next
Danger, que l'indication soit effacée. Penser à une protection.


Pas testé le code.

Abel.
 
aaaahhhhhhhhhhhhhhhhh j'adore la seconde option...

J'explique pourquoi (en résumé) : le fait de réserver une zone dans chaque feuille permet, une fois la zone saisie, de faire des regroupements 'à la volée', et ça c'est bien pratique... On peut même imaginer que la zone de saisie fasse référence à un nom qui ne serait pas forcement caché (tel que paysage par ex...).

Peux tu m'expliquer dans ton code comment rajouter éventuellement 2 codes références

Ainsi on aurait au lieu de
if range('a1')='P' then
on aurait
if range('a1')='P' or 'K' then
(enfin ça ça sort de mon imagination, car je suppose que ce n'est pas le bon code)...

Entre temps je teste ton bout de code... 😉

Message édité par: Stef, à: 17/06/2005 15:24
 
Re,

Tu vas finir par faire péter mon compteur avant l'heure !
Hi hi !

Bon plus sérieusement.
Pour entrer ces 'codes' de référence, plusieurs solutions.
Mais le plus simple me semble être d'aller dans chaque feuille pour y mettre le ou les codes aux endroits voulus.
De toutes façons, je pense que, pour l'existant, c'est le plus simple. Un peu long, peut être, si tu as près de 100 feuilles.

Si tu rajoutes des feuilles, tu peux essayer en mettant ce code dans 'Thisworkbook' :
Code:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Code1 = InputBox('Donnez le code format d'impression (P ou K)')
Code2 = InputBox('Si vous n'avez plus rien à donner, il vous reste votre langue pour le chat. Hi hi !')
Range('a1') = Code1
Range('a2') = Code2
Range('a1:a2').Font.ColorIndex = 2 'police en blanc
End Sub

Ceci dit, méfiance, car 100 feuilles me parait être beaucoup.
Je ne sais pas ce que tu as comme informations, calculs, etc dedans. Mais il n'est peut être pas impossible qu'Excel essaie de t'insulter si tu en rajoute beaucoup d'autres.


Abel.

Message édité par: Abel, à: 17/06/2005 15:39
 
LA SUITE....

Encore merci Abdel, voilà où j'en suis :

Mon code est le suivant :

Sub ImprimePage2()
Dim ws As Worksheet

i = 1
For Each ws In ThisWorkbook.Worksheets
If ws.Range('A1') = 'CHIFFRE D'AFFAIRE' Then
With Sheets(i).PageSetup
.PrintArea = '$C$1:$E$10'
.Orientation = xlPortrait 'format Portrait
End With
ws.PrintPreview
End If

Next ws

End Sub


Il me reste le problème suivant :
Bien que J'imprime uniquement les feuilles ayant 'CHIFFRE D'AFFAIRE' en case A1, j'ai encore un problème sur le format d'impression :

Le format est correctement pris en compte sur la première page, mais pas à partir de la seconde (toutes les cellules sont prises en comptes, et l'impression se fait en format paysage et non pas portrait) :ermm:


PS : j'ai utilisé la commande aperçu plutôt qu'imprimer, afin de ne pas gaspiller de feuilles en mode test

Message édité par: Stef, à: 17/06/2005 18:18
 
Effectivement cela fonctionne très bien,

Je vais maintenant passer de mon fichier test à mon fichier réel !

Bon je vous souhaite un bon we à tous (c'est le moment de faire une bonne pose là !), et Abel encore merci pour tout 😉
 
Salut le forum !

Bon juste un mot pour dire que tout fonctionne très bien.

Voici les 2 macros finales :

'Impression résultat

Sub Impression_Résultat()
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
If ws.Range('A1') = 'CHIFFRE D'AFFAIRE' Then
With ws.PageSetup
.PrintArea = '$A$1:$M$98'
.Orientation = xlPortrait 'format Portrait
End With
ws.PrintOut Copies:=1
End If

Next ws

End Sub


et

'Impression des Budgets

Sub Impression_Budgets()
Dim ws As Worksheet

For Each ws In ThisWorkbook.Worksheets
If ws.Range('A1') = 'CHIFFRE D'AFFAIRE' Then
With ws.PageSetup
.PrintArea = '$O$1:$AH$60'
.Orientation = xlLandscape 'format paysage
End With
ws.PrintOut Copies:=1
End If

Next ws

End Sub


🙂
 
Bonjour Stef, le forum,

J'arrive tout juste. Pile poil, finalement.

La numérotation fonctionne très bien.
En fait, comme les pages sont imprimées une à une, c'est forcément à chaque fois page 1/1.

Pour avoir 1/n, 2/n, etc, il faut un paquet de pages (on dit aussi plusieurs, c'est à dire au moins deux).

Regarde du côté de l'enregistreur de macro pour sélectionner plusieurs feuilles.
Tu fais la mise en page ensuite, sur l'ensemble de la sélection et tu imprimes le tout.
Les numéros de page seront corrects.


Te fais un bout de code plus tard si j'ai le temps.


Abel.
 
Abel écrit:
Bonjour Stef, le forum,

J'arrive tout juste. Pile poil, finalement.

La numérotation fonctionne très bien.
En fait, comme les pages sont imprimées une à une, c'est forcément à chaque fois page 1/1.

Pour avoir 1/n, 2/n, etc, il faut un paquet de pages (on dit aussi plusieurs, c'est à dire au moins deux).

Regarde du côté de l'enregistreur de macro pour sélectionner plusieurs feuilles.
Tu fais la mise en page ensuite, sur l'ensemble de la sélection et tu imprimes le tout.
Les numéros de page seront corrects.


Te fais un bout de code plus tard si j'ai le temps.


Abel.
 
Abel écrit:
Regarde du côté de l'enregistreur de macro pour sélectionner plusieurs feuilles.
Abel.

Exact Abel, mais je pensais l'avoir déja fait :


For Each ws In ThisWorkbook.Worksheets
If ws.Range('A1') = 'CHIFFRE D'AFFAIRE' Then
With ws.PageSetup


Je pense que ce qui me pose problème c'est que l'instruction

Next ws

est placée à la fin du code. il faudrait l'intégrer avant la fin de l'instruction If ?

Message édité par: Stef, à: 22/06/2005 17:23
 
- 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

A
Réponses
4
Affichages
1 K
Réponses
5
Affichages
954
OLIV67
O
P
Réponses
1
Affichages
1 K
papoow
P
L
Réponses
4
Affichages
1 K
Le pitoux
L
D
Réponses
6
Affichages
1 K
D
Réponses
11
Affichages
2 K
Luke3300
L
D
Réponses
8
Affichages
2 K
devileyes
D
C
Réponses
0
Affichages
918
C
S
Réponses
5
Affichages
1 K
S
I
Réponses
1
Affichages
1 K
I
Retour