Sisseron - SOS - Création d'onglets automatique

Sisseron

XLDnaute Nouveau
Bonjour à tout le monde,
Je suis nouveau sur ce forum et j'aimerais avoir de l'aide concernant un fichier que j'aimerais créer.
Je ne maîtrise pas du tout les macros et le codage VBA et je vais essayer d'être le plus clair possible que vous puissiez avoir assez d'éléments pour m'aider
Le cadre de mon métier (formateur d'adultes), Je dois créer une fiche d'évaluation par stagiaire et j'aimerais que mes formateurs puisse le remplir directement sur l'ordi en version dématérialisée. À partir d'une liste de stagiaires et d'un modèle j'aimerais en cliquant sur un bouton qu'il crée automatiquement autant d'onglets que de stagiaires. Je souhaiterais que ces onglets soient nommés automatiquement et que les noms et prénoms des stagiaire s'inscrivent automatiquement également.
Si je peux encore préciser un point. chaque stage est variable au niveau du nombre de stagiaires par contre un stage ne peut dépasser 40, j'aimerais si possible que seul les cellules rempli puissent générer un onglet
Vous trouverez en PJ ma maquette.
Je remercie infiniment les personnes qui me filerons un coup de main.
 

Pièces jointes

  • Trombi BAFA copie.xlsx
    14.1 KB · Affichages: 21
Solution
Bonsoir Sisseron, bonsoir le forum,

J'ai renommé ton second onglet Modèle...

VB:
Sub Macro1()
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste)
Dim OM As Worksheet 'déclare la variable OM (Onglet Modèle)
Dim DL As Byte 'déclare la variable DL (Dernière Ligne)
Dim I As Byte 'déclare la variable I (Incrément)
Dim OS As Worksheet 'déclare la variable OS (Onglet Stagiaire)
Dim NP As String 'déclare la variable NP (Nom Prénom)

Set OL = Worksheets("Liste") 'définit l'onglet OL
Set OM = Worksheets("Modèle") 'définit l'onglet OM
DL = OL.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet OL
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
    If...

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Sisseron, bonsoir le forum,

J'ai renommé ton second onglet Modèle...

VB:
Sub Macro1()
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste)
Dim OM As Worksheet 'déclare la variable OM (Onglet Modèle)
Dim DL As Byte 'déclare la variable DL (Dernière Ligne)
Dim I As Byte 'déclare la variable I (Incrément)
Dim OS As Worksheet 'déclare la variable OS (Onglet Stagiaire)
Dim NP As String 'déclare la variable NP (Nom Prénom)

Set OL = Worksheets("Liste") 'définit l'onglet OL
Set OM = Worksheets("Modèle") 'définit l'onglet OM
DL = OL.Cells(Application.Rows.Count, "B").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne B de l'onglet OL
For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
    If OL.Cells(I, "B").Value <> "" Then 'si la cellule ligne I colonne B n'est pas vide
        NP = OL.Cells(I, "B").Value & " " & OL.Cells(I, "C").Value 'définit la variable NP
        OM.Copy After:=Sheets(Sheets.Count) 'copie l'onglet modèle OM en dernière position
        Set OS = ActiveSheet 'définit l'onglet stagiaire OS
        OS.Name = NP 'renomnme l'onglet OS
        OS.Range("B3").Value = NP 'renvoie NP dans la cellue B3 de l'onglet OS
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub
 

Sisseron

XLDnaute Nouveau
Bonjour,
J'aimerais encore solliciter vos services
En effet le code que vous m'avez donné est parfait mais j'aimerais savoir si c'est possible de rajouter une macro pour supprimer les feuilles sans supprimer le modèle car j'ai trouvé un code sur internet (copie du code ci-dessous) mais à chaque fois cela supprime le model.

Sub suppFeuilles()
Dim curWsht As Worksheet
Application.DisplayAlerts = False
For Each curWsht In ThisWorkbook.Sheets
If curWsht.Name <> "Feuil1" Then curWsht.Delete
Next curWsht
ThisWorkbook.Sheets("Feuil1").Columns(3).ClearContents
Application.DisplayAlerts = True
End Sub

J'aimerais créer également un sommaire interactif de façon à ce que lorsqu'on clique sur le lien il ouvre directement l'onglet ciblé.
Merci encore
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Le code adapté :

VB:
Sub Macro2()
Dim OL As Worksheet 'déclare la variable OL (Onglet Liste)
Dim O As Worksheet 'déclare la variable O (Onglet)

Set OL = Worksheets("Liste") 'définit l'onglet OL
OL.Range("B2:C41").ClearContents 'efface la plage B2:C41 de l'onglet OL
Application.DisplayAlerts = False 'empêche les messages Excel
For Each O In Sheets 'boucle sur tous les onglets O du classeur
    If Not O.Name = "Liste" And Not O.Name = "Modèle" Then O.Delete 'si l'onglet ne se nomme pas "Liste" ou "Modèle", supprime l'onglet
Next O 'prochaine onglet de la boucle
Application.DisplayAlerts = True 'permet les messages Excel
End Sub

Pour ton sommaire, il te suffit de cliquer avec le bouton droit sur la partie qui contient les flèches de déplacement des onglet (en bas, à gauche du premier onglet). La liste s'affiche et s'actualise automatiquement...
 

Discussions similaires