Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 19/09/2011, 19h31   #1
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Par défaut Imprime pour développement durable

Bonjour

Le code ci-dessous imprime toutes les feuilles du classeur sauf la première.
Chaque onglet est calibré pour imprimer 2 feuilles A4.
Et bien sur chaque feuille n'a que le recto d'imprimé.
Le gestionnaire distribue ensuite 2 feuilles par onglet à chaque agent.

Je souhaiterais donc en premier imprimer toutes les feuilles impaires, 1, 3, 5, 7, etc...puis une MSBOX demandant au gestionnairte: "Veuillez retourner les feuilles de l'imprimante pour imprimer en Verso" si "oui", imprime les feuilles 2, 4, 6, etc... si non, continue l'impression en cours dans l'ordre du dernier onglet et en remontant.

Le but est d'utiliser chaque feuille A4 Recto Verso pour chaque onglet sachant que chaque onglet est différent des autres.

Je ne sais pas si c'est possible, je n'ai jamais vu cette demande.

Merci pour vos propositions


Code :
1
2
3
4
5
6
7
8
9
10
11
Sub ImprimeSaufLaPremière()
 
    Dim i As Integer
 
For i = 2 To Sheets.Count
    Sheets(i).PrintOut
Next i
 
 
 
    End Sub
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 20h13   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 706
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 706
Points : 3 627
Points : 3 627
Salut, une imprimante virtuelle style PDFCreator, Distiller ou autre et l'enregistreur de macros devraient t'apporter une réponse
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/09/2011, 20h30   #3
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Bonjour kiki29
Il est impossible d'utiliser d'autres imprimantes que celles déjà en place dans l'entreprise, de plus tout est verrouillé par le gestionnaire informatique.

Je sais utiliser l'enregistreur de macro, qui ne fonctionne pas pour des variables d'onglets, de plus il faut que celà fonctionne pour n'importe quelle imprimante déjà en place sur les différents sites.

Merci
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 18h00   #4
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut heu...!!!

bonjour

si tout est bloqué a ton boulot tu n'a aucune chance d'arriver a ton but
puisque la modification de l'imprimante est bloqué par la meme occasion

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/09/2011, 18h49   #5
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Bonjour patricktoulon
En effet tout est verrouillé pour éviter de faire n'importe quoi, et c'est pourquoi seul une macro peut résoudre ma demande, il faudrait imprimer page1 de 1, puis page3 de 3, puis page5 de 5, avec la variable count pour toutes feuilles, puis le message msbox, puis imprimer page dernière de dernière, et en remontant, sauf la sheet 1 qui ne doit jamais être imprimée.
Ce code doit fonctionner pour différents classeurs avec la variable de x Sheets.
Bon pour le moment tout fonctionne très bien et mon fichier fonctionne, c'était juste pour utiliser les feuilles recto verso.
Cordialement
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 19h41   #6
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

il est vrai que ta question n'est pas facile

cependant avec l'enregistreur de macro j'obtiens cela

en impression directe:
Code :
1
2
3
4
5
'on imprime que la 1du sheet
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1
 
'on imprime que la 3 du sheet
ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1
une solution un peu "bout de scotch" serai de repeter l'operation pour chaque page avec les numero paire ou impaire


au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/09/2011, 20h46   #7
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Merci patricktoulon
Oui avec l'enregistreur c'est réalisable, mais le plus compliqué est la variable x sheets qui demande de faire une boucle...
A+
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 12h37   #8
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour vadorblanc

oui de toute facon tu va etre obligé de passer par une boucle sur les sheets
un truc du genre
Code :
1
2
3
4
5
6
7
8
9
10
dim sh as worsheet
for i = 1 to sh.count
sh(i).select
 
'on imprime que la 1du sheet
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1
 
'on imprime que la 3 du sheet
ActiveWindow.SelectedSheets.PrintOut From:=3, To:=3, Copies:=1
next
on pourrais peut etre remplacer le "selectedsheet" par "sh(i)" pour eviter les selects, mais je crois que ca ne fonctionne pas avec" activewindow"

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2011, 13h07   #9
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 256
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 256
Points : 2 979
Points : 2 979
Bonjour à tous les 2 (Et bonjour à la montagne VadorBlanc),

d'un point de vue conceptuel, ceci ne peut fonctionner sur une imprimante réseau multi utilisateurs et le risque de bourrage en impression verso n'est pas a négliger.

Mais vu les contraintes, il n'y a peut-être pas d'autres solutions.

... et, last but not least, j' espère que le nombre de pages, la première omise, est toujours bien pair !!

------------------edit---

euh... au fait, ton imprimante ne peux pas gérer le recto-verso de manière normale ? (parametres depuis VBA)
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2011, 15h38   #10
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Bonjour Godzestla
Mon projet à la fin demande à l'utilisateur d'appuyer sur un bouton pour imprimer toutes les sheets sauf la première sheet qui possède le bouton commande et la base de données et ceci personnalisé pour chaque site, ce qui imprime un certain nombre de sheets variables, mais toujours paramétré pour 2 feuilles A4 pour chaque sheets, donc toujours une feuille paire et une feuille impaire pour chacune des sheets pour une impression par semaine, l'utilisateur change le numéro de semaine, appuie sur le bouton impression, et distribue 2 feuilles par agents, la première feuille est datée du lundi au mercredi, la deuxième feuille du jeudi au samedi, avec le jour du mois, et il peut y avoir jusqu'à 50 agents par site, donc 100 feuilles A4. Chaque site possède une imprimante soit en réseau soit en série, les imprimantes sont différentes selon les sites.
Nous sommes une entreprise moderne et qui se veut d'être un modèle de développement durable, j'essaie d'apporter des solutions en imaginant des process à la portée de tous, Excel est capable de choses extraordinaires par la programmation, et j'apprends en autodidacte, par plaisir sur mon temps libre chez moi, Patricktoulon me répond que c'est compliqué, je suis d'accord, mes difficultés sont toujours les boucles...et puis imprimer toutes les premières feuilles A4 de chaque sheets, puis les autres, et de façon que tout soit juste, je crois que j’ai un peu rêvé…
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2011, 16h30   #11
Expert Confirmé
 
Avatar de Godzestla
 
Homme
Chercheur de bonheur
Inscription : août 2007
Messages : 2 256
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Chercheur de bonheur
Secteur : Industrie

Informations forums :
Inscription : août 2007
Messages : 2 256
Points : 2 979
Points : 2 979
Bonjour Vadorblanc,

si j'en crois ceci
Citation:
Chaque site possède une imprimante soit en réseau soit en série, les imprimantes sont différentes selon les sites.
tu cours à la catastrophe si tu a imprimé le recto, que tu remets ton papier sur l'imprimante et qu'un collègue sort à ce moment autrechose.... SUR TES FEUILLES.

Si tu as des machines d'impression évoluées avec plusieurs bacs, une solution possible est de réserver un bac avec par exemple un type d epaier défini comme spécial pour tes impressions, sinon.... personnellement, je fuirais cette solution comme la peste.
__________________
(\ _ /) Cordialement G@dz
(='.'=)

(")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.
Godzestla est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 21/09/2011, 16h31   #12
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
Bjr,

Pas super, mais une idée quand même :
Code :
1
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
32
33
34
35
36
37
38
39
40
41
42
43
44
 
Sub ImprimeSaufLaPremière()
Dim lPagesPairs() As Long
Dim lPagesImpairs() As Long
Dim lNbPagesPairs As Long
Dim lNbPagesImpairs As Long
Dim lNbPage As Long
Dim lPage As Long
Dim i As Long
For i = 2 To Sheets.Count
    With Sheets(i)
        ' Nombre de pages de la feuille => à vérifier
        lNbPage = (.HPageBreaks.Count + 1) * (.VPageBreaks.Count + 1)
        ' Si une page => impression simple
        If lNbPage = 1 Then
            .PrintOut
        Else
            lNbPagesPairs = 0
            lNbPagesImpairs = 0
            Erase lPagesPairs
            Erase lPagesImpairs
            ' Pour chaque page
            For lPage = 1 To lNbPage
                If lPage Mod 2 = 0 Then
                    ' Si page paire
                    lNbPagesPairs = lNbPagesPairs + 1
                    ReDim Preserve lPagesPairs(1 To lNbPagesPairs)
                    lPagesPairs(lNbPagesPairs) = lPage
                Else
                    ' Si page impaire
                    lNbPagesImpairs = lNbPagesImpairs + 1
                    ReDim Preserve lPagesImpairs(1 To lNbPagesImpairs)
                    lPagesImpairs(lNbPagesImpairs) = lPage
                End If
            Next
            ' Imprime la pages impaires
            .PrintOut lPagesImpairs, lPagesImpairs
            MsgBox "Veuillez retourner les feuilles de l'imprimante pour imprimer en Verso"
            ' Imprime la pages paires
            .PrintOut lPagesPairs, lPagesPairs
        End If
    End With
Next i
End Sub
Ce qui est embêtant c'est qu'on ne peut pas avec Excel (en tout cas 2003) choisir une plage du style 1-3-5-7 comme sur Word.
Par contre on peut donner un tableau de pages à imprimer à PrintOut qui va lancer l'impression de chaque page du tableau (on pourrait lancer PrintOut plusieurs fois de suite, ça ferait la même chose).
A tester donc, c'est juste une idée...

Bon courage pour ta réduction de gachis de papier.
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2011, 17h26   #13
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour

la méthode de arkham m'a l'air tout a fait correcte

peut être un petit sleep entre les paires et impairs ou toutes les 20 pages
de façon a pas faire serré l'imprimante

bien sur ça fait un peu bricolé mais je ne vois pas d'autre solution

au plaisir
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 21/09/2011, 22h17   #14
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Bonjour Arkham46, patricktoulon, Godzestla

Je viens de lancer ton code sur mon imprimante chez moi.
la page 1 de l'onglet 2 s'imprime = juste.

Le code demande d'imprimer en verso, je tourne la feuille et je lance le code.
La page 2 de l'onglet 2 s'imprime = juste
La page 1 de l'onglet 3 s'imprime = juste
La page 1 de l'onglet 3 s'imprime = faux car déjà imprimé

Le code demande d'imprimer en verso, je tourne la feuille et je lance le code.
La page 2 de l'onglet 3 s'imprime = juste
La page 2 de l'onglet 3 s'imprime = faux car déjà imprimé

Ensuite j'ai tout arrêté car je mange mes cartouches d'encre perso...

Le constat, c'est une boucle magnifique avec un petit beug dont je suis incapable de corriger, ou alors par tatonnement, mais trop fastudieux pour l'utilisateur qui doit constamment ouvrir le tiroir, prendre la feuille, la retourner, fermer le tiroir, et lancer la validation du code (bouton).

Mon idée de départ est de lancer toutes les impressions des premières pages de chaque onglets, de retourner toutes les feuilles imprimées, et de lancer la seconde impression pour le verso, et en croisant les doigts que tout soit juste. J'ai bien vu sur Word 2010 la possibilité d'imprimer les impairs ou les pairs, sur Excel 2010 il n'y a pas cette possibilité, et je suis obligé d'utiliser Excel 2003 car c'est celui que nous avons pour le moment sur toute la France.
Je dois prendre un compte aussi la diversité des imprimantes et pour celà seul une programmation par Excel est possible par ce forum.

En tout cas MERCI déjà pour l'intérêt et la pertinence de vos réponses.
Cordialement.
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/09/2011, 07h35   #15
Responsable Access
 
Avatar de Arkham46
 
Inscription : septembre 2003
Messages : 4 300
Détails du profil
Informations personnelles :
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : septembre 2003
Messages : 4 300
Points : 7 939
Points : 7 939
bjr,

j'avais oublié de réinitialiser les variables pour chaque feuille excel
j'ai ajouté :
Code :
1
2
3
4
            lNbPagesPairs = 0
            lNbPagesImpairs = 0
            Erase lPagesPairs
            Erase lPagesImpairs
pour tester sans user de papier, tu peux commenter les printout et vérifier le contenu des variables lPagesImpairs et lPagesPairs (fenêtre => variables locales en debug) pour s'assurer que ce n'est pas déconnant
__________________
Assistant de création/modification de rubans Office
Utilisez en VBA les librairies graphiques GDI, GDI+ et openGL

Blog Office Mon Site DVP
Arkham46 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/09/2011, 17h43   #16
Expert Confirmé
 
Avatar de patricktoulon
 
patrick
Inscription : avril 2009
Messages : 1 829
Détails du profil
Informations personnelles :
Nom : patrick
Âge : 42
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations professionnelles :
Secteur : Bâtiment

Informations forums :
Inscription : avril 2009
Messages : 1 829
Points : 2 857
Points : 2 857
Envoyer un message via MSN à patricktoulon
Par défaut re

bonjour

heu!... je comprend pas la!...

au verso de la page 1 il devrais y etre la page 2 enfin je trouve ca plutot
partatique pour la lecture

donc si tu imprim les impair

1,3,5,7,9ect

une fois fini tu remet le paquet de feuille a 'l'envers et

impression de 10,8,6,4,2ect...

tu devrais te retrouver avec la page 2 au verso de la page1


au plaisir

t
__________________
mes fichiers dans les contributions:
mon formulaire mail avec CDO en vba et mon formulaire mail avec CDO en vbs dans un HTA
mon nouveau mouse in out pour les boutons dans un userform
mon addin pour prendre un cliché de selection de cellules

si ton problème est résolu n'oublie pas de pointer :résolu:ça peut servir aux autres
et n'oublie pas de voter
patricktoulon est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 22/09/2011, 19h43   #17
Membre émérite
 
Avatar de Vadorblanc
 
Homme
Inscription : février 2008
Messages : 266
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 56
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 266
Points : 873
Points : 873
Bonjour Arkham46, patricktoulon

Arkham46
Je viens de relancer ton code.
la page 1 de l'onglet 2 s'imprime = juste.

Le code demande d'imprimer en verso, je tourne la feuille et je lance le code.
La page 2 de l'onglet 2 s'imprime = juste
La page 1 de l'onglet 3 s'imprime = juste

Le code demande d'imprimer en verso, je tourne la feuille et je lance le code.
La page 2 de l'onglet 3 s'imprime = juste
La page 1 de l'onglet 4 s'imprime = juste etc... jusqu'au dernier onglet

Chapeau le code, c'est de l'art, je suis admiratif, ça marche.

Bien cordialement à tous les deux et un grand Merci
__________________
! Quand tu es arrivé au sommet de la montagne, continue de grimper !
Vadorblanc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h25.


 
 
 
 
Partenaires

Hébergement Web