[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
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).
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.
@ + +