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

copier plusieurs feuille

13 réponses
Avatar
Greg
Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en une
seule.

La question est toute simple : comment à l'aide d'une macro je peux copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)

10 réponses

1 2
Avatar
Daniel.C
Bonsoir.
Est-ce que la consolidation (Données, Consolider pour les versions
d'avant XL2007, ou Données, Outils de données, Consolider pour cette
dernière) ne te convient pas ?
Cordialement.
Daniel

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc être
différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en une
seule.

La question est toute simple : comment à l'aide d'une macro je peux copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données copier
dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)


Avatar
Greg
Je ne pense pas.
Je veux tout simplement copier de manière automatique les 5 feuilles les
unes après les autres dans une autre (et unique) feuille.
merci

"Daniel.C" a écrit dans le message de
news:
Bonsoir.
Est-ce que la consolidation (Données, Consolider pour les versions d'avant
XL2007, ou Données, Outils de données, Consolider pour cette dernière) ne
te convient pas ?
Cordialement.
Daniel

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)







Avatar
michdenis
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en une
seule.

La question est toute simple : comment à l'aide d'une macro je peux copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)
Avatar
Greg
Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles + 1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)



Avatar
michdenis
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles + 1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)



Avatar
Greg
le point A : fonctionne parfaitement.

le point B : effectivement sur ton fichier ça marche nickel, mais pas pour
le mien (la feuille 1 ne se copie pas, ni l'entête) !!!!! je comprends pas
c'est quasiment le même

voici mon exemple :

http://cjoint.com/?ltuXjBcNKX

merci


"michdenis" a écrit dans le message de
news:
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles + 1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)






Avatar
michdenis
Il manque un "point "." devant le Cells dans la procédure !

If a = 1 Then
.Range("A1", .Cells(DerLig, DerCol)).Copy _



"Greg" a écrit dans le message de groupe de discussion :
u$
le point A : fonctionne parfaitement.

le point B : effectivement sur ton fichier ça marche nickel, mais pas pour
le mien (la feuille 1 ne se copie pas, ni l'entête) !!!!! je comprends pas
c'est quasiment le même

voici mon exemple :

http://cjoint.com/?ltuXjBcNKX

merci


"michdenis" a écrit dans le message de
news:
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles + 1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule (jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)






Avatar
Greg
MAGNIFIQUE ça fonctionne, merci michdenis

dernière question (la cerise sur le gâteau comme on dit) :

Plutôt que de supprimer et d'ajouter la feuille "recap" est-il possible
d'avoir la même procédure mais avec une feuille RECAP existante
on pourrait par exemple supprimer l'ensemble des lignes (ou colonnes) avant
execution de la procédure. qu'en penses-tu?
Merci encore
Greg



"michdenis" a écrit dans le message de
news:
Il manque un "point "." devant le Cells dans la procédure !

If a = 1 Then
.Range("A1", .Cells(DerLig, DerCol)).Copy _



"Greg" a écrit dans le message de groupe de discussion :
u$
le point A : fonctionne parfaitement.

le point B : effectivement sur ton fichier ça marche nickel, mais pas pour
le mien (la feuille 1 ne se copie pas, ni l'entête) !!!!! je comprends pas
c'est quasiment le même

voici mon exemple :

http://cjoint.com/?ltuXjBcNKX

merci


"michdenis" a écrit dans le message de
news:
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles +
1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule
(jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si
possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)









Avatar
michdenis
Si la feuille "Recap" existe, tu peux remplacer ceci :

Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True
Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

Par :
Set ShDest = Worksheets("Recap")
ShDest.Cells.Clear

Tout le contenu et le format des cellules seront vidés.




"Greg" a écrit dans le message de groupe de discussion :

MAGNIFIQUE ça fonctionne, merci michdenis

dernière question (la cerise sur le gâteau comme on dit) :

Plutôt que de supprimer et d'ajouter la feuille "recap" est-il possible
d'avoir la même procédure mais avec une feuille RECAP existante
on pourrait par exemple supprimer l'ensemble des lignes (ou colonnes) avant
execution de la procédure. qu'en penses-tu?
Merci encore
Greg



"michdenis" a écrit dans le message de
news:
Il manque un "point "." devant le Cells dans la procédure !

If a = 1 Then
.Range("A1", .Cells(DerLig, DerCol)).Copy _



"Greg" a écrit dans le message de groupe de discussion :
u$
le point A : fonctionne parfaitement.

le point B : effectivement sur ton fichier ça marche nickel, mais pas pour
le mien (la feuille 1 ne se copie pas, ni l'entête) !!!!! je comprends pas
c'est quasiment le même

voici mon exemple :

http://cjoint.com/?ltuXjBcNKX

merci


"michdenis" a écrit dans le message de
news:
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles +
1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule
(jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si
possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)









Avatar
Greg
super. merci.

"michdenis" a écrit dans le message de
news:%
Si la feuille "Recap" existe, tu peux remplacer ceci :

Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True
Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

Par :
Set ShDest = Worksheets("Recap")
ShDest.Cells.Clear

Tout le contenu et le format des cellules seront vidés.




"Greg" a écrit dans le message de groupe de discussion :

MAGNIFIQUE ça fonctionne, merci michdenis

dernière question (la cerise sur le gâteau comme on dit) :

Plutôt que de supprimer et d'ajouter la feuille "recap" est-il possible
d'avoir la même procédure mais avec une feuille RECAP existante
on pourrait par exemple supprimer l'ensemble des lignes (ou colonnes)
avant
execution de la procédure. qu'en penses-tu?
Merci encore
Greg



"michdenis" a écrit dans le message de
news:
Il manque un "point "." devant le Cells dans la procédure !

If a = 1 Then
.Range("A1", .Cells(DerLig, DerCol)).Copy _



"Greg" a écrit dans le message de groupe de discussion :
u$
le point A : fonctionne parfaitement.

le point B : effectivement sur ton fichier ça marche nickel, mais pas
pour
le mien (la feuille 1 ne se copie pas, ni l'entête) !!!!! je comprends
pas
c'est quasiment le même

voici mon exemple :

http://cjoint.com/?ltuXjBcNKX

merci


"michdenis" a écrit dans le message de
news:
A) Si tu ne veux pas copier les formules en bas de tes feuilles
de données qui ont des formules qui renvoient "" , change dans
la procédure le paramètre "xlformulas" pour "xlvalues" dans la
méthode "Find" à 2 endroits.

B ) pour ce qui est du nombre de feuilles copiées, je n'ai aucun
problème avec ça.
http://cjoint.com/?ltuMUxEEAN



"Greg" a écrit dans le message de groupe de discussion :
#

Bonjour,
Je viens d'essayer la macro sur une feuille test comportant 3 feuilles +
1
recap (le fichier original est au bureau !!!)
Il me copie que la feuille2 et 3 mais pas la 1 !!!
Les lignes vides comportants des formules sont également copier.
pour ceux qui le souhaite, je peux envoyer ce fichier test.
Merci bcp




"michdenis" a écrit dans le message de
news:
Bonjour Greg,

'---------------------------------------------
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Recap").Delete
Application.DisplayAlerts = True

Set ShDest = Worksheets.Add
ShDest.Name = "Recap"

For Each Sh In Worksheets

If LCase(Sh.Name) <> LCase("recap") Then
a = a + 1
With Sh
With .Cells
DerLig = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious).Row
DerCol = .Find(What:="*", _
LookIn:=xlFormulas, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlPrevious).Column
End With
If a = 1 Then
.Range("A1", Cells(DerLig, DerCol)).Copy _
ShDest.Range("A1")
Else
Adr = ShDest.Range("A" _
& ShDest.Range("A65536").End(xlUp)(2).Row).Address
.Range("A2", .Cells(DerLig, DerCol)).Copy _
ShDest.Range(Adr)
End If
End With
End If
Next
End Sub
'---------------------------------------------



"Greg" a écrit dans le message de groupe de discussion :

Bonsoir,

Voilà j'ai un classeur excel avec 5 feuilles (une feuille par
collaborateur).
Les feuilles sont identiques et contruites de la même manière : en-tête
sur
A1:G1

Chaque personne complète son propre onglet. Le nombre de ligne peut
donc
être différent d'une feuille à l'autre.

Pour effectuer des stats j'ai besoin de compiler toutes les feuilles en
une
seule.

La question est toute simple : comment à l'aide d'une macro je peux
copier
chaque feuille dans un onglet RECAP

Sachant que dans la colonne A il une formule dans chaque cellule
(jusqu'à
A400), il se peut donc que la macro recopie les lignes vides. si
possible
j'aimerais éviter.

Idéalement, à chaque execution la macro écrasera les anciennes données
copier dans l'onglet RECAP

Merci pour votre aide

(j'espère avoir été clair)












1 2