Copier lignes à partir d'onglet maître

Bonjour à toutes et à tous,

Je suis actuellement en train d'écrire une macro permettant de copier des lignes d'un onglet dans d'autres onglet en fonction d'une condition (en gros si la première cellule de la ligne du tableau est égale au nom de l'onglet, alors la ligne est copiée dans l'onglet correspondant). Je ne suis pas un pro de VBA mais après avoir enquêter sur les différents forums j'en suis arrivé au code suivant :

Sub test()

Call en_tête fonction qui copie les 3 premières lignes du fichier maître dans tous les autres onglets

For l = 4 To DerniereLigne (Derniere ligne non vide du tableau maître)

For m = 1 To Sheets.Count

If Sheets(m).Name = "Export NDF" Then L'onglet "Export NDF" est l'onglet maître

ElseIf Sheets(m).Name = Sheets("Export NDF").Cells(l, 1).Value Then Sheets("Export NDF").Rows(l).Copy Sheets(m).Rows(l) c'est là que le code ne marche pas, pas de message d'erreur mais pas de copie de données dans les onglets non plus.

End If

Next m

Next l

End Sub

Donc pour résumer, je n'ai pas de message d'erreur mais les données ne se copient pas dans les onglets.

je peux joindre le fichier si besoin, comme il contient des données de l'entreprise il faudra que je modifie les données avant.

Merci d'avance pour votre aide

Bonjour Sozper, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Set OS = Worksheets("Export NDF") 'définit l'onglet source OS
DL = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A de l'onglet source OS
For I = 4 To DL 'boucle sur toutes les lignes I de 4 à DL
    Set OD = Worksheets(OS.Cells(I, 1)) 'définit l'onglet destination OD
    Set DEST = OD.Cells(Application.Rows.Count, "A").End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
    OS.Rows(I).Copy DEST 'copie la ligne I de l'onglet source et la colle dans DEST
Next I 'prochaine ligne de la boucle
End Sub

Bonjour,

Dans le même genre que ThauThème :

Sub Test()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Lig As Long
    Dim Mess As String

    'défini la plage sur la colonne A de la feuille "Export NDF" à partir de A4, adapter..!
    With Worksheets("Export NDF"): Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel In Plage

        'gère les erreurs qui peuvent se produire si feuille absente ou son nom mal orthographié
        On Error Resume Next
        Set Fe = Worksheets(Cel.Value)

        'si elle existe...
        If Err.Number = 0 Then

            With Fe

                'numéro de ligne de la dernière cellule non vide en colonne A
                Lig = .Cells(.Rows.Count, 1).End(xlUp).Row

                'si la colonne A de la feuille n'est pas vide, incrémente
                If Cells(Lig, 1).Value <> "" Then Lig = Lig + 1

                'inscrit les valeurs
                .Rows(Lig).Value = Worksheets("Export NDF").Rows(Cel.Row).Value

            End With

        Else

            '...sinon, mémorise le nom
            Mess = Mess & Cel.Value & vbCrLf

        End If

    Next Cel

    'affiche le message le cas échéant
    If Mess <> "" Then

        Mess = "Les feuilles ci-dessous sous manquantes :" & vbCrLf & Mess
        MsgBox Mess

    End If

End Sub

C'est un vrai plaisir d'avoir des réponses aussi rapidement surtout que ça marche au poil !

J'ai plus qu'à rajouter un petit bouton et j'envoie ça.

Bonne soirée

Bonjour,

En fait je n'avais pas bien regardé, mais lorsque les lignes se copient dans les onglets, seulement une ligne se copie (excepté pour le dernier groupe de cellule du tableau où toutes les lignes se copient bien comme il faut).

Est-ce que vous pensez savoir où est le bug ?

Merci d'avance !

NB : j'ai utilisé le code de Theze

Bonjour,

je peux joindre le fichier si besoin, comme il contient des données de l'entreprise il faudra que je modifie les données avant.

ça serait judicieux !

J'essaye également de créer un fichier TCD permettant de faire un récapitulatif des totaux de chacun. Le code marche presque mais il me rajoute une ligne en trop quand j'appuie sur le bouton actualiser.

(le bouton actualiser exécute la fonction final qui reprend le code de theze + la fonction TCD)

Remplaces le code précédemment donné par celui-ci (petite correction au niveau de la définition de ligne). Tu as un espace parasite en fin du prénom Pierre :

Sub Final()

    Dim Fe As Worksheet
    Dim Plage As Range
    Dim Cel As Range
    Dim Lig As Long
    Dim Mess As String

    Call en_tête

    'défini la plage sur la colonne A de la feuille "Export NDF" à partir de A4, adapter..!
    With Worksheets("Export NDF"): Set Plage = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel In Plage

        'gère les erreurs qui peuvent se produire si feuille absente ou son nom mal orthographié
        On Error Resume Next
        Set Fe = Worksheets(Cel.Value)

        'si elle existe...
        If Err.Number = 0 Then

            With Fe

                'numéro de ligne de la dernière cellule non vide en colonne A
                Lig = .Cells(.Rows.Count, 1).End(xlUp).Row + 1

                'inscrit les valeurs
                .Rows(Lig).Value = Worksheets("Export NDF").Rows(Cel.Row).Value

            End With

        Else

            '...sinon, mémorise le nom
            Mess = Mess & Cel.Value & vbCrLf

        End If

    Next Cel

    'affiche le message le cas échéant
    If Mess <> "" Then

        Mess = "Les feuilles ci-dessous sous manquantes :" & vbCrLf & Mess
        MsgBox Mess

    End If

    Call TCD

End Sub

Merci pour l'aide, avec ce code ça marche bien pour le remplissage. Ce qui est bizarre c'est que ma ligne en doublon dans l'onglet TCD n’apparaît que quand j'exécute la fonction avec le bouton . Y aurait-il un bug dû à l'utilisation du bouton ?

J'ai résolu le problème en intégrant une suppression des doublons. Merci et bonne soirée

Avec le bouton tu appelles d'autre Sub() comme la suppression des feuilles, copie des entêtes, etc...

Rechercher des sujets similaires à "copier lignes partir onglet maitre"