[VBA] Créer des onglets à partir des autres vierges

Bonjour @ tous,

Je travaille pour un établissement scolaire qui fait la formation et l'encadrement des candidats CNED, donc je dois faire une application pour suivre la réalisation des devoirs de chacun des élèves.

J'ai créé un fichier avec des onglets vierges, un onglet pour chaque classe ces derniers sont verrouillés par un mot de passe et je vais les masquer..

Ce que je veux faire :

Macro 1:

Créer des onglets à partir des onglets masqués "6EME" "5EME"… le nom de l'onglet doit porter le nom et prénom de l'élève et insérer aussi le nom de l'élève dans la cellule C7.

Noter que les onglets vont être verrouillés par mot de passe, et que je prévoie aussi l'inscription tardive des élèves donc il ne faut pas recréer ceux qui sont déjà créés.

Macro 2:

On va envoyer les relevés aux parents, alors il faut créer des fichiers PDF à partir des onglets, nom de fichier "Classe_JJMMAA_PrenomNom" dans un dossier que je vais spécifier.

Macro 3:

Une autre macro pour l'impression.

Voir PJ

J’espère avoir été clair

Bien @ vous

11xlp-devoirs.xlsx (39.80 Ko)

Bonsoir R@chid,

une proposition avec 2 macros

création des onglets macro1

création pdf macro2

pour macro 3 il suffit de remplacer l'instruction export par l'impression (si c'est nécessaire).

19xlp-devoirs.xlsm (131.18 Ko)

Salut h2so4,

Merci pour ton intervention,

je me permets de commencer d'abord par discuter la première macro.

j'ai fait une petite modification pour verrouiller les onglets après leur création, et pour ne pas avoir la classe avec le nom&prénom de l’élève sur le nom de l'onglet..

Sub NouvelOnglet()
    i = 2
    Set ws = Worksheets("base")
    While ws.Cells(i, 1) <> ""
       nf = ws.Cells(i, 2)
        nexistepas = False
        On Error GoTo terreur
        Set ws1 = Worksheets(nf)
        On Error GoTo 0
        If nexistepas Then
            m = ws.Cells(i, 1)
            Worksheets(m).Copy , Worksheets(Worksheets.Count)
            Set ws1 = Worksheets(Worksheets.Count)
            ws1.Name = nf
            ws1.Unprotect "1234"
            ws1.Cells(7, 3) = ws.Cells(i, 2)
           ws1.Protect "1234"
        End If
        i = i + 1
    Wend
    Exit Sub
terreur:
    nexistepas = True
    Resume Next

End Sub

Les onglets références sont normalement masqués, pourriez vous adapter la macro pour qu'elle crée les onglets et les affiche depuis les onglets masqués..

Ensuite, comme je l'avais signalé, je dois prévoir les inscriptions tardives durant l'année, alors je veux quand j'ajoute un élève dans la base j’applique un tri avant de cliquer sur CreerLesOnglets et je veux qu'elle le mette en place en respectant le tri de la base.

Merci infiniment


Pour la macro de PDF, ça marche parfaitement..

bonjour,

je suppose que si tu veux les onglets dans l'ordre c'est pour pouvoir les retrouver et y accéder facilement, Je te propose une autre solution via Hyperlien. voir macro

Sub Macro1()
    i = 2
    Set ws = Worksheets("base")
    While ws.Cells(i, 1) <> ""
        nf = ws.Cells(i, 2)
        nexistepas = False
        On Error GoTo terreur
        Set ws1 = Worksheets(nf)
        On Error GoTo 0
        If nexistepas Then
            m = ws.Cells(i, 1)
            Worksheets(m).Copy , Worksheets(Worksheets.Count)
            Set ws1 = Worksheets(Worksheets.Count)
            ws1.Name = nf
            ws1.Unprotect "1234"
            ws1.Cells(7, 3) = ws.Cells(i, 2)
            ws1.Visible = True
            ws1.Protect "1234"
            ws.Hyperlinks.Add Anchor:=ws.Cells(i, 2), Address:="", SubAddress:=nf
        End If
        i = i + 1
    Wend
    Exit Sub
terreur:
    nexistepas = True
    Resume Next
End Sub

Bonjour h2so4,

Merci pour ton retour, je préfère que ce soit bien trié pour le coté esthétique, pour les retrouver facilement, j'ai fait un onglet "TableauDeBord" qui est masqué maintenant et qui je vais afficher, c'est de là d'où je vais le chercher et les consulter.

Donc, si c'est possible de bien respecter le tri et créer les onglets malgré qu'il sont masqués ce serait génial..

@ + +

re-bonjour,

voici

Sub Macro1()
    i = 2
    Set ws = Worksheets("base")
    ws.Hyperlinks.Delete
    While ws.Cells(i, 1) <> ""
        nf = ws.Cells(i, 2)
        nexistepas = False
        On Error GoTo terreur
        Set ws1 = Worksheets(nf)
        On Error GoTo 0
        If nexistepas Then
            m = ws.Cells(i, 1)
            If i = 2 Then mi = Worksheets(Worksheets.Count).Name Else mi = ws.Cells(i - 1, 2)
            Worksheets(m).Copy , Worksheets(mi)
            With ActiveSheet
            .Name = nf
            .Unprotect "1234"
            .Cells(7, 3) = ws.Cells(i, 2)
            .Visible = True
            .Protect "1234"
            End With
        End If
        i = i + 1
    Wend
    Set ws = Nothing
    Exit Sub
terreur:
    nexistepas = True
    Resume Next
End Sub

Salut,

Merci pour ton retour, mais ca ne marche pas quand les onglets de base sont masqués

@ te relire

Bonsoir,

Sub Macro1()
    Dim wshidden(100)
    i = 2
    cws = 0
    For Each ws In Worksheets
        If ws.Visible = False Then
            cws = cws + 1
            wshidden(cws) = ws.Name
            ws.Visible = True
        End If
    Next
    Set ws = Worksheets("base")
    While ws.Cells(i, 1) <> ""
        nf = ws.Cells(i, 2)
        nexistepas = False
        On Error GoTo terreur
        Set ws1 = Worksheets(nf)
        On Error GoTo 0
        If nexistepas Then
            m = ws.Cells(i, 1)
            If i <> 2 Then mi = ws.Cells(i - 1, 2) Else mi = Worksheets(6).Name
            Worksheets(m).Copy after:=Worksheets(Worksheets.Count)
            With Worksheets(Worksheets.Count)
                .Visible = True
                .Name = nf
                .Unprotect "1234"
                .Cells(7, 3) = ws.Cells(i, 2)
                .Move after:=Worksheets(mi)
                .Protect "1234"
            End With
        End If
        i = i + 1
    Wend
    For i = 1 To cws
     Worksheets(wshidden(i)).Visible = False
    Next i
    Set ws = Nothing
    Exit Sub
terreur:
    nexistepas = True
    Resume Next
End Sub

Bonjour,

Merci pour ton aide, ça marche parfaitement..

Il faut que je me mette au VBA, les formules!!! ça sert à rien parfois.

Bravo, vous les VBAistes vous avez de la chance puisque vous pouvez tout faire avec.

@ + +

Rechercher des sujets similaires à "vba creer onglets partir vierges"