Macro pour copier/coller le contenu de fichiers vers différentes feuilles

Bonjour,

J'ai un classeur excel avec macro avec une feuille intitulée "backoffice".

Dans cette feuille, dans la colonne L j'ai des années (ça commence à 2012 et augmente de 1 à chaque ligne) en ligne 2 et suivantes (il y a un intitulé dans la ligne 1); et dans la colonne M de la ligne correspondante j'ai le nom du fichier qui correspond à cette année.

Je voudrais qu'en exécutant une macro (à créer et c'est pour celle-ci que je suis là), ceci se passe:

1) si une feuille intitulée 2012 (= le contenu de ma cellule L2) n'existe pas, le créer.

2) si la feuille 2012 (qui existe d'office maintenant) n'est pas vide, le vider. Pour cette étape, je ne suis pas encore sûr que ça soit le plus intelligent ni non plus nécessaire en fait, dans la mesure où je ne crois pas que quelqu'un ira modifier le tableau de travail (dans lequel je suis), et personne n'ira modifier les tableaux d'archives tels que visés par les cellules en M.

3) dans la feuille 2012, copier le contenu de la feuille "Suivi" d'un autre classeur, ce dernier ayant un intitulé exactement comme mentionné en cellule M2 (quelque chose comme "Tableau QP 2012.xlsx"). Tant mon classeur actuel de travail que ces classeurs auxquels la cellule en colonne M fait référence se trouvent dans le même dossier sur un Sharepoint de Microsoft.

(Si c'est possible, la copie de données devrait n'inclure que les lignes 18 à "la dernière remplie" (celle là étant variable par feuille "Suivi" de chaque autre classeur). Sinon je me débrouillerai avec les formules qui feront ensuite référence à cette feuille pour tenir compte des 17 premières lignes inutiles.)

4) passer à la ligne suivante dans "Backoffice" (= la cellule L3, à savoir "2013").

[=> pour cela j'ai compris qu'il fallait une formule du genre "For i = 2 to "... c'est dire si je n'y comprends pas énormément de choses]

Faire les opérations 1 à 3 avec cette ligne-là.

5) faire la même chose pour la cellule L4, et ainsi de suite jusqu'à la ligne qui correspond à l'année précédente. (L'année précédente étant l'année actuelle [2019 aujourd'hui] -1, donc 2018, donc la cellule L8.)

(Le but étant que si on réactive la macro dans 10 ans, les feuilles des 10 nouvelles années s'ajoutent automatiquement.)

Merci de votre aide.

Bonjour Calimero, bonjour le forum,

Tes explications sont claires mais rien ne vaut un fichier exemple pour pouvoir t'aider efficacement...

Mais en gros ça donnerait ça :

Sub Macro1()
Dim CD As Worksheet 'déclare la variable CD (Classeur Destination)
Dim OP As Worksheet 'déclare la variable OP (Onglet Principal)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
Dim CS As Workbook 'déclare la variable CS (Classeur Source)
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim DLS As Integer 'déclare la variable DLS (Dernière Ligne de l'onglet Source)

CD = ThisWorkbook 'définit le classeur destination CD
CA = CD.Path & "\" 'définit le chemin d'accès CA
Set OP = CD.Worksheets("backoffice") 'définit l'onglet principal OP
TV = OP.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
    If TV(I, 12) = Year(Date) Then Exit Sub 'si la donnée ligne I colonne 12 (=> colonne L) est egale à l'année d'aujourd'hui, sort de la procédure
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    Set OD = Worksheets(TV(I, 12)) 'définit l'onglet destination OD (génère une erreur si cet onglet n'existe pas)
    OD.Rows.Delete 'efface les éventuelles anciennes données de l'onglet OD
    If Err <> 0 Then 'condition : si une erreur a été générée
        Err.Clear 'supprime l'erreur
        Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position
        Set OD = ActiveSheet ''definit l'onglet OD
        OD.Name = TV(I, 12) 'renomme l'onglet
    End If 'fin de la condition
    On Error GoTo 0 'annule la gestion des erreurs
    Set CS = Workbooks.Open(CA & TV(I, 13)) 'définit le classeur source (en l'ouvrant)
    Set OS = CS.Worksheets("Suivi") 'définit l'onglet source
    DLS = OS.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne DLS de l'onglet source
    OS.Rows("18:" & DL).Copy OD.Range("A1") 'copie les lignes 18 à DLS de l'onglet source et les colle dans A1 de l'onget destination
Next I 'prochaine ligne de la boucle
End Sub
Rechercher des sujets similaires à "macro copier coller contenu fichiers differentes feuilles"