VBA - Si nom de la feuille existe then nom de la feuille créée

Hello cher forum ,

J'aimerais écrire une macro qui créé un nouvel onglet dont le nom sera = à la cellule B1. Cependant, si un onglet existe déjà avec ce nom =cells(B1) alors le nom sera B1&" -2".
Rien de très compliqué en apparence. Pourtant quand je tente le doublon, on me met le message suivant au lieu de me créer un onglet avec le titre =B1& " -2".

image

Voici mon code :

Sub new_sheet()

Dim Sh As Variant, FeuilleExiste As Boolean

For Each Sh In Worksheets
    If Sh.Name = Sheets("Base").Range("A2").Value Then _
    FeuilleExiste = True Else FeuilleExiste = False
Next Sh

    If FeuilleExiste = True Then _
    Sheets.Add(after:=Worksheets(1)).Name = Sheets("Base").Range("B1").Value & " -2" Else
    Sheets.Add(after:=Worksheets(1)).Name = Sheets("Base").Range("B1").Value

End Sub

Merci d'avance pour toute aide de votre part, je débute en VBA et j'ai beaucoup à apprendre.

Cordialement

Oups, pardon mon code est le suivant avec ci-joint le fichier :

Sub new_sheet()

Dim Sh As Variant, FeuilleExiste As Boolean

For Each Sh In Worksheets
    If Sh.Name = Sheets("Base").Range("B1").Value Then _
    FeuilleExiste = True Else FeuilleExiste = False
Next Sh

    If FeuilleExiste = True Then _
    Sheets.Add(after:=Worksheets(1)).Name = Sheets("Base").Range("B1").Value & " -2" Else
    Sheets.Add(after:=Worksheets(1)).Name = Sheets("Base").Range("B1").Value

End Sub

Salut Temprano,

quelque chose ainsi ?
La macro démarre sur un double-clic en [B1]

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
If Not Intersect(Target, [B1]) Is Nothing Then
    Cancel = True
    On Error Resume Next
    If Worksheets(CStr([B1])) Is Nothing Then
        Sheets.Add(after:=Worksheets(1)).Name = [B1]
    Else
        If Worksheets(CStr([B1]) & " -2") Is Nothing Then
            Sheets.Add(after:=Worksheets(CStr([B1]))).Name = [B1] & " -2"
        Else
            MsgBox "La feuille " & [B1] & " -2" & " existe déjà !"
        End If
    End If
    On Error GoTo 0
End If
'
End Sub


A+

Salut Curulis, merci beaucoup une fois de plus tu me sauves la mise

ça fonctionne parfaitement !!

Salut à tous,

Pour ne pas réinventé la roue ....

Dans votre module FonctionsXLS par exemple où vous stockez toutes vos fonctions...

Option Explicit
'————————   ENUMERATION POUR RENAMEWITHINCREMENT   —————————————
Public Enum vaIncrement
    Fichier = 0
    Feuille = 1
End Enum

' Procedure    :  RenameWithIncrement
' Date         :  14/07/2017
' Auteur       :  Jean-Paul (Valtrase)
' Site         :
' Adaptation   :  Jean-Paul (Valtrase)
' Révision     :  17/06/2021
' Objectif     :  Remonmer un fichier ou une feuille avec incrémentation
' Référence    :
' Entrée       :  Le nom de la feuille ou du fichier
' Sortie       :  Le nom de la feuille renommé ou False sur erreur
' Note         :  Dans le cas d'un fichier entrez le chemin complet
' Exemple      :  RenameWithIncrement Feuille1, Sheet      Retour : Feuille1(1)
Public Function RenameWithIncrement(EntryName As String, _
                                     Optional EntryType As vaIncrement = Fichier _
                                     )

Dim Index As Byte, strNameTemp As String
Dim SheetExiste As Boolean
Dim sh As Worksheets

    Index = 1
    strNameTemp = EntryName

    Select Case EntryType
        Case Feuille
            While SheetExist(strNameTemp)
                strNameTemp = EntryName & "(" & Index & ")"
                Index = Index + 1
            Wend

        Case Fichier
            While Dir(strNameTemp) <> ""
                strNameTemp = EntryName & "(" & Index & ")"
                Index = Index + 1
            Wend
        Case Else

    End Select
    RenameWithIncrement = strNameTemp

End Function

' Procedure : SheetExist
' Date      : 15/12/2016
' Auteur    : JeanPaul
' Objectif  : Tester si une feuille existe
' Entrée    :
' Sortie    : True ou False
' Note      :
' Exemple   :       Retour :
Public Function SheetExist(ByVal stFeuille) As Boolean
    On Error Resume Next

    SheetExist = Not (ThisWorkbook.Sheets(stFeuille) Is Nothing)
    '    ' // Ou pour les purristes
    '    Dim bolExist As Boolean, sh As Worksheet
    '    For Each sh In ThisWorkbook.Worksheets
    '        If stFeuille = sh.Name Then bolExist = True
    '    Next
    '    SheetExist = bolExist
End Function

Et pour l'appel :

 ThisWorkbook.Worksheets.Add(after:=Worksheets(1)).Name = _
    RenameWithIncrement(Worksheets("Base").Range("B1").Value, Feuille)
Rechercher des sujets similaires à "vba nom feuille existe then creee"