Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 16/08/2006, 15h38   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Par défaut Imprimer seulement les pages repondant a un critere

Bijour a tous

Voici ce que je desire faire:
j'ai pleins de feuilles, et je souhaite imprimer seulement celles qui repondent a un critere concernant leur nom (la propriete right est egale a un certain mot).
Treve de bla bla, voici mon code:

Code :
1
2
3
4
5
6
 
For Each Sh In ActiveWorkbook.Worksheets
        If Right(Sh.Name, 2) = " m" Then
            ZoneImpr "A", 1, "S", 10, Sh
        End If
Next Sh
ou Zoneimpr est dans un module:

Code :
1
2
3
4
5
Sub ZoneImpr(ColBeg As String, LiBeg As Integer, ColEnd As String, LiEnd As Integer, _
PrintSheet As Excel.Worksheet)
    PrintZon = Range(Cells(LiBeg, ColBeg), Cells(LiEnd, ColEnd)).Address
    PrintSheet.PageSetup.PrintArea = PrintZon
End Sub

Voila j'aimerais lancer la boite de dialogue imprimer d'Excel pour que l'utilisateur regle ce qu'il veut, et quand il clique sur ok ca n'imprime que les feuilles retenues.

Donc je pense que je ne suis pas loin, il me manque seulement le code pour stocker les feuilles selectionnees dans une variable.

Merci d'avance pour vos precieuses idees
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 17h01   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Citation:
Envoyé par florent149
il me manque seulement le code pour stocker les feuilles selectionnées dans une variable
Tu commences par définir tes zones d'impression pour chaque feuille puis tu crées un tableau de tes noms de feuilles et, dans une boucle, tu imprimes tour à tour les feuilles de ton tableau.
Pour ton tableau, utilises Redim Preserve. Pour connaître sa taille, LaTaille = Ubound (TheTableau). Pour le reste, enregistre une macro, simplifie le code et utilise-le pour imprimer chaque feuille de ton tableau.
Enfin, si tu as un problème, propose-nous queuq'chose
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2006, 18h02   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Je ne suis pas sur que ca reponde exactement a mon attente, mais je me trompe peut etre... En effet si je fait comme tu dis Ousk', est ce que j'aurais ma fenetre d'impression pour toutes les feuilles que j'aurais selectionne?
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 09h38   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Qu'appelles-tu "Fenêtre d'impression" ? L'aperçu avant impression ?
Pour répondre à la question : Tu peux sélectionner toutes les feuilles de calculs que tu veux éditer dans l'ordre que tu souhaites et demander un aperçu de ces feuilles ou les éditer directement (Imprimer : Feuilles sélectionnées)
Code :
1
2
3
4
5
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select
ActiveWindow.SelectedSheets.PrintPreview 'Aperçu
 
'Edition
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Preview:=True, Collate:= True
Quel est ton pb ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 10h23   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Hello Ousk' et les autres

desole c'etait effectivement pas tres clair. Par fenetre d'impression j'entend fenetre que l'on a dans fichier->imprimer, et ceci afin que l'utilisateur puisse choisir l'imprimante, le nombre d'exemplaires...

Donc l'idee de l'array est a developper, mais comment fait on pour ajouter a chaque tour de ma boucle For les feuilles repondant au critere dans le tableau?
Deole je ne sais vraiment pas manipuler les arrays et je ne trouve pas ce que je veux dans l'aide...

Voila et apres j'aurais juste a faire:

Code :
ActiveWindow.SelectedSheets.PrintOut Copies:=1
Merki
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 10h38   #6
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonjour

j'espere que cet exemple pourra t'aider


Code :
1
2
3
4
5
6
Dim Ws As Worksheet
 
For Each Ws In Sheets(Array("Feuil1", "Feuil3", "Feuil7"))
    Ws.Activate
    Application.Dialogs(xlDialogPrint).Show
Next Ws


bonne journée
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 11h01   #7
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Hello Silky,
J'ai compris le pb de florent et ne sais pas comment le résoudre Peut-être as-tu une solution...
Il souhaite sélectionner un groupe de feuilles sélectionnées au fur et à mesure et afficher un aperçu avant impression.
Je mets mon idée (qui n'a jamais fonctionné ) que j'aimerais aussi pouvoir utiliser d'une manière ou d'une autre (!)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Dim i
Dim LeTableau()
    For i = 1 To 3 'simule la sélection de plusieurs feuilles par l'utilisateur
        ReDim Preserve LeTableau(i)
        LeTableau(i) = "Feuil" + CStr(i)
    Next

    For i = 1 To UBound(LeTableau) 'reconstitue la liste des feuilles
        LaListe = LaListe + LeTableau(i) + Chr(34) + ", " + Chr(34)
    Next
    LaListe = Left(LaListe, Len(LaListe) - 4) ' un ", " de trop, on efface
    Sheets(Array(LaListe)).Select 'à la place de la ligne suivante
    'Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select
    ActiveWindow.SelectedSheets.PrintPreview
"On" compte (une fois de plus) sur toi Par avance, merci

Edit
En rouge, ce qui ne fonctionne pas
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 11h19   #8
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Hello Ousk', hello Michel

Merci bien de vous pencher sur mon probleme. Pour Michel, dsl si je n'ai pas ete tres clair mais ce que je veux faire, Ousk l'a presque compris c'est selectionner des feuilles au fur et a mesure, en les rajoutant dans un tableau par exemple, et apres lancer la fenetre que l'on a par fichier->imprimer... et lorsque l'on clique sur imprimer, ca imprime toutes les feuilles que j'aurais selectionne.

Donc il y a juste a rajouter dans le code suivant (dans le If) une maniere d'ajouter la feuille a un tableau:

Code :
1
2
3
4
5
For Each Sh In ActiveWorkbook.Worksheets
        If Right(Sh.Name, 2) = " m" Then
            ZoneImpr "A", 1, "S", 10, Sh
        End If
Next Sh
et ensuite j'aurais ca:

Code :
1
2
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Select
Application.Dialogs(xlDialogPrint).Show

Avec peut etre un bout de code pour dire que ce qui est a imprimer est la selection en cours
Merki
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 12h10   #9
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
C'est bien ce que j'avais compris, seulement
Array(Selection(1), Selection(2), Selection(3)) ne fonctionne pas
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 12h14   #10
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
oui j'ai juste dit "presque compris" car en fait je ne veux pas d'apercu avant impression, je veux juste imprimer, en passant par la fenetre d'impression. Mais bon de toute facon la difficulte n'est pas la!
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 13h55   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Oui, mais tu veux sélectionner tes feuilles... Si tu veux les sélectionner dans la boîte de dialogue Excel, alors... ta question était mal posée Et toc !
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2006, 16h14   #12
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
C'est pas vraiment que je veux les selectionner dans la boite de dialogue d'Excel, je pensais juste que si j'arrivais a selectionner les feuilles a imprimer et a cactiver par le code l'option "imprimer la selection" c'etait bon. Mais en fait je me rends compte que c'est presque une autre solution que de creer un array...
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 15h53   #13
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Bon je vais essayer de reformuler un peu mon probleme car la je sens que la discussion part un peu en cacahuete...

Y a t'il un equivalent au ctrl-click en Vba pour selectionner plusieurs feuilles, ou faut il forcement passer par Worksheets(array... ?

Si il faut passer par l'array, comment dans une boucle "For each Sh in workbook.Sheets" rajouter au fur et a mesure des feuilles dans ce array?

Merci!
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 15h56   #14
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Citation:
Si tu veux les sélectionner dans la boîte de dialogue Excel

Je viens de relire ca Ousk', et ca m'a fait tilt. je me demandais si c'etait possible (par le code) de faire ca: selectionner certaines feuilles DANS la boite de dialogue excel?
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 16h00   #15
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Voilà ! Youpi ! Tu poses précisemment la question que j'ai posée hier à 11h01, si tu lis bien. Pas trop tôt !
Je donnais, hier à 11h01, l'exemple de ce que tu veux réaliser, mais qui, hélas, ne marche pas...
Et je souhaitais en même temps qu'un gentil modérateur ou rédacteur ou crack de VBA comme y'en a tant, veuille bien nous offrir une solution.

Bref, on en est toujours au même point
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 16h39   #16
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Tiens, je soumets ça à ta réfexion, si tu peux l'exploiter...
Code :
1
2
3
4
5
For Each sh In Workbooks("1").Windows(1).SelectedSheets
	If sh.Name = "Feui1" Then
		MsgBox "Feuil1 est sélectionnée"
	End If
Next
Une question : comment les utilisateurs sélectionnent-ils leurs feuilles ?
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 16h48   #17
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Ca sort de l'aide ce bout de code non?
Ben je ne vois pas trop ce que je peux en faire car ca ne me dit pas comment selectionner les feuilles. Car une fois que je les aurais selectionne les feuilles, ca roulera parfaitement!
Quand a ca:

Citation:
Une question : comment les utilisateurs sélectionnent-ils leurs feuilles ?
J'avoue ne pas comprendre car les feuilles sont a selectionner dans le code, selon le nom qu'elles ont. (Si la droite de leur nom est summary, alors on retient la feuille)

Argh...je sens que c'est pas loin!
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 17h11   #18
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ma question n'était pourtant pas hors sujet :
Si ta feuille est sélectionnée par le nom, alors pourquoi ne pas faire une boucle sur la liste des noms de feuilles sélectionnées et lancer l'impression dans la boucle, feuille par feuille ?
Vouais, je vois, je parie que tu veux des N° de pages qui se suivent, en plus Y'en a toujours qui veulent tout
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 17h25   #19
Candidat au titre de Membre du Club
 
Inscription : juillet 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 68
Points : 12
Points : 12
Euh...Je capte plus trop la t'as reussi a m'embrouiller sur mon propre code Ousk'!
C'est un peu ce que je fais non de faire une boucle sur le nom des feuilles? Et puis avec la boucle que j'ai fait j'ai juste a rajouter un printout dans chaque if et ca m'imprimera les feuilles, mais ce n'est pas exactement ce que je veux... je sais je suis exigant!
Non ce qu'il faudrait c'est juste simuler le controle click a chaque tour de boucle non?
florent149 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2006, 17h31   #20
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Pour répondre à ta question, là, tout de suite,

Bon week-end !
ouskel'n'or 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 16h10.


 
 
 
 
Partenaires

Hébergement Web