Vérification de nom d'onglet

Résolu/Fermé
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022 - 9 oct. 2020 à 15:44
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 28 oct. 2020 à 19:02
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

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 9 oct. 2020 à 15:50
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


1
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
Modifié le 9 oct. 2020 à 16:21
Merci ça fonctionne au top.

possible de rajouter une MsgBox si la feuille existe déjà pour prévenir?
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
9 oct. 2020 à 16:28
Oui
Dans le if avant le exit sub
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
9 oct. 2020 à 15:54
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
1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
9 oct. 2020 à 16:00
ahhhhhhhhhhhhh.... quelle horreure...
Une boulce pour vérifier le nom des feuilles..... aaaaahhhhhhhhhh.... au secours.......


:-)
0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
9 oct. 2020 à 16:20
c'est à dire?
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
9 oct. 2020 à 16:23
c'est un choix subjectif, pour éviter le
on error
, dont certains abusent parfois.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
9 oct. 2020 à 17:18
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
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
9 oct. 2020 à 17:25
bof, cela ne fonctionne que s'il n'y a pas d'erreur en A1 de la feuille...
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
Modifié le 9 oct. 2020 à 19:00
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
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
9 oct. 2020 à 22:43
merci!
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
27 oct. 2020 à 20:17
et une idée de comment faire pour vérifier la présence d'un onglet dans un classeur non ouvert?
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
Modifié le 28 oct. 2020 à 17:15
Bonjour yg_be

Avec une connexion ADODB :
'Nécéssite d'activer la référence Microsoft ADO ext x.x for DLL and Security
'Nécéssite d'activer la référence Microsoft ActiveX Data Objects x.x Library
Option Explicit

Sub testFeuilleFermee()
Dim sFichier As String
Dim sFeuille As String
  sFichier = ThisWorkbook.Path & "\Classeur_à_lire.xls"  'à adapter
  sFeuille = "Feuille 4"
  MsgBox FeuilleFermeeExiste(sFichier, sFeuille)
End Sub

Function FeuilleFermeeExiste(sNomCompletClasseur$, sNomFeuille$) As Boolean
Dim oCnx As ADODB.Connection
Dim oCat As ADOX.Catalog
Dim oTbl As ADOX.Table
  Set oCnx = New ADODB.Connection
  Set oCat = New ADOX.Catalog
  oCnx.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sNomCompletClasseur & ";Extended Properties=Excel 8.0;"
  Set oCat.ActiveConnection = oCnx
  For Each oTbl In oCat.Tables
    If Replace(oTbl.Name, "'", "") = sNomFeuille & "$" Then FeuilleFermeeExiste = True
  Next
  Set oCat = Nothing
  Set oTbl = Nothing
  oCnx.Close
  Set oCnx = Nothing
End Function
0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022
12 oct. 2020 à 11:50
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.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
12 oct. 2020 à 11:55
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é.
0
Maksime568 Messages postés 144 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 28 novembre 2022 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
12 oct. 2020 à 11:59
oui c'est vrai.

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