OVH Cloud OVH Cloud

copie de Feuilles

17 réponses
Avatar
Manu
Bonjour,

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil sont
nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les feuil
Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en mettant
bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2 de A41 à F60
puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire en
utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je souhaiterais
supprimer toutes les feuil sheet

Merci

Manu

7 réponses

1 2
Avatar
Manu
En faite, jacky, ton code fonctionne aussi nickel que celui d'hervé, mais il
me manque deux choses :
1- Il copie egalement des feuils qui ne commencent pas par sheet, en faites
le code ne devrait copier que les plages des feuils commencant par sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci


"Jacky" a écrit dans le message de news:

Bonjour,

Elle est partie à la cafette...;o))))

Corrige comme ceci
'------------
Sub Macro1()
Sheets("synthese").Cells.Clear
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("F65536").End(xlUp).Row
y = Sheets("synthese").Range("A65536").End(xlUp).Row + 1
f.Range("A1:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub
'------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201002/cijcHbFxMN.xls
Pense aussi à déclarer les variables


--
Salutations
JJ


"Manu" a écrit dans le message de news:
%
Bonjour Isabelle,

Il me lance le debongueur sur cette ligne :
y = Sheets("a").Range("A65536").End(xlUp).Row + 1

Manu

"isabelle" a écrit dans le message de news:

bonjour Manu,

Sub Macro1()
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("A65536").End(xlUp).Row
y = Sheets("a").Range("A65536").End(xlUp).Row + 1
f.Range("A2:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub

isabelle

Le 2010-02-10 08:47, Manu a écrit :
Bonjour,

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil
sont
nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les
feuil
Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en
mettant
bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2 de A41 à
F60
puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire
en
utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque
completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je
souhaiterais
supprimer toutes les feuil sheet

Merci

Manu
















Avatar
Jacky
Re...
En faite, jacky, ton code fonctionne aussi nickel


C'est celui d'isablelle
'-------------
Sub Macro1()
Sheets("synthese").Cells.Clear
For Each f In Sheets
If f.Name <> "synthese" And UCase(Left(f.Name, 5)) = "SHEET" Then
x = f.Range("F65536").End(xlUp).Row
y = Sheets("synthese").Range("A65536").End(xlUp).Row + 1
f.Range("A1:F" & x).Copy Sheets("synthese").Range("A" & y)
Application.DisplayAlerts = False
f.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
'-------------


--
Salutations
JJ


"Manu" a écrit dans le message de news: O0MQ$
En faite, jacky, ton code fonctionne aussi nickel que celui d'hervé, mais il me manque deux choses :
1- Il copie egalement des feuils qui ne commencent pas par sheet, en faites le code ne devrait copier que
les plages des feuils commencant par sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci


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

Elle est partie à la cafette...;o))))

Corrige comme ceci
'------------
Sub Macro1()
Sheets("synthese").Cells.Clear
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("F65536").End(xlUp).Row
y = Sheets("synthese").Range("A65536").End(xlUp).Row + 1
f.Range("A1:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub
'------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201002/cijcHbFxMN.xls
Pense aussi à déclarer les variables


--
Salutations
JJ


"Manu" a écrit dans le message de news:
%
Bonjour Isabelle,

Il me lance le debongueur sur cette ligne :
y = Sheets("a").Range("A65536").End(xlUp).Row + 1

Manu

"isabelle" a écrit dans le message de news:
bonjour Manu,

Sub Macro1()
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("A65536").End(xlUp).Row
y = Sheets("a").Range("A65536").End(xlUp).Row + 1
f.Range("A2:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub

isabelle

Le 2010-02-10 08:47, Manu a écrit :
Bonjour,

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil sont
nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les feuil
Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en mettant
bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2 de A41 à F60
puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire en
utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je souhaiterais
supprimer toutes les feuil sheet

Merci

Manu




















Avatar
Manu
J'ai trouvé comment supprimer toutes les feuil sheet :

Sub supprFeuil()
Dim i!
Application.DisplayAlerts = False
For i = Worksheets.Count To 1 Step -1
If Left(Sheets(i).Name, 5) = "Sheet" Then
Sheets(i).Delete
End If
Next
Application.DisplayAlerts = True
End Sub

Je n'y connais rien en VBA, mais j'ai trouvé cela sur un ancien fil, il ne
reste qu'un soucis

Manu

"Manu" a écrit dans le message de news:


Ouah, ca fonctionne super bien Hervé, et en plus ultra rapide, mais tout
de meme, deux petits soucis :

1- Il copie egalement des feuils qui ne commencent pas par sheet, en
faites le code ne devrait copier que les plages des feuils commencant par
sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci de votre aide

Mais comment je fais
"Hervé" a écrit dans le message de news:

Bonjour Manu,

Teste ceci. Les plages à récupérer se trouvent en colonnes A à F :

Sub Recup()

Dim FeSynthese As Worksheet
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range

Set FeSynthese = Worksheets("synthese")

For Each Fe In Worksheets

If Fe.Name <> FeSynthese.Name Then

'plage à copier
With Fe
Set Plage = .Range(.[A1], .[F65536].End(xlUp))
End With

'recup de la dernière cellule utilisée
Set Cel = FeSynthese.[A65536].End(xlUp)

'si la feuille "synthese" est vide commence
'en A1, sinon, sous la plage
'précédemment collée
If Cel.Row <> 1 Then
Set Cel = Cel.Offset(1, 0)
End If

Plage.Copy Cel

End If
Next

Set Cel = Nothing
Set Plage = Nothing
Set FeSynthese = Nothing
Set Fe = Nothing

End Sub

Hervé.


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

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil
sont nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les
feuil Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en
mettant bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2
de A41 à F60 puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire
en utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque
completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je
souhaiterais supprimer toutes les feuil sheet

Merci

Manu











Avatar
Manu
C'est ultra parfait,

Merci à vous tous, Isa, Jacky, Hervé, Philippe, FFO

C'est exactement ce que je souhaitais.

Manu

"Jacky" a écrit dans le message de news:

Re...
En faite, jacky, ton code fonctionne aussi nickel


C'est celui d'isablelle
'-------------
Sub Macro1()
Sheets("synthese").Cells.Clear
For Each f In Sheets
If f.Name <> "synthese" And UCase(Left(f.Name, 5)) = "SHEET" Then
x = f.Range("F65536").End(xlUp).Row
y = Sheets("synthese").Range("A65536").End(xlUp).Row + 1
f.Range("A1:F" & x).Copy Sheets("synthese").Range("A" & y)
Application.DisplayAlerts = False
f.Delete
End If
Next
Application.DisplayAlerts = True
End Sub
'-------------


--
Salutations
JJ


"Manu" a écrit dans le message de news:
O0MQ$
En faite, jacky, ton code fonctionne aussi nickel que celui d'hervé, mais
il me manque deux choses :
1- Il copie egalement des feuils qui ne commencent pas par sheet, en
faites le code ne devrait copier que les plages des feuils commencant par
sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci


"Jacky" a écrit dans le message de news:

Bonjour,

Elle est partie à la cafette...;o))))

Corrige comme ceci
'------------
Sub Macro1()
Sheets("synthese").Cells.Clear
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("F65536").End(xlUp).Row
y = Sheets("synthese").Range("A65536").End(xlUp).Row + 1
f.Range("A1:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub
'------------
Voir ici
http://www.cijoint.fr/cjlink.php?file=cj201002/cijcHbFxMN.xls
Pense aussi à déclarer les variables


--
Salutations
JJ


"Manu" a écrit dans le message de news:
%
Bonjour Isabelle,

Il me lance le debongueur sur cette ligne :
y = Sheets("a").Range("A65536").End(xlUp).Row + 1

Manu

"isabelle" a écrit dans le message de news:

bonjour Manu,

Sub Macro1()
For Each f In Sheets
If f.Name <> "synthese" Then
x = f.Range("A65536").End(xlUp).Row
y = Sheets("a").Range("A65536").End(xlUp).Row + 1
f.Range("A2:F" & x).Copy Sheets("synthese").Range("A" & y)
End If
Next
End Sub

isabelle

Le 2010-02-10 08:47, Manu a écrit :
Bonjour,

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des
feuil sont
nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les
feuil
Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en
mettant
bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2 de A41
à F60
puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le
faire en
utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller
de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque
completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je
souhaiterais
supprimer toutes les feuil sheet

Merci

Manu
























Avatar
Hervé
Bonsoir Manu,

Alors voici le code retouché avec contrôle du nom des feuille (SheetX) et
supression après récupération des valeurs :

Sub Recup()

Dim FeSynthese As Worksheet
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range

Set FeSynthese = Worksheets("synthese")

'évite la boite de message
Application.DisplayAlerts = False

For Each Fe In Worksheets

If Fe.Name <> FeSynthese.Name And _
Left(Fe.Name, 5) = "Sheet" Then

'plage à copier
With Fe
Set Plage = .Range(.[A1], .[F65536].End(xlUp))
End With

'recup de la dernière cellule utilisée
Set Cel = FeSynthese.[A65536].End(xlUp)

'si la feuille "synthese" est vide commence
'en A1, sinon, sous la plage
'précédemment collée
If Cel.Row <> 1 Then
Set Cel = Cel.Offset(1, 0)
End If

'copy de la plage
Plage.Copy Cel

'suppression de la feuille
Fe.Delete

End If
Next

'réactive les alertes
Application.DisplayAlerts = True

Set Cel = Nothing
Set Plage = Nothing
Set FeSynthese = Nothing
Set Fe = Nothing

End Sub

Hervé.


"Manu" a écrit dans le message de
news:

Ouah, ca fonctionne super bien Hervé, et en plus ultra rapide, mais tout
de meme, deux petits soucis :

1- Il copie egalement des feuils qui ne commencent pas par sheet, en
faites le code ne devrait copier que les plages des feuils commencant par
sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci de votre aide

Mais comment je fais
"Hervé" a écrit dans le message de news:

Bonjour Manu,

Teste ceci. Les plages à récupérer se trouvent en colonnes A à F :

Sub Recup()

Dim FeSynthese As Worksheet
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range

Set FeSynthese = Worksheets("synthese")

For Each Fe In Worksheets

If Fe.Name <> FeSynthese.Name Then

'plage à copier
With Fe
Set Plage = .Range(.[A1], .[F65536].End(xlUp))
End With

'recup de la dernière cellule utilisée
Set Cel = FeSynthese.[A65536].End(xlUp)

'si la feuille "synthese" est vide commence
'en A1, sinon, sous la plage
'précédemment collée
If Cel.Row <> 1 Then
Set Cel = Cel.Offset(1, 0)
End If

Plage.Copy Cel

End If
Next

Set Cel = Nothing
Set Plage = Nothing
Set FeSynthese = Nothing
Set Fe = Nothing

End Sub

Hervé.


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

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil
sont nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les
feuil Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en
mettant bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2
de A41 à F60 puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire
en utilisant les raccourcis clavier mais non seulement ce sera long mais
surtout le nombre de feuil Sheet n'est jamais le meme, ca peut aller de
Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque
completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je
souhaiterais supprimer toutes les feuil sheet

Merci

Manu











Avatar
FFO
Rebonjour à toi

Je pense qu'à la recopie de mon code ces lignes qui doivent être sur une
seule et même ligne dans l'éditeur se sont retrouvées séparées sur plusieurs
lignes d'où le Bug :

Sheets(i).Range("A1").SpecialCells(xlCellTypeLastCell).Row).Copy
Sheets("synthese").Range("A" &
Sheets("synthese").Range("A1").SpecialCells(xlCellTypeLastCell).Row)


Ces 3 lignes doivent être mises bout à bout sur une seule ligne

Refais des essais et dis moi !!!!!
Avatar
Manu
Merci Hervé, c'est nickel avec toutes vos solutions, j'arrive à faire un
truc vraiment bien

Merci encore

"Hervé" a écrit dans le message de news:

Bonsoir Manu,

Alors voici le code retouché avec contrôle du nom des feuille (SheetX) et
supression après récupération des valeurs :

Sub Recup()

Dim FeSynthese As Worksheet
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range

Set FeSynthese = Worksheets("synthese")

'évite la boite de message
Application.DisplayAlerts = False

For Each Fe In Worksheets

If Fe.Name <> FeSynthese.Name And _
Left(Fe.Name, 5) = "Sheet" Then

'plage à copier
With Fe
Set Plage = .Range(.[A1], .[F65536].End(xlUp))
End With

'recup de la dernière cellule utilisée
Set Cel = FeSynthese.[A65536].End(xlUp)

'si la feuille "synthese" est vide commence
'en A1, sinon, sous la plage
'précédemment collée
If Cel.Row <> 1 Then
Set Cel = Cel.Offset(1, 0)
End If

'copy de la plage
Plage.Copy Cel

'suppression de la feuille
Fe.Delete

End If
Next

'réactive les alertes
Application.DisplayAlerts = True

Set Cel = Nothing
Set Plage = Nothing
Set FeSynthese = Nothing
Set Fe = Nothing

End Sub

Hervé.


"Manu" a écrit dans le message de
news:

Ouah, ca fonctionne super bien Hervé, et en plus ultra rapide, mais tout
de meme, deux petits soucis :

1- Il copie egalement des feuils qui ne commencent pas par sheet, en
faites le code ne devrait copier que les plages des feuils commencant par
sheet
2- Je souhaite ensuite supprimer toutes les feuil commencant par sheet

Merci de votre aide

Mais comment je fais
"Hervé" a écrit dans le message de news:

Bonjour Manu,

Teste ceci. Les plages à récupérer se trouvent en colonnes A à F :

Sub Recup()

Dim FeSynthese As Worksheet
Dim Fe As Worksheet
Dim Plage As Range
Dim Cel As Range

Set FeSynthese = Worksheets("synthese")

For Each Fe In Worksheets

If Fe.Name <> FeSynthese.Name Then

'plage à copier
With Fe
Set Plage = .Range(.[A1], .[F65536].End(xlUp))
End With

'recup de la dernière cellule utilisée
Set Cel = FeSynthese.[A65536].End(xlUp)

'si la feuille "synthese" est vide commence
'en A1, sinon, sous la plage
'précédemment collée
If Cel.Row <> 1 Then
Set Cel = Cel.Offset(1, 0)
End If

Plage.Copy Cel

End If
Next

Set Cel = Nothing
Set Plage = Nothing
Set FeSynthese = Nothing
Set Fe = Nothing

End Sub

Hervé.


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

J'ai un classeur qui peut comporter entre 20 et 80 feuil. 80% des feuil
sont nommées Sheet1 ; Sheet2 ; Sheet3 ....etc
Chaque Feuil Sheet est remplis en colonne de A à F et en ligne c'est
variable

Jai une feuil qui se nomme synthese et je souhaiterais que toutes les
feuil Sheet se collent dans cette feuil synthese et dans l'ordre.

Exemple :
Si Sheet1 est remplie de A1 à F40
Si Sheet2 est remplie de A1 à F20
Si Sheet3 est remplie de A1 à F30
.......
Alors je souhaiterais que ma feuil synthese soit remplie A1 à F90 en
mettant bien dans l'ordre le contenu de Sheet1 de A1 à F40 puis Sheet2
de A41 à F60 puis Sheet3 de A61 à F90 ....

J'espere avoir été clair,

Ne connaissant pas le VBA, je pourrais me faire enregistrer et le faire
en utilisant les raccourcis clavier mais non seulement ce sera long
mais surtout le nombre de feuil Sheet n'est jamais le meme, ca peut
aller de Sheet1 à Sheet 21 comme de Sheet1 à Sheet 70. Et là, je bloque
completement

Et une fois que tout sera rappatrié dans ma feuil synthese, je
souhaiterais supprimer toutes les feuil sheet

Merci

Manu














1 2