46 votes

Si WorkSheet("wsName") existe

Je me demande s'il existe une fonctionnalité de coupe nette qui renvoie True ou False s'il existe une feuille de calcul dans un classeur?

Ce serait bien, mais pas indispensable, s'il est possible de le faire sans sauter la gestion des erreurs.

La seule chose que j'ai trouvée ne fonctionne pas vraiment :

 On Error Resume Next
If (Worksheets("wsName").Name <> "") Then
    Debug.Print "Worksheet exists!"
Else
    Debug.Print "Worksheet doesn't exist!"
End If
On Error GoTo ErrHandler

94voto

Dante is not a Geek Points 4831

Une version sans gestion des erreurs :

 Function sheetExists(sheetToFind As String) As Boolean
    sheetExists = False
    For Each sheet In Worksheets
        If sheetToFind = sheet.name Then
            sheetExists = True
            Exit Function
        End If
    Next sheet
End Function

32voto

Tim Williams Points 31438

Il n'y a pas de fonction intégrée pour cela.

 Function SheetExists(SheetName As String, Optional wb As Excel.Workbook)
   Dim s As Excel.Worksheet
   If wb Is Nothing Then Set wb = ThisWorkbook
   On Error Resume Next
   Set s = wb.Sheets(SheetName)
   On Error GoTo 0
   SheetExists = Not s Is Nothing
End Function

8voto

jogrohs Points 89

aussi une version légèrement différente. Je viens de faire une application.sheets.count pour savoir combien de feuilles de calcul j'ai en plus. bien et mettez un peu de renommer aussi

 Sub insertworksheet()
    Dim worksh As Integer
    Dim worksheetexists As Boolean
    worksh = Application.Sheets.Count
    worksheetexists = False
    For x = 1 To worksh
        If Worksheets(x).Name = "ENTERWROKSHEETNAME" Then
            worksheetexists = True
            'Debug.Print worksheetexists
            Exit For
        End If
    Next x
    If worksheetexists = False Then
        Debug.Print "transformed exists"
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = "ENTERNAMEUWANTTHENEWONE"
    End If
End Sub

8voto

Erik Karimov Points 181

Une autre version de la fonction sans gestion des erreurs. Cette fois, il n'est pas sensible à la casse et un peu plus efficace.

 Function WorksheetExists(wsName As String) As Boolean
    Dim ws As Worksheet
    Dim ret As Boolean        
    wsName = UCase(wsName)
    For Each ws In ThisWorkbook.Sheets
        If UCase(ws.Name) = wsName Then
            ret = True
            Exit For
        End If
    Next
    WorksheetExists = ret
End Function

4voto

ShamBhagwat Points 99

Légèrement modifié par le code de David Murdoch pour la bibliothèque générique

 Function HasByName(cSheetName As String, _ 
                   Optional oWorkBook As Excel.Workbook) As Boolean

    HasByName = False
    Dim wb

    If oWorkBook Is Nothing Then
        Set oWorkBook = ThisWorkbook
    End If

    For Each wb In oWorkBook.Worksheets
        If wb.Name = cSheetName Then
            HasByName = True
            Exit Function
        End If
    Next wb
End Function

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