156 votes

Tester ou vérifier si la feuille existe

Dim wkbkdestination As Workbook
Dim destsheet As Worksheet

For Each ThisWorkSheet In wkbkorigin.Worksheets 
    'this throws subscript out of range if there is not a sheet in the destination 
    'workbook that has the same name as the current sheet in the origin workbook.
    Set destsheet = wkbkdestination.Worksheets(ThisWorkSheet.Name) 
Next

En gros, je passe en revue toutes les feuilles du classeur d'origine, puis j'active la fonction destsheet dans le classeur de destination vers la feuille portant le même nom que la feuille actuellement itérée dans le classeur d'origine.

Comment puis-je tester si cette feuille existe ? Quelque chose comme :

If wkbkdestination.Worksheets(ThisWorkSheet.Name) Then

2 votes

2voto

Vityata Points 30261

Si vous êtes un fan de WorksheetFunction. ou si vous travaillez dans un pays non anglophone avec un Excel non anglophone, c'est une bonne solution, qui fonctionne :

WorksheetFunction.IsErr(Evaluate("'" & wsName & "'!A1"))

Ou dans une fonction comme celle-ci :

Function WorksheetExists(sName As String) As Boolean
    WorksheetExists = Not WorksheetFunction.IsErr(Evaluate("'" & sName & "'!A1"))
End Function

1voto

MAx Segura Points 15

Sans doute que la fonction ci-dessus peut fonctionner, je me suis retrouvé avec le code suivant qui fonctionne assez bien :

Sub Sheet_exist ()
On Error Resume Next
If Sheets("" & Range("Sheet_Name") & "") Is Nothing Then
    MsgBox "doesnt exist"
Else
    MsgBox "exist"
End if
End sub

Note : Sheets_Name est l'endroit où je demande à l'utilisateur d'entrer le nom, donc ce n'est peut-être pas la même chose pour vous.

1voto

gth826a Points 31

Changez "Data" en n'importe quel nom de feuille que vous testez...

On Error Resume Next 

Set DataSheet = Sheets("Data")

If DataSheet Is Nothing Then

     Sheets.Add(after:=ActiveSheet).Name = "Data"
     ''or whatever alternate code you want to execute''
End If

On Error GoTo 0

0voto

Alex Johnson Points 11

J'utilise cette fonction pour vérifier et renvoyer un nouveau nom de feuille si nécessaire. WSname est le nom de la feuille de calcul souhaitée et WBCur est le classeur que vous souhaitez vérifier. J'utilise cette fonction parce qu'il n'y a pas besoin de gérer les erreurs et que je peux l'appeler chaque fois que je crée une nouvelle feuille de calcul.

Public Function CheckNewWorksheetName(WSName As String, WBCur As Workbook) 'Will return New Name if needed
    Dim NewWSNum As Long, A As Integer, B As Integer, WorksheetFound As Boolean
    NewWSNum = 1
    WorksheetFound = False
    For A = 1 To WBCur.Worksheets.Count
        If WBCur.Worksheets(A).Name = WSName Then
            A = WBCur.Worksheets.Count
            WorksheetFound = True
        End If
    Next A

    If WorksheetFound = False Then
        CheckNewWorksheetName = WSName
    Else
        Do While WorksheetFound = True
            WorksheetFound = False
            For B = 1 To WBCur.Worksheets.Count
                If WBCur.Worksheets(B).Name = WSName & "_" & NewWSNum Then
                    B = WBCur.Worksheets.Count
                    WorksheetFound = True
                    NewWSNum = NewWSNum + 1
                End If
            Next B
        Loop
        CheckNewWorksheetName = WSName & "_" & NewWSNum
    End If
End Function

0voto

salon Points 16

J'ai fait autre chose : supprimer une feuille seulement si elle existe - pour ne pas avoir d'erreur si elle n'existe pas :

Excel.DisplayAlerts = False 
Dim WS
For Each WS In Excel.Worksheets
    If WS.name = "Sheet2" Then
        Excel.sheets("Sheet2").Delete
        Exit For
    End If
Next
Excel.DisplayAlerts = True

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X