copier les lignes non vides de plusieurs onglets dans un nouvel onglet

kobebaby

XLDnaute Nouveau
Bonjour à tous

Il s'agit de mon premier post, alors toutes mes excuses par avance si je ne respecte pas la Charte.

Voila ce que je cherche à faire :

Je fais une extraction ( à partir d'un requeteur). Cette extraction me donne un fichier XLS comportant plusieurs onglets. Chaque onglet correspont à 1 mois, n'a pas le même nombre de ligne et ne comporte pas la notion de mois (sauf sur le nom de l'onglet)

Je cherche à faire une macro :
1 : permettant d'écrire le mois dans la premiere colonne vide de chaque onglet et ce sur chaque ligne comprenant des données
2 : de copie toutes les lignes comprennant des données de chaque onglet dans un nouvel onglet.


Mon niveau en VBA est en dessous de débutant:confused::confused:. J'ai néammoins reussi à recopier le nom de l'onglet sur la premiere cellule de la premiere colonne vide mais je ne sais pas comment lui faire faire cette copie sur toutes les lignes ayant des données

Je vous joint le petit fichier avec mon début de macro

Merci à tous
 

Pièces jointes

  • essai.xlsm
    14.9 KB · Affichages: 85
  • essai.xlsm
    14.9 KB · Affichages: 86
  • essai.xlsm
    14.9 KB · Affichages: 95
G

Guest

Guest
Re : copier les lignes non vides de plusieurs onglets dans un nouvel onglet

Bonjour et bienvenue sur le forum,

Voici quelques lignes de code commentées qui copieront les données dans la feuille Feuil3 après avoir ajouter le nom de la feuille d'origine dans la nouvelle colonne.

Je te laisse adapter .

Code:
Sub Copie_nom_onglet()
'
' Copie_nom_onglet Macro
'
    Dim derlig As Long, Col As Long
    Dim sh As Worksheet
    'Le nombre de colonnes est censé être le même pour toutes les feuille
    Col = Sheets("Janvier").Cells(1, Columns.Count).End(xlToLeft).Column + 1
    'Recopier l 'entête de Janvier dans feuille 3
    Sheets("Janvier").Range("A1").Resize(, Col).Copy Sheets("Feuil3").Range("A1").Resize(, Col)
    Sheets("Feuil3").Cells(1, Col) = "Période"
    
    'Mettre tous les noms de feuilles concernées par la boucle dans la liste Array(....)
    For Each sh In Sheets(Array("Janvier", "Fevrier"))
        'travailler sur la feuille en cours de boucle
        With sh
            'Nouvel entête
            .Cells(1, Col) = "Période"
            'récupérer le numéro de dernière ligne de la colonne A
            derlig = .Range("A" & Rows.Count).End(xlUp).Row
            'Construction d'une plage allant de la ligne 2 à la dernière ligne et de colonne col
            .Range(.Cells(2, Col), .Cells(derlig, Col)).Value = .Name ' y mettre le nom de la feuille
            'copier le la ligne 2 colonne 1, à derligne Colonne col vers feuil3 première ligne disponible
            .Range(.Cells(2, 1), .Cells(derlig, Col)).Copy Sheets("Feuil3").Cells(Rows.Count, 1).End(xlUp)(2)
        End With
    Next
    '
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 273
Membres
103 168
dernier inscrit
isidore33