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

18voto

salon Points 16

Corrigé : Sans gestion des erreurs :

Function CheckIfSheetExists(SheetName As String) As Boolean
      CheckIfSheetExists = False
      For Each WS In Worksheets
        If SheetName = WS.name Then
          CheckIfSheetExists = True
          Exit Function
        End If
      Next WS
End Function

15voto

VirtualMichael Points 635

Si quelqu'un souhaite éviter le VBA et tester l'existence d'une feuille de calcul uniquement à l'aide d'une formule de cellule, il est possible d'utiliser la méthode suivante ISREF y INDIRECT fonctions :

=ISREF(INDIRECT("SheetName!A1"))

Cela donnera TRUE si le classeur contient une feuille appelée SheetName y FALSE autrement.

8voto

ashleedawg Points 12302

Compact wsExists función <sup>( <em>sans </em>le recours à la gestion des erreurs)</sup>

Voici une fonction courte et simple qui ne fait pas appel à la gestion des erreurs pour déterminer si une feuille de calcul existe ( et est correctement déclaré pour fonctionner dans cualquier situation !)

Function wsExists(wsName As String) As Boolean
    Dim ws: For Each ws In Sheets
    wsExists = (wsName = ws.Name): If wsExists Then Exit Function
    Next ws
End Function

Exemple d'utilisation :

L'exemple suivant ajoute une nouvelle feuille de calcul nommée myNewSheet s'il n'existe pas déjà :

If Not wsExists("myNewSheet") Then Sheets.Add.Name = "myNewSheet"

Plus d'informations :

5voto

uildriks Points 51

Ma solution ressemble beaucoup à celle de Tims, mais elle fonctionne également dans le cas de feuilles de calcul autres que les feuilles de calcul - les tableaux.

Public Function SheetExists(strSheetName As String, Optional wbWorkbook As Workbook) As Boolean
    If wbWorkbook Is Nothing Then Set wbWorkbook = ActiveWorkbook 'or ThisWorkbook - whichever appropriate
    Dim obj As Object
    On Error GoTo HandleError
    Set obj = wbWorkbook.Sheets(strSheetName)
    SheetExists = True
    Exit Function
HandleError:
    SheetExists = False
End Function

.

4voto

Excel Hero Points 1

Court et propre :

Function IsSheet(n$) As Boolean
    IsSheet = Not IsError(Evaluate("'" & n & "'!a1"))
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