OVH Cloud OVH Cloud

help Macro de consolidation

5 réponses
Avatar
Gilles
Bonjour à tous

Malgré l'aide précieuse de Michel, j'ai un problème...

j'ai une macro qui doit reprendre les données de plusieures
onglets(dans un même document) et la coller dans une feuille qui se
nomme "TOTAL-PREST", alors si j'avais qu'un onglet ok ca marche !, mais
si je prend 2 onglets (et je dois en prendre 8),elle écrase les données
antérieures.

Comment modifier la macro, pour que dans la feuille "TOTAL_PREST", elle
rajoute les données à la suite des précédentes( désolé en macro, je
débute)

Un grand merci à vous tous !!!!!!

Sub pour_Mike()

Sheets("Feuil1").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil2").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil5").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil6").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil7").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil8").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste


End Sub

Mike

--

Mike

"on se lasse de tout sauf d'apprendre !"

5 réponses

Avatar
michdenis
Bonjour Gilles,

Tu peux remplacer ta macro par ceci :

Si la feuille de destination est vide, les données débuteront en B1, laissant la ligne 1 pour les étiquettes.

Dans la procédure, défini le nom de toutes tes feuilles dans l'ordre avec laquelle tu voudrais que se copient les données en
utilisant la ligne de code suivante :

Tblo = Array("Feuil1", "Feuil2") 'Les feuilles à copier


'---------------------------
Sub CopierDesFeuilles()

Dim Sh As Worksheet, Tblo(), Ligne as Long
Tblo = Array("Feuil1", "Feuil2")
Set Sh = Worksheets("TOTAL_PREST")

For Each elt In Tblo
Ligne = Sh.Range("A65536").End(xlUp)(2).Row
Worksheets(elt).Range("B20:P100").Copy Sh.Range("A" & Ligne)
Next

Set Sh = Nothing

End Sub
'---------------------------


Salutations!


"Gilles" a écrit dans le message de news:
Bonjour à tous

Malgré l'aide précieuse de Michel, j'ai un problème...

j'ai une macro qui doit reprendre les données de plusieures
onglets(dans un même document) et la coller dans une feuille qui se
nomme "TOTAL-PREST", alors si j'avais qu'un onglet ok ca marche !, mais
si je prend 2 onglets (et je dois en prendre 8),elle écrase les données
antérieures.

Comment modifier la macro, pour que dans la feuille "TOTAL_PREST", elle
rajoute les données à la suite des précédentes( désolé en macro, je
débute)

Un grand merci à vous tous !!!!!!

Sub pour_Mike()

Sheets("Feuil1").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil2").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil5").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil6").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil7").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil8").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste


End Sub

Mike

--

Mike

"on se lasse de tout sauf d'apprendre !"
Avatar
Philippe.R
Bonsoir Gilles,
Y a t il toujours des données en colonne B de toutes tes feuilles ?
Il est même impératif, pour que la macro donne le résultat souhaité, que dans la colonne B figure une
valeur pour la ligne 100 de chaque feuille à copier.
--
Amicales Salutations

Retirer A_S_ pour répondre.
XL97 / XL2002
Pour suivre le forum :
news://msnews.microsoft.com/microsoft.public.fr.excel
(Voulez-vous vous abonner ? -> Oui)

"Gilles" a écrit dans le message de
news:
Bonjour à tous

Malgré l'aide précieuse de Michel, j'ai un problème...

j'ai une macro qui doit reprendre les données de plusieures
onglets(dans un même document) et la coller dans une feuille qui se
nomme "TOTAL-PREST", alors si j'avais qu'un onglet ok ca marche !, mais
si je prend 2 onglets (et je dois en prendre 8),elle écrase les données
antérieures.

Comment modifier la macro, pour que dans la feuille "TOTAL_PREST", elle
rajoute les données à la suite des précédentes( désolé en macro, je
débute)

Un grand merci à vous tous !!!!!!

Sub pour_Mike()

Sheets("Feuil1").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil2").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil5").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil6").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil7").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil8").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste


End Sub

Mike

--

Mike

"on se lasse de tout sauf d'apprendre !"



Avatar
Chris MICHEL
Hum! avant toute chose, mon prénom c'est Christophe ou
Chris. MICHEL, c'est mon nom de famille.

C'est Philippe qui a raison: le pb doit se situer dans la
colonne B: la macro copie les données dans les feuilles,
sélectionne ton onglet TOTAL_PREST, sélectionne la ligne
suivant la dernière ligne non vide de B et colle les
données là.

Pour solutionner cela, je te propose la macro suivante:

Sub pour_mike2()

Dim i As Integer

For i = 1 To Sheets.Count
If Sheets(i).Name <> "TOTAL_PREST" Then
If Sheets(i).Range("B100") = "" _
Then Sheets(i).Range("B100") = " "
Sheets(i).Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste
End If
Next
End Sub

le petit défaut de cette macro, c'est qu'il va coller les
80 lignes à chaque fois, même s'il y a des gros vides. Le
plus simple, c'est qu'à la fin, tu fasses un tri pour
metre les lignes vides en bas de page et que tu les
supprimes toutes (ou que tu utilises un filtre
automatique).

Voila,

Chris.
-----Message d'origine-----
Bonjour à tous

Malgré l'aide précieuse de Michel, j'ai un problème...

j'ai une macro qui doit reprendre les données de
plusieures

onglets(dans un même document) et la coller dans une
feuille qui se

nomme "TOTAL-PREST", alors si j'avais qu'un onglet ok ca
marche !, mais

si je prend 2 onglets (et je dois en prendre 8),elle
écrase les données

antérieures.

Comment modifier la macro, pour que dans la
feuille "TOTAL_PREST", elle

rajoute les données à la suite des précédentes( désolé en
macro, je

débute)

Un grand merci à vous tous !!!!!!

Sub pour_Mike()

Sheets("Feuil1").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil2").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil5").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil6").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil7").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil8").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste


End Sub

Mike

--

Mike

"on se lasse de tout sauf d'apprendre !"

.



Avatar
mike
Hello,

Désolé pour ton Prénom !

Entre temps, j'ai un ami qui m'a apporter certaine modifications, du
fait de l'aide que j'ai eu sur ce forum, je vous en fait partager...:)

en fait le regroupement ce fait d'abord sous forme de tableau, puis
colle mes cellules

encore une fois un grand merci à Chris et aux autres

Mike

Sub copierdesFeuilles()

Dim tabFeuilles(), inLimiteBas As Long, celluleSourceDepart As Integer,
celluleSourceFin As Long
Dim celluleDestcol As Integer, celluleDestLigne As Integer,
feuilleDestination As String, prompt As String

' Définition des variables
feuilleDestination = "TOTAL_PREST_2" ' Feuille de destination
celluleDestcol = 1 ' Cellule de départ dans la feuille de destination
celluleDestLigne = 15
inLimiteBas = 65536 'Limite du nombre de ligne à scanner
celluleSourceDepart = 16 'Première cellule de la plage à scanner
celluleSourceFin = celluleSourceDepart ' Limite du tableau à copier
tabFeuilles = Array("KRATTINGER", "JUNOD", "SAUTHIER", "PILLET",
"HERMAN", "STOETZER", "VODOZ", "HECV_SANTE1", "HECV_SANTE2", "EPHY_GE")
' Feuilles qu'il faut copier


For Each feuille In tabFeuilles
Worksheets(feuille).Activate ' Activation de la feuille

' Définit la limite du tableau vers le bas
i = celluleSourceDepart
While i < inLimiteBas
If Worksheets(feuille).Range("A" & i).Value = "" Or
IsNull(Worksheets(feuille).Range("A" & i)) Then
celluleSourceFin = i - 1
i = inLimiteBas
End If
i = i + 1
Wend

' Selection des celules de A à K qui contiennent qq chose
Range("A" & celluleSourceDepart & ":K" & celluleSourceFin).Select
nbCol = Selection.Columns.Count
nbLin = Selection.Rows.Count
'Remplissage de la feuille de destination avec la séléction
For i = 1 To nbLin
For j = 1 To nbCol
Worksheets(feuilleDestination).Cells(celluleDestLigne,
celluleDestcol - 1 + j).Value = Selection.Cells(i, j).Value
Next j
celluleDestLigne = celluleDestLigne + 1
Next i
Next
Worksheets(feuilleDestination).Activate
prompt = MsgBox("Opération terminée")
End Sub




Le 13.02.2004, Chris MICHEL a supposé :
Hum! avant toute chose, mon prénom c'est Christophe ou
Chris. MICHEL, c'est mon nom de famille.

C'est Philippe qui a raison: le pb doit se situer dans la
colonne B: la macro copie les données dans les feuilles,
sélectionne ton onglet TOTAL_PREST, sélectionne la ligne
suivant la dernière ligne non vide de B et colle les
données là.

Pour solutionner cela, je te propose la macro suivante:

Sub pour_mike2()

Dim i As Integer

For i = 1 To Sheets.Count
If Sheets(i).Name <> "TOTAL_PREST" Then
If Sheets(i).Range("B100") = "" _
Then Sheets(i).Range("B100") = " "
Sheets(i).Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste
End If
Next
End Sub

le petit défaut de cette macro, c'est qu'il va coller les
80 lignes à chaque fois, même s'il y a des gros vides. Le
plus simple, c'est qu'à la fin, tu fasses un tri pour
metre les lignes vides en bas de page et que tu les
supprimes toutes (ou que tu utilises un filtre
automatique).

Voila,

Chris.
-----Message d'origine-----
Bonjour à tous

Malgré l'aide précieuse de Michel, j'ai un problème...

j'ai une macro qui doit reprendre les données de plusieures
onglets(dans un même document) et la coller dans une feuille qui se
nomme "TOTAL-PREST", alors si j'avais qu'un onglet ok ca marche !, mais
si je prend 2 onglets (et je dois en prendre 8),elle écrase les données
antérieures.

Comment modifier la macro, pour que dans la feuille "TOTAL_PREST", elle
rajoute les données à la suite des précédentes( désolé en macro, je
débute)

Un grand merci à vous tous !!!!!!

Sub pour_Mike()

Sheets("Feuil1").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil2").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil3").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil5").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil6").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil7").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste

Sheets("Feuil8").Range("B20:P100").Copy
Sheets("TOTAL_PREST").Select
Range("B" & [B65534].End(3).Row).Select
ActiveSheet.Paste


End Sub

Mike

--

Mike

"on se lasse de tout sauf d'apprendre !"

.



--
Ceci est une signature automatique de MesNews.
Site : http://mesnews.no-ip.com


Avatar
O'Neem Anne
;O)))
hey, denis .....
c'est l'inverse de michchris ;-)))
@+
-----Message d'origine-----
Hum! avant toute chose, mon prénom c'est Christophe ou
Chris. MICHEL, c'est mon nom de famille.