Générer plusieurs Excel à partir d'une liste et d'un modèle

Bonjour,

j'ai une nouvelle fois besoin de votre aide malgré diverses recherches qui ne répondent que partiellement à mon besoin.

A partir d'une liste contenue dans un fichier (voir exemple liste_2021.xlsx), je souhaite créer des copies d'un modèle (voir exemple template_2021.xlsx) avec les données suivantes :

  • Même structure que le modèle (nom et nombre de feuilles, listes ...)
  • Nom de fichier = identifiant de la colonne D de liste_2021.xlsx + _2021 --> identifiant_2021.xlsx
  • Prénom de la colonne B de liste_2021.xlsx en B3 du modèle
  • Nom de la colonne C de liste_2021.xlsx en B4 du modèle
  • Identifiant de la colonne D de liste_2021.xlsx en B5 du modèle
  • Equipe de la colonne E de liste_2021.xlsx en B6 du modèle

Avec au final, 1 fichier par ligne de la liste.

Les solutions en VBA ou avec des exécutables .bat me conviennent ;)

16liste-2021.xlsx (20.46 Ko)
21template-2021.xlsx (20.51 Ko)

Merci d'avance pour votre aide

Bonjour vilavi,

Il te suffit de créer une macro VBA. Où as-tu avancée là dessus ?

Je te met sur la piste pour créer ta macro
La structure globale de ta macro sera sous la forme :

    For Each Cel In Range("liste_pni[Prénom]")
        'Ton code
    Next Cel

Il te faut ensuite mettre les infos de la ligne traitée dans ton template, dupliquer le template dans un nouveau classeur grâce au code :

ThisWorkbook.ActiveSheet.Copy Before:=Workbooks.Add.Worksheets(1)

Puis de le sauvegarder, de le fermer et nettoyer les cellules du template ! C'est tout !

Tu essaies ?

Bonjour à tous,

une autre proposition (pour créer des classeurs)

Sub aargh()
    Set ws = ThisWorkbook.Sheets("feuil1")
    Set wb = Workbooks.Open("d:\downloads\template-2021.xlsx") '<- adapter le chemin
    t = ws.ListObjects(1).DataBodyRange
    For i = 1 To UBound(t)
        identifiant = t(i, 4)
        If identifiant <> "" Then
            nf = wb.Path & "\" & identifiant & ".xlsx"
            With wb.Sheets("intro")
                .Range("B2") = 2021
                .Range("B3") = t(i, 2)
                .Range("B4") = t(i, 3)
                .Range("B5") = t(i, 4)
                .Range("B6") = t(i, 5)
                If Dir(nf) <> "" Then
                    MsgBox "fichier " & nf & " existe déjà"
                Else
                    wb.SaveAs nf
                End If
            End With
        End If
    Next i
    MsgBox "Terminé"
End Sub
Rechercher des sujets similaires à "generer partir liste modele"