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

-1voto

imjordy23 Points 1

J'ai trouvé un moyen facile de le faire, mais je n'ai pas créé de nouveau sous pour cela. Au lieu de cela, j'ai simplement "effectué une vérification" dans la sous-section sur laquelle je travaillais. Supposons que le nom de la feuille que nous recherchons est "Sheet_Exist" et que nous voulons simplement l'activer si elle est trouvée :

Dim SheetCounter As Integer

SheetCounter = 1

Do Until Sheets(SheetCounter).Name = "Sheet_Exist" Or SheetCounter = Sheets.Count + 1
 SheetCounter = SheetCounter +1
Loop
If SheetCounter < Sheets.Count + 1 Then
 Sheets("Sheet_Exist").Activate
Else
 MsgBox("Worksheet ""Sheet_Exist"" was NOT found")
End If

J'ai également ajouté une fenêtre pop-up pour le cas où la feuille n'existe pas.

-1voto

Guest Points 402

Je sais que c'est un vieux post, mais voici une autre solution simple et rapide.

Public Function worksheetExists(ByVal wb As Workbook, ByVal sheetNameStr As String) As Boolean

On Error Resume Next
worksheetExists = (wb.Worksheets(sheetNameStr).Name <> "")
Err.Clear: On Error GoTo 0

End Function

-5voto

chenaou Points 1

J'avais en fait un moyen simple de vérifier si la feuille existe et d'exécuter ensuite une instruction :

Dans mon cas, je voulais supprimer la feuille et recréer la même feuille avec le même nom mais le code a été interrompu si le programme n'était pas en mesure de supprimer la feuille car elle était déjà supprimée.

Sub Foo ()

    Application.DisplayAlerts = False

    On Error GoTo instructions
    Sheets("NAME OF THE SHEET").Delete

    instructions:

    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Name = "NAME OF THE SHEET"

End Sub

0 votes

Le problème avec cette réponse est qu'après avoir déterminé que la feuille a en fait existé, elle est supprimée et n'existe donc plus. Si cette réponse était écrite comme une fonction, elle pourrait porter un nom tel que SheetExistsAfterDeletion et renverrait toujours FALSE.

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