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)

3 réponses

1 2
Avatar
Greg
Bonjour,

Désolé de créer un nouveau post mais je voulais être visible !!!

La procédure indiquée précédement fonctionne à merveille.

Cependant, j'ai crée 2 onglets supplémentaires "STAT" et "SERVICES"

Quand j'applique la procédure il me copie ces 2 nouvelles feuilles !!!

Le début de la procédure commence par :

If LCase(Sh.Name) <> LCase("recap") Then

est-il possible d'indiquer : <> LCase("recap") LCase("stat")
LCase("services")

encore merci pour votre aide.

***************************
Rappel de la procédure totale
***************************
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Set ShDest = Worksheets("Recap")
ShDest.Cells.Clear


For Each Sh In Worksheets

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






"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)












Avatar
michdenis
Comme ceci :

If LCase(Sh.Name) <> LCase("recap") And _
Sh.Name <> LCase("stat") And _
Sh.Name <> LCase("stat") Then




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

Bonjour,

Désolé de créer un nouveau post mais je voulais être visible !!!

La procédure indiquée précédement fonctionne à merveille.

Cependant, j'ai crée 2 onglets supplémentaires "STAT" et "SERVICES"

Quand j'applique la procédure il me copie ces 2 nouvelles feuilles !!!

Le début de la procédure commence par :

If LCase(Sh.Name) <> LCase("recap") Then

est-il possible d'indiquer : <> LCase("recap") LCase("stat")
LCase("services")

encore merci pour votre aide.

***************************
Rappel de la procédure totale
***************************
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Set ShDest = Worksheets("Recap")
ShDest.Cells.Clear


For Each Sh In Worksheets

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






"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)












Avatar
Greg
Super.
Merci beaucoup.
A+

"michdenis" a écrit dans le message de
news:%
Comme ceci :

If LCase(Sh.Name) <> LCase("recap") And _
Sh.Name <> LCase("stat") And _
Sh.Name <> LCase("stat") Then




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

Bonjour,

Désolé de créer un nouveau post mais je voulais être visible !!!

La procédure indiquée précédement fonctionne à merveille.

Cependant, j'ai crée 2 onglets supplémentaires "STAT" et "SERVICES"

Quand j'applique la procédure il me copie ces 2 nouvelles feuilles !!!

Le début de la procédure commence par :

If LCase(Sh.Name) <> LCase("recap") Then

est-il possible d'indiquer : <> LCase("recap") LCase("stat")
LCase("services")

encore merci pour votre aide.

***************************
Rappel de la procédure totale
***************************
Sub test()
Dim ShDest As Worksheet, Sh As Worksheet
Dim DerLig As Long, DerCol As Integer
Dim Adr As String

On Error Resume Next
Set ShDest = Worksheets("Recap")
ShDest.Cells.Clear


For Each Sh In Worksheets

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






"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