OVH Cloud OVH Cloud

Marco d'impression

6 réponses
Avatar
JPH
J’ais des fichiers de + 3000 lignes avec dans la=20
colonne =ABD=BB 150 noms diff=E9rents
Et je doit dispatcher les impression de ces fichiers au=20
150 personnes diff=E9rents
Chaque un pour sa partie
Sachant qu’a chaque fois les noms des personnes est=20
diff=E9rent

Je me sert du filtre mais j’aimerais pouvoir me servir=20
d’un macro

Quelque un pourrait-il me donner la solution

6 réponses

Avatar
xyzdmassi
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à près de
150 personnes ou chaque fichier ne possède qu'un seul nom ?
2. dans les deux cas, la macro demande le répertoire de
travail, ouvre chaque fichier, détermine le correspondant
de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et de
la manière, inconnue à ce jour, de dispatcher les dites
impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers au
150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me servir
d'un macro

Quelque un pourrait-il me donner la solution

.



Avatar
Frédéric Sigonneau
Bonjour,

La macro ci-dessous récupère dans une collection la liste des noms différents en
colonne D puis crée une feuille par nom et y copie les données qui concerne ce
nom.
J'ai supposé une ligne d'entêtes en ligne 1.
Si le tri ne prend pas toutes les données en compte, il faudrait remplacer

ColonneD.CurrentRegion.AdvancedFilter

par

Range("A1:F3000").AdvancedFilter 'par exemple

En fin de procédure, les feuilles de tous les noms sont sélectionnées et, si
leur mise en forme est OK, peuvent être imprimées dans la foulée.

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'========================== Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End(xlUp).Row)
On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range("D1").Value
'crée une feuille par nom et y colle les données qui le concerne
'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name = CollNoms(i)
With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"), _
Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'==========================

-----Message d'origine-----
Bonjour
Chaque fichier comprend des lignes appartenant à près de
150 personnes Diferente a chaque foi d'ou mon souhait de
trouver une macro qui analyse la colonne "D" et qui
imprime

les ligne corespondantes

Merci
-----Message d'origine-----
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à près
de

150 personnes ou chaque fichier ne possède qu'un seul
nom ?

2. dans les deux cas, la macro demande le répertoire de
travail, ouvre chaque fichier, détermine le
correspondant


de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et de
la manière, inconnue à ce jour, de dispatcher les dites
impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers au
150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me servir
d'un macro

Quelque un pourrait-il me donner la solution

.

.


.








Avatar
jph
Merci pour votre réponse
cela convient a ce que je cherchais
juste un petit pblm
ma ligne de titre commence a la ligne 8
et je voudrait que les lignes 1 à 8 se répète sur toute
les impressions
Mon Mail

-----Message d'origine-----
Bonjour,

La macro ci-dessous récupère dans une collection la liste
des noms différents en

colonne D puis crée une feuille par nom et y copie les
données qui concerne ce

nom.
J'ai supposé une ligne d'entêtes en ligne 1.
Si le tri ne prend pas toutes les données en compte, il
faudrait remplacer


ColonneD.CurrentRegion.AdvancedFilter

par

Range("A1:F3000").AdvancedFilter 'par exemple

En fin de procédure, les feuilles de tous les noms sont
sélectionnées et, si

leur mise en forme est OK, peuvent être imprimées dans la
foulée.


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'======================== ===
Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End
(xlUp).Row)

On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range
("D1").Value

'crée une feuille par nom et y colle les données qui le
concerne

'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name =
CollNoms(i)

With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"),
_

Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'======================== ===


-----Message d'origine-----
Bonjour
Chaque fichier comprend des lignes appartenant à près
de



150 personnes Diferente a chaque foi d'ou mon souhait
de



trouver une macro qui analyse la colonne "D" et qui
imprime

les ligne corespondantes

Merci
-----Message d'origine-----
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à
près




de
150 personnes ou chaque fichier ne possède qu'un seul
nom ?

2. dans les deux cas, la macro demande le répertoire
de




travail, ouvre chaque fichier, détermine le
correspondant


de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et
de




la manière, inconnue à ce jour, de dispatcher les
dites




impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers
au





150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me
servir





d'un macro

Quelque un pourrait-il me donner la solution

.

.


.





.







Avatar
Christian M
fichier - mise en page - onglet feuille -
zone lignes à répéter

--
Christian M
-------------------------------
"jph" a écrit dans le message de news:
092e01c39e14$a4ac5dc0$
Merci pour votre réponse
cela convient a ce que je cherchais
juste un petit pblm
ma ligne de titre commence a la ligne 8
et je voudrait que les lignes 1 à 8 se répète sur toute
les impressions
Mon Mail

-----Message d'origine-----
Bonjour,

La macro ci-dessous récupère dans une collection la liste
des noms différents en

colonne D puis crée une feuille par nom et y copie les
données qui concerne ce

nom.
J'ai supposé une ligne d'entêtes en ligne 1.
Si le tri ne prend pas toutes les données en compte, il
faudrait remplacer


ColonneD.CurrentRegion.AdvancedFilter

par

Range("A1:F3000").AdvancedFilter 'par exemple

En fin de procédure, les feuilles de tous les noms sont
sélectionnées et, si

leur mise en forme est OK, peuvent être imprimées dans la
foulée.


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'========================== >Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End
(xlUp).Row)

On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range
("D1").Value

'crée une feuille par nom et y colle les données qui le
concerne

'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name CollNoms(i)
With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"),
_

Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'========================== >

-----Message d'origine-----
Bonjour
Chaque fichier comprend des lignes appartenant à près
de



150 personnes Diferente a chaque foi d'ou mon souhait
de



trouver une macro qui analyse la colonne "D" et qui
imprime

les ligne corespondantes

Merci
-----Message d'origine-----
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à
près




de
150 personnes ou chaque fichier ne possède qu'un seul
nom ?

2. dans les deux cas, la macro demande le répertoire
de




travail, ouvre chaque fichier, détermine le
correspondant


de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et
de




la manière, inconnue à ce jour, de dispatcher les
dites




impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers
au





150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me
servir





d'un macro

Quelque un pourrait-il me donner la solution

.

.


.





.







Avatar
Pascal
Salut,
Va dans mise en Page, puis onglet Feuille et ligne à répéter en Haut.
Normalement cela devrait suffire.

@+
Pascal

"jph" a écrit dans le message de news:
092e01c39e14$a4ac5dc0$
Merci pour votre réponse
cela convient a ce que je cherchais
juste un petit pblm
ma ligne de titre commence a la ligne 8
et je voudrait que les lignes 1 à 8 se répète sur toute
les impressions
Mon Mail

-----Message d'origine-----
Bonjour,

La macro ci-dessous récupère dans une collection la liste
des noms différents en

colonne D puis crée une feuille par nom et y copie les
données qui concerne ce

nom.
J'ai supposé une ligne d'entêtes en ligne 1.
Si le tri ne prend pas toutes les données en compte, il
faudrait remplacer


ColonneD.CurrentRegion.AdvancedFilter

par

Range("A1:F3000").AdvancedFilter 'par exemple

En fin de procédure, les feuilles de tous les noms sont
sélectionnées et, si

leur mise en forme est OK, peuvent être imprimées dans la
foulée.


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'========================== >Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End
(xlUp).Row)

On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range
("D1").Value

'crée une feuille par nom et y colle les données qui le
concerne

'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name CollNoms(i)
With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"),
_

Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'========================== >

-----Message d'origine-----
Bonjour
Chaque fichier comprend des lignes appartenant à près
de



150 personnes Diferente a chaque foi d'ou mon souhait
de



trouver une macro qui analyse la colonne "D" et qui
imprime

les ligne corespondantes

Merci
-----Message d'origine-----
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à
près




de
150 personnes ou chaque fichier ne possède qu'un seul
nom ?

2. dans les deux cas, la macro demande le répertoire
de




travail, ouvre chaque fichier, détermine le
correspondant


de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et
de




la manière, inconnue à ce jour, de dispatcher les
dites




impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers
au





150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me
servir





d'un macro

Quelque un pourrait-il me donner la solution

.

.


.





.







Avatar
Frédéric Sigonneau
Bonsoir,

L'enregistreur de macros est ton ami :)
Il permet de suggérer cette modification (non testée) du code initial :

'========================== Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End(xlUp).Row)
On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range("D1").Value
'crée une feuille par nom et y colle les données qui le concerne
'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name = CollNoms(i)
With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"), _
Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).PrintTitleRows = "$1:$8"
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'==========================
FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Merci pour votre réponse
cela convient a ce que je cherchais
juste un petit pblm
ma ligne de titre commence a la ligne 8
et je voudrait que les lignes 1 à 8 se répète sur toute
les impressions
Mon Mail

-----Message d'origine-----
Bonjour,

La macro ci-dessous récupère dans une collection la liste
des noms différents en

colonne D puis crée une feuille par nom et y copie les
données qui concerne ce

nom.
J'ai supposé une ligne d'entêtes en ligne 1.
Si le tri ne prend pas toutes les données en compte, il
faudrait remplacer


ColonneD.CurrentRegion.AdvancedFilter

par

Range("A1:F3000").AdvancedFilter 'par exemple

En fin de procédure, les feuilles de tous les noms sont
sélectionnées et, si

leur mise en forme est OK, peuvent être imprimées dans la
foulée.


FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !

'========================== > >Sub ImprimeParPersonne()
Dim CollNoms As New Collection, i&
Dim ColonneD As Range, cell As Range
Dim FeuilleSource As Worksheet, FeuilleCible As Worksheet

Set FeuilleSource = Worksheets("Feuil1")
Set ColonneD = _
FeuilleSource.Range("D2:D" & Cells(Rows.Count, 4).End
(xlUp).Row)

On Error Resume Next
'récupère la liste des noms
For Each cell In ColonneD
CollNoms.Add cell.Value, cell.Text
Next cell
On Error GoTo 0

FeuilleSource.Range("IV1").Value = FeuilleSource.Range
("D1").Value

'crée une feuille par nom et y colle les données qui le
concerne

'en filtrant la liste
Application.ScreenUpdating = False
For i = 1 To CollNoms.Count
Sheets.Add(after:=Sheets(Sheets.Count)).Name > CollNoms(i)
With FeuilleSource
.Range("IV2").Value = CollNoms(i)
ColonneD.CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
CriteriaRange:=.Range("IV1:IV2"), _
CopyToRange:=Sheets(CollNoms(i)).Range("A1"),
_

Unique:úlse
End With
Next i
FeuilleSource.Range("IV1:IV2").Clear

'remplacer PrintPreview par PrintOut pour imprimer
For i = 1 To CollNoms.Count
Sheets(CollNoms(i)).Select (False)
Next
ActiveWindow.SelectedSheets.PrintPreview

End Sub
'========================== > >

-----Message d'origine-----
Bonjour
Chaque fichier comprend des lignes appartenant à près
de



150 personnes Diferente a chaque foi d'ou mon souhait
de



trouver une macro qui analyse la colonne "D" et qui
imprime

les ligne corespondantes

Merci
-----Message d'origine-----
Bonjour,
Pour bien comprendre le problème :
1.chaque fichier comprend des lignes appartenant à
près




de
150 personnes ou chaque fichier ne possède qu'un seul
nom ?

2. dans les deux cas, la macro demande le répertoire
de




travail, ouvre chaque fichier, détermine le
correspondant


de la colonne D.
Ensuite tout dépend de la réponse à la question 1. et
de




la manière, inconnue à ce jour, de dispatcher les
dites




impressions.
Mais c'est faisable simplement.

-----Message d'origine-----
J'ais des fichiers de + 3000 lignes avec dans la
colonne «D» 150 noms différents
Et je doit dispatcher les impression de ces fichiers
au





150 personnes différents
Chaque un pour sa partie
Sachant qu'a chaque fois les noms des personnes est
différent

Je me sert du filtre mais j'aimerais pouvoir me
servir





d'un macro

Quelque un pourrait-il me donner la solution

.

.


.





.