Deverser certains onglets ds 1seul (mm classeur)

Fermé
Curlyness Messages postés 1 Date d'inscription jeudi 5 février 2015 Statut Membre Dernière intervention 5 février 2015 - Modifié par pijaku le 6/02/2015 à 07:35
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 févr. 2015 à 07:40
Bonjour à tous,


Alors voilà...
J'ai X onglets dans un classeur, et je souhaiterai déverser le contenu de plusieurs d'entre eux dans un autre, sobrement intitulé all in one ^^
A noter que si je me défends coté formules, je ne connais rien aux macros.
J'ai donc copié collé et adapté tent biuien que mal une macro trouvée sur le net et faisant partiellement l'affaire:

Option Explicit
Sub allinone()
 Dim ws As Worksheet
 For Each ws In Worksheets
   If ws.Name <> "recap" Then
     Application.ScreenUpdating = False
     ws.Activate
     Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
     Sheets("all in one").Activate
     Range("A65536").End(xlUp).Offset(1, 0).Select
     ActiveSheet.Paste
     Application.CutCopyMode = False
   End If
 Next ws
End Sub


Le problème, c'est que je ne sais pas comment l'adapter pour qu'elle ne prenne le contenu que de certaines feuilles, et non de l'intégralité de mon classeur comme défini visiblement dans la première partie. Je ne suis pas familière du format à respecter pour transcrire cette demande.
Pourriez vous éclairer ma lanterne?

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
Modifié par pijaku le 6/02/2015 à 07:43
Bonjour,

Tout est dans cette ligne :
If ws.Name <> "recap" Then

Si le nom de la feuille (en cours dans la boucle) est différent de récap alors je fais le traitement.
Si tu dois écarter du traitement 2-3 feuilles, il suffit de les ajouter à ce test :
On veut écarter du traitement les feuilles : Feuil1, Feuil5 et OneShot :

If ws.Name <> "recap" And ws.Name <> "Feuil1" ws.Name <> "Feuil5" ws.Name <> "OneShot" Then


Il existe une seconde façon de procéder, qui consiste à ne boucler que sur les feuilles concernées par la macro.
Ainsi, si seules les feuilles "Feuil1", "Feuil3"et "Feuil5" sont concernées :
Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets(Array("Feuil1", "Feuil3", "Feuil5"))
    Application.ScreenUpdating = False
     ws.Activate
     Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
     Sheets("all in one").Activate
     Range("A65536").End(xlUp).Offset(1, 0).Select
     ActiveSheet.Paste
     Application.CutCopyMode = False
Next


Tu peux bien entendu ajouter ou enlever des feuilles à ta guise...

EDIT :
Tu peux aussi te passer de l'activation de tes feuilles. Ce code te suffit :
Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets(Array("Feuil1", "Feuil3", "Feuil5"))
    With Ws
        .Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy Sheets("all in one").Range("A65536").End(xlUp).Offset(1, 0)
    End With
Next


🎼 Cordialement,
Franck 🎶
0