Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

impression selon une liste de fichiers et d'onglets

16 réponses
Avatar
Gilles72
Bonjour à tous,
ci dessous le code qui pemet d'ouvrir et d'imprimer des fichiers, selon une
liste établie par une autre macro.
j'aimerais changer la ligne de code qui imprime pour qu'elle prenne en
compte le nom des onglets à imprimer dans chaque fichier.
ex:
En colonne A: le chemin complet du fichier (fait par la macro)
En colonne F: FEUIL!1(ajoute sur le tableau)
En colonne F: FEUIL!4
En colonne F: FEUIL!8

Sub imprim() 'ça marche

Application.EnableEvents = False

On Error Resume Next

Dim Cal As Range, c As Range, Ligne As Long

Sheets(liste).Select

Set Cal = Range("A1:A12")

[A1].Select

For Each c In Cal

If c = "" Then Exit For

Workbooks.Open Filename:=c

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Application.DisplayAlerts = False

ActiveWorkbook.Close

Next c

End Sub

si kekun(e) a une suggestion , merci d'avance

Gilles

10 réponses

1 2
Avatar
Daniel.C
Bonjour.
Je n'ai pas compris ce que tu avais en colonne F.
Cordialement.
Daniel
"Gilles72" a écrit dans le message de news:
foemvt$vb9$
Bonjour à tous,
ci dessous le code qui pemet d'ouvrir et d'imprimer des fichiers, selon
une liste établie par une autre macro.
j'aimerais changer la ligne de code qui imprime pour qu'elle prenne en
compte le nom des onglets à imprimer dans chaque fichier.
ex:
En colonne A: le chemin complet du fichier (fait par la macro)
En colonne F: FEUIL!1(ajoute sur le tableau)
En colonne F: FEUIL!4
En colonne F: FEUIL!8

Sub imprim() 'ça marche

Application.EnableEvents = False

On Error Resume Next

Dim Cal As Range, c As Range, Ligne As Long

Sheets(liste).Select

Set Cal = Range("A1:A12")

[A1].Select

For Each c In Cal

If c = "" Then Exit For

Workbooks.Open Filename:=c

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

Application.DisplayAlerts = False

ActiveWorkbook.Close

Next c

End Sub

si kekun(e) a une suggestion , merci d'avance

Gilles




Avatar
Gilles72
Bonjour Daniel
Ah ouais ! je comprends que tu ne comprennes pas!
En fait, sur la liste créee par la précedente macro, j'ai:
En colonne A: le chemin complet des fichiers (fait par la macro)
EX:


S:AffairesLeroy GO30208O30208 dossier CHANTIER
INFORMATIQUE2-Fournisseurs & MagasinO30208 Bon de sortie.xls

S:AffairesLeroy GO30208O30208 dossier CHANTIER INFORMATIQUE4-Suivi
Chantier11c-O30208 Bordereau BSDD.doc

Sur la même ligne dans les autres colonnes, j'indique les noms des onglets
que je désire imprimer
et qui sont différents selon les fichiers
sur certains fichiers j'aurai 1 onglet, et sur d'autres, 2 ou 3 onglets
ex:
En colonne D: liste(ajouté manuellement sur le tableau)
En colonne E: recap
En colonne F: fiche d'envoi



je cherche kekchose du genre: (pour D1 par ex:)
cell.Offset(0, 0).Range)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
c'est pas ça evidemment mais je cherche la syntaxe

je ne sais pas si mon explication est bien claire
merci de toutes façons
GILLES


Avatar
Gilles72
Rebonjour Daniel
j'ai trouvé ça sauf que sur cet essai je devrais imprimer 2 onglets en 1
exemplaire, mais il en sort 2 exmplaires du même onglet (en fait c'est la
feuille qui est deja selectionnée!)
Si tu vois kekchose qui cloche n'hésite pas

Sub imprim() 'ça marche
Application.EnableEvents = False
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
c.Offset(0, 2).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
c.Offset(0, 3).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Application.DisplayAlerts = False
ActiveWorkbook.Close
Next c
End Sub
Merci de ton aide ainsi qu'Isabelle
"Gilles72"


Avatar
Daniel.C
Essaie comme ça :
Note que liste doit être une variable et je ne sais pas où elle est définie
(si liste est le nom de la feuille, il faut mettre sheets("liste")

Sub imprim()
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
Set Cal = Sheets(liste).Range("A1:A12")
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
For i = 4 To 256
If Sheets(liste).Cells(c.Row, i) = "" Then Exit For
Sheets(c.Offset(0, i)).PrintOut Copies:=1, Collate:=True
Next i
ActiveWorkbook.Close False
Next c
End Sub

Daniel
"Gilles72" a écrit dans le message de news:
fofgfd$c0t$
Rebonjour Daniel
j'ai trouvé ça sauf que sur cet essai je devrais imprimer 2 onglets en 1
exemplaire, mais il en sort 2 exmplaires du même onglet (en fait c'est la
feuille qui est deja selectionnée!)
Si tu vois kekchose qui cloche n'hésite pas

Sub imprim() 'ça marche
Application.EnableEvents = False
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
c.Offset(0, 2).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
c.Offset(0, 3).Select
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Application.DisplayAlerts = False
ActiveWorkbook.Close
Next c
End Sub
Merci de ton aide ainsi qu'Isabelle
"Gilles72"






Avatar
Gilles72
bonjour DANIEL,
ci dessous le code rectifié qui ne marche pas complètement
j'ai pas retenu ta proposition de Set Cal = Sheets(liste).Range("A1:A12")
car le code n'ouvre pas le fichier
avec l'ancien ça marche
atre chose:
le code ne dectecte pas les noms d'onglets sur les cellules de LISTE
je pense que ça vient du fait qu'on ouvre le fichier, mais les noms
d'onglets sont définis sur le fichier qui contient la macro
j'ai essayé ce code pour revenir dessus, mais sans succès
si tu vois kekchose...
Merci
gilles

Sub impri2() 'marche pas
'Application.EnableEvents = False
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
'Set Cal = Sheets(liste).Range("A1:A12")
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
Windows("fiche info affaire.xls").Activate
For i = 4 To 256

If Sheets(liste).Cells(c.Row, i) = "" Then Exit For
Windows("c").Activate
' Sheets(c.Offset(0, i)).PrintOut Copies:=1, Collate:=True
MsgBox "Bon bin... !...", 0, "Impression ...."

Next i
ActiveWorkbook.Close False
Next c
End Sub
Avatar
Daniel.C
Bonjour.
J'ai testé cette macro :

Sub impri2()
'Application.EnableEvents = False
liste = "Feuil1" 'à modifier
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
Set Cal = Sheets(liste).Range("A1:A12")
'Sheets(liste).Select
'Set Cal = Range("A1:A12")
'[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
For i = 4 To 256

If ThisWorkbook.Sheets(liste).Cells(c.Row, i) = "" Then Exit For
Sheets(c.Offset(0, i).Value).PrintOut Copies:=1, Collate:=True
MsgBox "Bon bin... !...", 0, "Impression ...."

Next i
ActiveWorkbook.Close False
Next c
End Sub

Daniel
"Gilles72" a écrit dans le message de news:
foh3eo$vga$
bonjour DANIEL,
ci dessous le code rectifié qui ne marche pas complètement
j'ai pas retenu ta proposition de Set Cal = Sheets(liste).Range("A1:A12")
car le code n'ouvre pas le fichier
avec l'ancien ça marche
atre chose:
le code ne dectecte pas les noms d'onglets sur les cellules de LISTE
je pense que ça vient du fait qu'on ouvre le fichier, mais les noms
d'onglets sont définis sur le fichier qui contient la macro
j'ai essayé ce code pour revenir dessus, mais sans succès
si tu vois kekchose...
Merci
gilles

Sub impri2() 'marche pas
'Application.EnableEvents = False
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
'Set Cal = Sheets(liste).Range("A1:A12")
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
Windows("fiche info affaire.xls").Activate
For i = 4 To 256

If Sheets(liste).Cells(c.Row, i) = "" Then Exit For
Windows("c").Activate
' Sheets(c.Offset(0, i)).PrintOut Copies:=1, Collate:=True
MsgBox "Bon bin... !...", 0, "Impression ...."

Next i
ActiveWorkbook.Close False
Next c
End Sub



Avatar
francois.forcet
On 7 fév, 18:37, "Gilles72" wrote:
Bonjour Daniel
Ah  ouais ! je comprends que tu ne comprennes pas!
En fait, sur lalistecréee par la précedente macro, j'ai:>> En colonne A: le chemin complet desfichiers(fait par la macro)

EX:
S:AffairesLeroy GO30208O30208 dossier CHANTIER
INFORMATIQUE2-Fournisseurs & MagasinO30208  Bon de sortie.xls

S:AffairesLeroy GO30208O30208 dossier CHANTIER INFORMATIQUE4-Suivi
Chantier11c-O30208  Bordereau BSDD.doc

Sur la même ligne dans les autres colonnes, j'indique les noms des ongle ts
que je désire imprimer
et qui sont différentsselonlesfichiers
sur certainsfichiersj'aurai 1 onglet, et sur d'autres, 2 ou 3 onglets
ex:

En colonne D:liste(ajouté manuellement sur le tableau)
En colonne E: recap
En colonne F: fiche d'envoi



je cherche kekchose du genre: (pour D1 par ex:)
 cell.Offset(0, 0).Range)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
c'est pas ça evidemment mais je cherche la syntaxe

je ne sais pas si mon explication est bien claire
merci de toutes façons
GILLES


Salut Gilles

Tu dis que sur la même ligne dans les autres colonnes tu indiques les
noms des Onglets à imprimer
Puis tu décrits en Colonne D comme étant la liste : la liste des
Onglets ????

Quel rapport entre la colonne D et les Onglets à imprimer
Si il y en a pas dans quelles colonnes sont ils décrits ????

Merci pour tes précisions



Avatar
Gilles72
OK Daniel et merci
je teste ça tout de suite
Gilles
Avatar
francois.forcet
On 8 fév, 09:43, "Gilles72" wrote:
bonjour DANIEL,
ci dessous le code rectifié qui ne marche pas complètement
j'ai pas retenu ta proposition de  Set Cal = Sheets(liste).Range("A1:A 12")
car le code n'ouvre pas le fichier
avec l'ancien ça marche
atre chose:
le code ne dectecte pas les nomsd'ongletssur les cellules deLISTE
je pense que ça vient du fait qu'on ouvre le fichier, mais les nomsd'ong letssont définis sur le fichier qui contient la macro
j'ai essayé ce code pour revenir  dessus, mais sans succès
si tu vois kekchose...
Merci
gilles

Sub impri2() 'marche pas
'Application.EnableEvents = False
On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
'Set Cal = Sheets(liste).Range("A1:A12")
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
 Windows("fiche info affaire.xls").Activate
For i = 4 To 256

If Sheets(liste).Cells(c.Row, i) = "" Then Exit For
 Windows("c").Activate
'    Sheets(c.Offset(0, i)).PrintOut Copies:=1, Collate:=True
 MsgBox "Bon bin... !...", 0, "Impression...."

Next i
ActiveWorkbook.Close False
Next c
End Sub


Salut Gilles

Ce code fonctionne :

On Error Resume Next
Dim Cal As Range, c As Range, s As Sheets, Ligne As Long
Dim i As Integer
Sheets("liste").Select
Set Cal = Range("A1:A12")
[A1].Select
For Each c In Cal
If c = "" Then Exit For
Workbooks.Open Filename:=c
For i = 4 To 256
If Workbooks("fiche info affaire.xls").Sheets("liste").Cells(c.Row, i)
= "" Then Exit For
Sheets(Workbooks("fiche info
affaire.xls").Sheets("Liste").Cells(c.Row, i).Value).PrintOut
Copies:=1, Collate:=True
MsgBox "Bon bin... !...", 0, "Impression ...."
Next i
ActiveWorkbook.Close False
Next c

Je l'ai testé

Avatar
Gilles72
Daniel
Je ne vois pas d'ou ça vient, mais chez moi ça ne marche pas:
tel qu'il est le code n'ouvre pas le fichier
Il l'ouvre en remettant
Sheets(liste).Select
Set Cal = Range("A1:A12")
[A1].Select
Et là tu touches au but car il parvient à imprimer, mais toujours le même


onglet
Chez toi ça marche?
Gilles


1 2