Génération de fichiers Excel à plusieurs onglets à partir d'une liste

Bonjour à tous et merci pour toute l'aide que vous apportez.

Je désire créer autant de fichiers Excel comportant 10 onglets à partir d'une liste. Ces fichiers devront prendre le nom et prénom de la liste et se ranger dans le même répertoire. J'ai un fichier exemple mais je ne sais pas encore comment le joindre au message !!!

merci bien

Philippe

Bonjour Rigaud et bienvenu, bonjour le forum,

Une piste si tes données commencent en A1 avec une ligne d'en-tête (à adapter) :

Sub Macro1()
Dim NOPD As Byte 'déclare la variable NOPD (Nombre d'Onglets Par Défaut)
Dim O As Worksheet 'déclare la variabler O (Onglet)
Dim CA As String 'déclare la variabler CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variabler TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variabler I (Incrément)
Dim NC As Workbook 'déclare la variabler NC (Nouveau Classeur)

NOPD = Application.SheetsInNewWorkbook 'récupère le nombre d'onglets par défaut actuel
Application.SheetsInNewWorkbook = 10 'définit la nombre d'onglets par défaut à 10
Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
CA = "C:\Users\Robert\Desktop\" 'définit le chemin d'accès CA (à adapter à ton cas et sans oublier le dernier \)
TV = O.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 TV (en partant de la seconde)
    Set NC = Workbooks.Add 'ajoute un classeur
    'définit le nouveau classeur NC en l'enregistrant sous
    '(tape 51 à la fin au lieu de 52 si tu veux un classeur sans macros)
    NC.SaveAs CA & TV(I, 1), 52
    NC.Close False 'ferme le classeur NC sans enregistrer les modifications
Next I 'prochaine ligne de la boucle
Application.SheetsInNewWorkbook = NOPD 'restitue le nombre d'onglets par defaut initial
End Sub

bonjour et merci pour ton retour rapide.

Je me plonge dans les lignes de code (je n'y connais rien....) mais je vais essayer d'adapter.

je reviens vers vous si j'ai encore des difficultés.

merci

Philippe

Re,

la macro me génère bien autant de fichier que ma liste, fichiers comportant autant d'onglets que nécessaires mais le nom et le contenu des onglets n'est pas récupéré !

comment puis je mettre mon fichier en pièce jointe ?

merci

Philippe

Re,

1. fait : Répondre

2. Clique sur le symbole représentant un X dans une page (le 8ème en partant de la gauche)...

merci bien,

voila le fichier avec des faux noms bien évidement et l'ensemble des onglets devant être recopier dans chaque fichier générés!!!

Philippe

Bonjour Philippe, bonjour le forum,

Le code adapté (penses à y mettre à jour le chemin d'accès CA) :

Sub Macro1()
Dim CS As Workbook 'déclare la varaible CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim NC As Workbook 'déclare la variable NC (Nouveau Classeur)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CS = ThisWorkbook 'définit la classeur source CS
Set O = CS.Worksheets("liste étudiants") 'définit l'onglet O
CA = "C:\Users\Robert\Desktop\" 'définit le chemin d'accès CA (à adapter à ton cas et sans oublier le dernier \)
TV = O.Range("A4").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 TV (en partant de la seconde)
    'enregistre une copie de ce classeur dans le dossier ayant CA comme chemin d'accès et avec le Nom/Prénom de la ligne I
    CS.SaveCopyAs CA & TV(I, 1) & " " & TV(I, 2) & ".xlsm"
    Set NC = Workbooks.Open(CA & TV(I, 1) & " " & TV(I, 2) & ".xlsm") 'définit le bouveau classeur NC en l'ouvrant
    Application.DisplayAlerts = False 'empêche les messages d'Excel
    NC.Worksheets("liste étudiants").Delete 'supprime l'onglet "liste étudiants" du classeur NC
    NC.Close True 'ferme le classeur NC en enregistrant les modifications
    Application.DisplayAlerts = True 'autorise les message d'Excel
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Données traitées !" 'message
End Sub

Bonjour ThauTheme

Au top, j'ai fait les modifications et cela fonctionne parfaitement. Je vais gagner du temps.

J'ai une question, dis moi si cela est faisable (j'ai l'impression que sous Excel tout est faisable....quand on maitrise ) :

Peut on mettre automatiquement dans la case C12 (prénom), dans la case C14 (Nom) et C16 (date de naissance) de l'onglet "données admin" les informations de la liste étudiant (onglet liste étudiants) à la création de chaque fichier ?

je vais essayer de chercher, mais si tu pouvais me mettre sur la piste ?

Vraiment un grand merci pour ton aide

Philippe

Re,

Le code modifié :

Sub Macro1()
Dim CS As Workbook 'déclare la varaible CS (Classeur Source)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim CA As String 'déclare la variable CA (Chemin d'Accès)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Integer 'déclare la variable I (Incrément)
Dim NC As Workbook 'déclare la variable NC (Nouveau Classeur)

Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set CS = ThisWorkbook 'définit la classeur source CS
Set O = CS.Worksheets("liste étudiants") 'définit l'onglet O
CA = "C:\Users\Robert\Desktop\" 'définit le chemin d'accès CA (à adapter à ton cas et sans oublier le dernier \)
TV = O.Range("A4").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 TV (en partant de la seconde)
    'enregistre une copie de ce classeur dans le dossier ayant CA comme chemin d'accès et avec le Nom/Prénom de la ligne I
    CS.SaveCopyAs CA & TV(I, 1) & " " & TV(I, 2) & ".xlsm"
    Set NC = Workbooks.Open(CA & TV(I, 1) & " " & TV(I, 2) & ".xlsm") 'définit le bouveau classeur NC en l'ouvrant
    Application.DisplayAlerts = False 'empêche les messages d'Excel
    NC.Worksheets("liste étudiants").Delete 'supprime l'onglet "liste étudiants" du classeur NC
    With NC.Worksheets("données Admin") 'prend en compte l'onglet "données Admin" du nouveau classeur NC
        .Range("C12").Value = TV(I, 2) 'récupère le prénom dans C12
        .Range("C14").Value = TV(I, 1) 'récupère le nom dans C14
        .Range("C16").Value = TV(I, 3) 'récupère la date de naissance dans C16
    End With 'fin de la prise en compte de l'onglet "données Admin" du nouveau classeur NC
    NC.Close True 'ferme le classeur NC en enregistrant les modifications
    Application.DisplayAlerts = True 'autorise les message d'Excel
Next I 'prochaine ligne de la boucle
Application.ScreenUpdating = True 'affiche les rafraîchissements d'écran
MsgBox "Données traitées !" 'message
End Sub

que dire.....si ce n'est...merci !!!

Il est vraie que je n'ai pas souvent l'utilité des fonctions VBA sous Excel, voir jamais..mais parfois cela est utile.

Encore merci pour ton aide rapide et efficace.

philippe

Rechercher des sujets similaires à "generation fichiers onglets partir liste"