Empecher l'envoie d'une erreur si l'onglet existe déjà

Résolu/Fermé
Giant - 25 août 2020 à 09:30
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 - 25 août 2020 à 12:42
Bonjour,

Je cherche à mettre en place un système ou plutôt une sécurité qui m'évite d'avoir une erreur quand je demande à Excel de mettre à jour les valeurs de mes onglets.

Par exemple une macro qui parcourait mon classeur et si elle trouve un onglet qui existe déjà elle ne le recrée pas ( car du coup erreur), et passe à la suite.

Sub Macro1()
'--------------------
On Error Resume Next
If IsError(Sheets("P1").Name) Then
Sheets.Add After:=Sheets(Sheets.Count)
With Sheets(Sheets.Count)
.Name = "P1"
.Activate
Range("A1").Select
End With
End If
On Error GoTo 0
'------------'suite du code
End Sub


Merci d'avance.

Configuration: Windows / Edge 18.17763
A voir également:

10 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
Modifié le 25 août 2020 à 10:36
Bonjour

il te suffit d'appeler la fonction FeuilleExiste depuis la boucle ou tu crées tes feuilles.
Si elle n'existe pas tu crées, si elle existe tu ne fais rien.
Un truc du genre

If FeuilleExiste("Nom de la feuille") = False Then
'code de création
End if


1
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
25 août 2020 à 11:24
Bonjour,

Déjà, pour éviter de faire des boucles... il existe une fonction un peu plus "optimisée"
Function FeuilleExiste(NomF As String) As Boolean ' test si la feuille existe
   On Error Resume Next
   FeuilleExiste = Not Sheets(NomF) Is Nothing
End Function


Ensuite, pour répondre à ta question de " l'appliquer sur tout le classeur" ... et bien... il suffit d'y faire appel avant de faire l'ajout de ta feuille

if FeuilleExiste("P1") = False Then
     Sheets.Add After:=Sheets(Sheets.Count)
     With Sheets(Sheets.Count)
       .Name = "P1"
       .Activate
     End With
End if


1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
25 août 2020 à 11:50
Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer

Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)

Do While monFichier <> ""
'Ici je crée un onglet pour chaque nom de fichier dans mon dossier
    onglet = Split(Split(monFichier, "-")(2), "_")(0)
    if FeuilleExiste(onglet) = False Then
        wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
   end if
monFichier = Dir
Loop

  
End Sub


Avec la fonction FeuilleExiste de Jordane, que je salue au passage.
1
Je suis tombé sur ce code en creusant un peu, l'idée serait de l'appliquer pas pour une seule page, mais pour tout un classeur.

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 UCase(Feuille.Name) = UCase(FeuilleAVerifier) Then
            FeuilleExiste = True
            Exit Function
        End If
    Next Feuille
Exit Function

SiErreur:
    FeuilleExiste = CVErr(xlErrNA)
End Function
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour,

Merci pour ta réponse. Est ce qu'il est possible de l'activer sur le classeur entier et non une feuille précise ?

Merci d'avance
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
25 août 2020 à 10:55
Poste le code avec lequel tu crées tes feuilles
0
Voici mon code initial. Merci beaucoup.

Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer

Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)

Do While monFichier <> ""
'Ici je crée un onglet pour chaque nom de fichier dans mon dossier
    onglet = Split(Split(monFichier, "-")(2), "_")(0)
    wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
monFichier = Dir
Loop

  
End Sub
0
Aussi simple que ça, merci beaucoup !
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
25 août 2020 à 11:58
teste d'abord et si ça te convient, marque le sujet résolu
0
J'ai testé comme ci-dessous mais je tombe sur l'erreur "Type d'argument ByRef incompatible sur "onglet" :
If FeuilleExiste(onglet) = False Then


Function FeuilleExiste(NomF As String) As Boolean ' test si la feuille existe
   On Error Resume Next
   FeuilleExiste = Not Sheets(NomF) Is Nothing
   
   If FeuilleExiste("P1") = False Then
     Sheets.Add After:=Sheets(Sheets.Count)
     With Sheets(Sheets.Count)
       .Name = "P1"
       .Activate
     End With
End If
End Function
Sub Macro()
Dim nomFeuille As String
Dim monFichier As String
Dim wb As Workbook
Dim chemin As String
Dim i As Integer

Set wb = Workbooks(ThisWorkbook.Name)
chemin = ThisWorkbook.Path & "\Test\"
monFichier = Dir(chemin & "*.xlsx", vbNormal)

Do While monFichier <> ""
'Ici je cr?e un onglet pour chaque nom de fichier dans mon dossier
    onglet = Split(Split(monFichier, "-")(2), "_")(0)
    If FeuilleExiste(onglet) = False Then
        wb.Sheets.Add(After:=Worksheets(Worksheets.Count)).Name = onglet
   End If
monFichier = Dir
Loop

  
End Sub
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 931
25 août 2020 à 12:42
Relis le code de Jordane.

Ca n'est pas ce que tu as utilisé.
0