VBA Condition : Si une feuille portant le nom d'une cellule exis [Fermé]

-
Bonjour,
Je dispose d'une fichier qui créé une nouvelle feuille avec le nom contenu dans la cellule E5 de la feuille saisie lorsque j'appuie sur un bouton.
Je voudrais une macro capable d'interdire la création d'une nouvelle feuille qui a déjà le nom inscrit dans la cellule E5.
Par exemple si dans mon classeur j'ai déjà une feuille nommée 12345 , et que dans ma cellule E5 je rentre 12345 et j'appuie sur le bouton OK, qu'il me mette un msgbox et un exit Sub.

J'ai déjà essayé les deux macros suivantes et cela ne marche pas


    Dim i As Integer
For i = 1 To Worksheets.Count
If Worksheets(i).Name = Sheets("Saisie").Range("E5").Content Then
MsgBox "Mettre '-2' a la fin du numero d'essai ! "
Exit Sub
End If
Next i


Dim Sh As Variant

For Each Sh In Worksheets
If Sheets("Saisie").Range("E5").Content = Sh.Name Then
MsgBox "Mettre '-2' a la fin du numero d'essai ! "
End If
Next
Exit Sub



Merci à ceux qui prendront le temps de m'aider

Afficher la suite 

3 réponses

Meilleure réponse
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2221
1
Merci
Bonjour,

Avec une fonction booléenne et le gestionnaire d'erreur :
Function FeuilleExiste(wk As Workbook, stFeuille As String) As Boolean
 On Error Resume Next
 FeuilleExiste = Not (wk.Sheets(stFeuille) Is Nothing)
End Function

cf : http://www.developpez.net/forums/d269391/logiciels/microsoft-office/excel/macros-vba-excel/vba-e-feuille-existe/

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 70874 internautes nous ont dit merci ce mois-ci

Bonjour, déjà essayé et cela ne marche pas. J'ai déjà parcouru tous les forums qui proposaient une solution et aucune ne marche, c'est pour cela que je suis venu demander de l'aide ici
pijaku
Messages postés
12253
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
19 juillet 2019
2221 > simplyizi -
Quel est ton code d'appel de cette fonction?
Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118
0
Merci
Bonjour Exis, bonjour le forum.

Je ne sais pas d'où tu sors Content mais pour moi ce mot clé n'existe pas... Je te propose la macro événementielle Change ci-dessous, à placer dans le code de l'onglet Saisie :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim O As Worksheet 'déclare la variable O (Onglets)

If Target.Address <> "$E$5" Then Exit Sub 'si le changement a lieu ailleurs qu'en E5, sort de la procédure
For Each O In Sheets 'boucle sur tous les onglets du classeur
    If O.Name = Target.Value Then 'condition : si le nom de l'onglet est égal à la valeur de la cellule E5
        MsgBox "Cet onglet existe déjà ! Veuillez saisir un autre nom." 'message
        Target.Select 'sélectionne la cellule E5
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next O 'prochain onglet de la boucle
Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position (à adapter à ton cas)
ActiveSheet.Name = Target.Value 'renomme l'onglet
End Sub

Bonjour, merci de votre réponse.
avec VALUE a la place de CONTENT , lorsque j'appuie sur le bouton OK, rien ne se passe. Avec CONTENT il m'affichait le msgbox , mais tout le temps et ne créait pas de nouvelle feuille.
J'ai essayé votre méthode et cela ne marche pas, au lieu de de bloquer la création d'un nouvel onglet, il créée juste un nouvel onglet avec le numéro (2)
Je précise que le code de création d'un nouvel onglet a partir du Bouton OK se trouve dans un module.
Merci de ton aide en tout cas
Messages postés
4604
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
12 novembre 2019
118
0
Merci
Re,

Forcément ça ne peut pas marcher ! Le code que je t'ai proposé agit automatiquement quand tu édites la cellule E5 de l'onglet Saisie. C'est pour cela que je t'ai précisé qu'il fallait le mettre dans le composant de cet onglet Saisie. Pour cela, copie le code que je t'ai proposé, clique avec le bouton droit en bas sur le nom de l'onget Saisie et choisit l'option Visualiser le code, Colle le code...
L'avantage est que tu n'a plus besoin d'un bouton, le code agit automatiquement.

Toutefois, si tu désires conserver le bouton, utilise le code ci-dessous à appliquer au bouton :
Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglets)
Dim N As String 'déclare la variable N (Nom)

N = Sheets("Saisie").Range("E5")
If N = "" Then Exit Sub 'si N est vide, sort de la procédure
For Each O In Sheets 'boucle sur tous les onglets du classeur
    If O.Name = N Then 'condition : si le nom de l'onglet est égal à la valeur de la cellule E5
        MsgBox "Cet onglet existe déjà ! Veuillez saisir un autre nom." 'message
        Sheets("Saisie").Select 'sélectionne l'onglet "Saisie"
        With Range("E5") 'prend en compte la cellule C5
            .Select 'sélectionne
            .Value = "" 'efface le contenu
        End With 'fin de la prise en compte de la cellule E5
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next O 'prochain onglet de la boucle
Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position (à adapter à ton cas)
ActiveSheet.Name = N 'renomme l'onglet
End Sub


À plus,
ThauTheme
Ca marche parfaitement, merci !