• Initiateur de la discussion Initiateur de la discussion bloublou
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

bloublou

XLDnaute Occasionnel
Bonjour à tous,

J'aurai besoind e votre aide ou de vos conseils,

Je voudrais copier coller en VBA toujours la même plage de cellule de toutes les feuilles de mon classeur les unes à la suite des autres sur une feuille "Compil" 😕

Egalement pour toutes ces plages copiées je souhaiterais que le nom de la feuille apparraissent en dernière colonne de la feuille Compil 🙄

Si vous avez des pistes,

Merci de votre aide,

BlouBlou
 

Pièces jointes

Re : Copier coller VBA

Bonjour,

Telle qu'exprimée ta demande pourrait trouver cette solution:

Code:
Sub T()
    Dim sh As Worksheet, lig As Long
    For Each sh In ThisWorkbook.Worksheets
        If sh.Name <> "Compil" Then
            With ThisWorkbook.Sheets("Compil")
                lig = .Cells(Rows.Count, 1).End(xlUp)(2).Row
                sh.Range("B31:AG160").Copy Destination:=.Cells(lig, 1)
                .Cells(lig, sh.Range("B31:AG160").Columns.Count + 1).Resize(sh.Range("B31:AG160").Rows.Count).Value = sh.Name
            End With
        End If
    Next
End Sub

Le nom de la feuille sera 1 colonne + à droite que celle prévue dans le classeur exemple.

A+
 
Re : Copier coller VBA

Salut Hasco,

Merci ca marche nickel 🙂

Est-ce que tu pourrais me commenter un petit peu ton code, que je puisse le réutiliser dans d'autres applications

Et pourquoi pour le nom de la feuille est décalée d'une colonne ? c'était plus facile de coder comme ca pour toi ?

Merci de ton aide

BlouBlou
 
Re : Copier coller VBA

Re,

Voici le code commenté. J'ai ajouté une variable Range nommée plgSource pour plus de limpidité.

Code:
Sub T()
    Dim sh As Worksheet ' variable objet référençant une feuille de classeur
    Dim plgSource As Range
    Dim lig As Long ' numéro de ligne de destination des données
    
    ' Parcourir les feuilles du classeur
    For Each sh In ThisWorkbook.Worksheets
        ' Si le nom de la feuille en cours est différent de 'Compil'
        If sh.Name <> "Compil" Then
            ' Travailler par défaut sur la feuille destination
            With ThisWorkbook.Sheets("Compil")
                ' Prochain numéro de ligne disponible à partir du bas de la première colonne (A)
                lig = .Cells(Rows.Count, 1).End(xlUp)(2).Row
                ' Définition de la plage source
                Set plgSource = sh.Range("B31:AG160")
                'Copier la plage Source vers la plage de destination à la ligne 'lig' colonne 1
                plgSource.Copy Destination:=.Cells(lig, 1)
                ' Cellule de la ligne: lig et colonne nombre de colonne de la plage source
                ' Cellule retaillée (.resize) au nombre de lignes de la plage source
                .Cells(lig, plgSource.Columns.Count + 1).Resize(plgSource.Rows.Count).Value = sh.Name
            End With
        End If
    Next
End Sub

Dans ton exemple la colonne contenant le nom de la feuille n'était pas au bon endroit.
La macro place les noms de feuille à N=nombre de colonnes de la plage source +1

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
326
Retour