Vérification de nom d'onglet [Résolu]

Signaler
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
-
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
-
Bonjour,

J'ai une petite macro me permettant de copier un onglet de référence et en nommant ce nouvel onglet selon la date du jour.
Cependant,
si 2 appuis sont fait le même jour sur le bouton d'ajout (ce qui ne doit pas arriver),
la macro bug et ne reprotège pas mon classeur.

comment faire pour éviter de créer un second onglet si un premier en date du jour est déjà créé?
Sub ajoutProduction()
'
' ajoutProduction Macro
'

    ActiveWorkbook.Unprotect
    Sheets("Suivi Production").Select
    Sheets("Suivi Production").Copy After:=Sheets(1)
    ActiveSheet.Name = Format(Date, "dd-mm-yy")
    ActiveWorkbook.protect Structure:=True, Windows:=False

    
End Sub



Configuration: Windows / Firefox 81.0

4 réponses

Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 879
Bonjour

un truc du genre

Function FExist(NomF As String) As Boolean ' test si la feuille existe
   Application.ScreenUpdating = False
   On Error Resume Next
   FExist = Not Sheets(NomF) Is Nothing
   Application.ScreenUpdating = True
End Function 

Sub ajoutProduction()
'
' ajoutProduction Macro
'
   Dim nomF as String
    nomF = Format(Date, "dd-mm-yy")
    if FExist(nomF) Then 
      exit sub
    End If

    ActiveWorkbook.Unprotect
    Sheets("Suivi Production").Select
    Sheets("Suivi Production").Copy After:=Sheets(1)

    ActiveSheet.Name = nomF
    ActiveWorkbook.protect Structure:=True, Windows:=False

    
End Sub


Cordialement,
Jordane
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

Merci ça fonctionne au top.

possible de rajouter une MsgBox si la feuille existe déjà pour prévenir?
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 879 >
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

Oui
Dans le if avant le exit sub
Messages postés
12761
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
711
bonjour, suggestion:
Option Explicit

Sub ajoutProduction()
'
' ajoutProduction Macro
'
Dim nom As String
nom = Format(Date, "dd-mm-yy")
If Not existedeja(nom) Then
    ActiveWorkbook.Unprotect
    Sheets("Suivi Production").Select
    Sheets("Suivi Production").Copy After:=Sheets(1)
    ActiveSheet.Name = Format(Date, "dd-mm-yy")
    ActiveWorkbook.Protect Structure:=True, Windows:=False
End If
    
End Sub
Private Function existedeja(quoi As String) As Boolean
Dim ong As Worksheet
For Each ong In ThisWorkbook.Worksheets
    If ong.Name = quoi Then
        existedeja = True
        Exit Function
    End If
Next ong
existedeja = False
End Function
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 879
ahhhhhhhhhhhhh.... quelle horreure...
Une boulce pour vérifier le nom des feuilles..... aaaaahhhhhhhhhh.... au secours.......


:-)
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
>
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020

c'est à dire?
Messages postés
12761
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
711 >
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020

c'est un choix subjectif, pour éviter le
on error
, dont certains abusent parfois.
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020
1 498
Bonjour le Fil,

Pour éviter les horreurs (Boucle et On Error) :
Function FeuilleExiste(ByVal strNomFeuille As String) As Boolean
  FeuilleExiste = Not IsError(Evaluate("='" & strNomFeuille & "'!A1"))
End Function
Messages postés
12761
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
711
bof, cela ne fonctionne que s'il n'y a pas d'erreur en A1 de la feuille...
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020
1 498 >
Messages postés
12761
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020

Et quelle est la probabilité que ça arrive avec cette cellule ?
Function FeuilleExiste(ByVal strNomFeuille As String) As Boolean
  FeuilleExiste = Not IsError(Evaluate("='" & strNomFeuille & "'!XFD1048576"))
End Function


Et celle-ci fonctionne avec une erreur en A1 d'une feuille existante :
Function FeuilleExiste(ByVal strNomFeuille As String) As Boolean
  FeuilleExiste = Not IsError(Evaluate("=CELL(""col"",'" & strNomFeuille & "'!A1)"))
End Function
Messages postés
12761
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
25 octobre 2020
711 >
Messages postés
8212
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
22 octobre 2020

merci!
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020

Autre point,

ma macro me permet de générer une nouvelle feuille qui sera complétée.

comment pourrais-je faire pour éviter que l'on vienne modifier les données des autres feuilles précédemment complétées?
Mais tout en me laissant consulter les autres onglets afin de pouvoir en visualiser le contenu.
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020
2 879
Bonjour,

Normalement..... nouvelle question = ouverture d'une nouvelle discussion propre à celle-ci sur le forum...

Quoi qu'il en soit, Excel te permet de protéger les feuilles....
en vba, il existe la méthode "protect"
Tu trouveras des tonnes d'exemples sur le net sans difficulté.
Messages postés
123
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
13 octobre 2020
>
Messages postés
29864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 octobre 2020

oui c'est vrai.

je regarde pour faire un autre sujet si je ne trouve pas réponse à ma question ☺