VBA - Copier une ligne sur une autre feuille à partir d'une certaine valeur

Bonjour ! Tout d'abord je tenais à vous féliciter pour ce forum qui m'a été d'une grande utilité jusqu'à présent.

Je viens aujourd'hui vers vous car étant novice sur Excel j'aurais besoin d'être aiguillé concernant la partie VBA de ce logiciel (qui n'est pour ma part pas du tout enseignée dans mon école).

Voici donc mon problème :

Je possède sur le fichier un certain nombre de feuilles (accueil, hebdo, mensuel, etc) toutefois concentrons-nous uniquement sur hebdo, je devrais réussir à me débrouiller pour répéter l'opération sur les autres feuilles une fois tout ce charabia (pour moi) compris.

J'ai donc plusieurs lignes (200 au maximum) sur la feuille hebdo et je souhaiterai que lorsque dans la colonne L on dépasse une certaine valeur (dans mon cas 7), on copie cette ligne (de A à I; en gris sur le fichier exemple) sur une autre feuille nommée "accueil" à partir d'une certaine ligne (la 2ème). Attention toutefois, je ne souhaite pas supprimer les données présentes sur la feuille hebdo.

Concernant l'activation de cette macro, le lancement du fichier Excel serait suffisant pour actualiser la feuille accueil

Voilà en espérant avoir été compréhensible quant à mon problème

Je vous laisse ci joint un fichier exemple

Je vous remercie par avance

Bonjour

C'est exactement le même problème qu'ici posé quelques heures plus tôt -> https://forum.excel-pratique.com/excel/copier-des-lignes-depuis-plusieurs-onglets-156867

Voici le code à mettre dans un module. Le code va nettoyer la feuille Accueil avant d'importer les données de la feuille Hebdo

Sub Importer()
Dim tablo()
Dim Ws As Worksheet
Dim DlgA As Long, dlg As Long, i As Long, lig As Long
Dim j As Byte

Application.ScreenUpdating = False
Call Nettoyer

For Each Ws In ThisWorkbook.Sheets
    dlg = Ws.Range("A" & Ws.Rows.Count).End(xlUp).Row
    If UCase(Ws.Name) <> "ACCUEIL" Then
        ReDim tablo(dlg - 2, 12)
        j = 0
        lig = 0
        For i = 0 To dlg - 2
            If Ws.Cells(i + 2, 12) > 7 Then
                For j = 0 To 8
                    tablo(lig, j) = Ws.Cells(i + 2, j + 1)
                Next j
                lig = lig + 1
            End If
        Next i
        With Sheets("Accueil")
            DlgA = .Range("A" & .Rows.Count).End(xlUp).Row + 1
            .Range("A" & DlgA & ":I" & DlgA).Resize(UBound(tablo) + 1) = tablo
        End With
    End If
Next Ws
With Sheets("Accueil").Range("A1").CurrentRegion
    .EntireColumn.AutoFit
    .EntireRow.AutoFit
End With

Application.ScreenUpdating = False
End Sub

Sub Nettoyer()
Dim DlgPP As Long
With Sheets("Accueil")
    DlgA = .Range("A" & Rows.Count).End(xlUp).Row
    If DlgA = 1 Then Exit Sub
    .Range("A2:I" & DlgA).ClearContents
End With

End Sub

Une fois le code placé dans le module, mettez un bouton sur la feuille accueil et associez le à la macro Importer.

N'oubliez pas d'enregistrer ensuite votre fichier avec l'extension XLSM

Cordialement

PS : mettez votre profil à jour car vous mentionnez excel 2003 et au vu de l'extension de votre fichier posté, vous avez au minimum excel 2007.

Bonjour,

Effectivement il y a un doublon de post (bien que le miens ait été posté avant de quelques minutes)

Tout d'abord je tiens à vous remercier quant à votre réponse détaillée, toutefois je fais face à un problème : "Erreur d'exécution n°13 : incompatibilité de type", est-ce normal ? (pardonnez mon ignorance, je suis persuadé qu'il s'agit là d'une erreur de débutant)

erreur 13 incompatibilite de type

Concernant la version d'Excel je me suis effectivement trompé, je corrige ceci de ce pas.

PS: petite information qui pourrait avoir son importance, qui en est d'ailleurs la source de mon erreur concernant la version d'Excel : je travaille sur un fichier Excel version 97-2003 toutefois sur mon ordinateur personnel il s'agit de la version 2020, le fichier sur mon pc étant la version "d'entrainement" que je devrais retranscrire sur le vrai fichier (autre ordinateur et donc version 97-2003) une fois la macro opérationnelle.

Merci par avance de votre réponse.

Bonjour,

je fais face à un problème : "Erreur d'exécution n°13 : incompatibilité de type", est-ce normal ? (pardonnez mon ignorance, je suis persuadé qu'il s'agit là d'une erreur de débutant)

Je n'ai aucune erreur en plaçant les codes dans le fichier que vous avez placé ici. Utilisez vous le même fichier ?

petite information qui pourrait avoir son importance, qui en est d'ailleurs la source de mon erreur concernant la version d'Excel : je travaille sur un fichier Excel version 97-2003 toutefois sur mon ordinateur personnel il s'agit de la version 2020, le fichier sur mon pc étant la version "d'entrainement" que je devrais retranscrire sur le vrai fichier (autre ordinateur et donc version 97-2003) une fois la macro opérationnelle.

Vous ne devriez pas avoir de souci avec excel 2003 sauf que le fichier en question doit être enregistré au format XLS

Sur le fichier exemple tout fonctionne, toutefois sur le fichier comprenant la vraie liste (Excel 97-2003) ça m'affiche l'erreur montrée précédemment.

(Après vérification ce dernier est bien enregistré au format XLS)

Vous avez quoi en colonne L une valeur ou une formule

Donnez moi éventuellement le vrai fichier sans données confidentielles

Il s'agit d'une formule

Voici ci-joint le fichier original sans les données

Le souci vient de N#A dans votre formule en colonne L, mettez cette formule --> =SIERREUR(DATEDIF(K3;AUJOURDHUI();"d");"")

Vous pouvez remplacer le "" par 0 aussi -->=SIERREUR(DATEDIF(K3;AUJOURDHUI();"d");0)

A noter que vous avez une feuille nommé Listing non mentionnée dans votre premier courrier

Rechercher des sujets similaires à "vba copier ligne feuille partir certaine valeur"