Ne pas créer des feuilles si elle existe déjà
Bonjour à tous,
Hier j'ai demandé un code pour créer des feuilles en fonction d'une liste sur une certaine feuille.
Jean-Eric m'a fourni un code qui me convient totalement.
Cependant, ma liste peut être variable et j'aimerais ajouter un bout de code qui dit "si ce nom est déjà celui d'une feuille alors ne pas créer la feuille" pour que seul les nouveaux éléments de ma liste se créent.
Voici mon code
Sub Ajout_des_feuilles()
'
' Etude_PNs_crise_degivreurs Macro
'
'Ajout des réf
If MsgBox("Les onglets des références ont-ils été déjà créés ?", vbYesNoCancel + vbDefaultButton1, "Onglets références") = vbNo Then
Dim nombreref As Long
Dim k As Long: k = 2
With Worksheets("Feuil1")
nombreref = .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(3).Value = nombre - 1
.Cells(4).Value = "références"
End With
With Worksheets("Feuil1")
Do While .Cells(k, 1).Value <> ""
Worksheets.Add after:=Worksheets(Worksheets.Count())
With ActiveSheet
.Name = Replace(Worksheets("Feuil1").Cells(k, 1).Value, "/", " ")
With .Cells(1)
.Value = Worksheets("Feuil1").Cells(k, 1).Value
.Font.Size = 20
End With
End With
k = k + 1
Loop
End With
End If
End Sub
Le programme change également le nom des références qui contiennent un "/" par un espace.
Mais si je lance ce programme car il y a un nouvel élement dans ma liste, il m'indique un message d'erreur 1004 disant que le nom est déjà attribué forcément.
J'ai essayé de faire cela avec les erreurs
on error resume next
mais cela crée les feuilles déjà existantes quand même en leur donnant le nom de base (Feuilx).
Merci d'avance pour votre aide,
Simon
Bonjour,
Une proposition qui permet de vérifier si la feuille existe avant d'en insérer une autre :
Sub Ajout_des_feuilles()
'
' Etude_PNs_crise_degivreurs Macro
'
'Ajout des réf
If MsgBox("Les onglets des références ont-ils été déjà créés ?", vbYesNoCancel + vbDefaultButton1, "Onglets références") = vbNo Then
Dim nombreref As Long, NomFeuille As String
Dim k As Long: k = 2
With Worksheets("Feuil1")
nombreref = .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(3).Value = nombre - 1
.Cells(4).Value = "références"
End With
With Worksheets("Feuil1")
Do While .Cells(k, 1).Value <> ""
NomFeuille = Replace(Worksheets("Feuil1").Cells(k, 1).Value, "/", " ")
If Not FeuilleExiste(NomFeuille) Then
Worksheets.Add after:=Worksheets(Worksheets.Count())
With ActiveSheet
.Name = NomFeuille
With .Cells(1)
.Value = Worksheets("Feuil1").Cells(k, 1).Value
.Font.Size = 20
End With
End With
End If
k = k + 1
Loop
End With
End If
End Sub
Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )
On Error GoTo SiErreur
Dim Feuille As Worksheet
FeuilleExiste = False
For Each Feuille In Worksheets
If Feuille.Name = FeuilleAVerifier Then
FeuilleExiste = True
Exit Function
End If
Next Feuille
Exit Function
SiErreur:
MsgBox "Une erreur s'est produite..."
FeuilleExiste = CVErr(xlErrNA)
End Function
Bonjour Pedro22,
C'est parfait, c'est exactement ce qu'il me fallait.
Merci beaucoup.
Simon