2 votes

Pourquoi supprimer une feuille entraîne l'arrêt de mon code

J'ai du code ici (ci-dessous) dont j'ai besoin de vider les données dans la feuille de calcul "Data Entry", il peut y avoir d'autres moyens plus rapides pour le faire, mais j'ai choisi de supprimer et de recréer. N'hésitez pas à dire si ce n'est pas le cas.

Private Sub CommandButton1_Click()

Dim DataEntryWs As Worksheet

For i = Worksheets.Count To 1 Step -1

If Worksheets(i).Name = "Data Entry" Then

    Application.DisplayAlerts = False
    Worksheets("Data Entry").Delete
    MsgBox ("Feuille supprimée")
    Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
    DataEntryWs.Name = "Data Entry"
    Call Data_Entry_Calcs

Else

    If i = Worksheets.Count Then

        MsgBox ("Ajout de nouvelles feuilles maintenant")
        Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
        DataEntryWs.Name = "Data Entry"
        Call Data_Entry_Calcs

    Else

    End If

End If

Next i

Call Data_Entry_Calcs

End Sub

Chaque fois que j'exécute le code, si la feuille nommée "Data Entry" est présente, lorsque le code arrive à cette ligne Worksheets("Data Entry").Delete, le code s'arrête et ne continue pas. Pourquoi en est-il ainsi? Cela me dérange depuis un certain temps maintenant.

J'ai essayé d'exécuter la boucle For à la fois en avant et en arrière pour voir si cela faisait une différence, mais je n'ai eu aucun succès avec cela.

2voto

Tom Points 5426

Pouvez-vous essayer cela à la place. Vous n'avez pas besoin de la boucle pour faire ça si je comprends correctement ce que vous essayez de faire

Private Sub CommandButton1_Click()
    Dim DataEntryWs As Worksheet

    ' Définir la feuille que vous voulez tester à une variable
    ' Nous utilisons la gestion des erreurs au cas où elle n'existe pas. Si elle n'existe pas, DataEntryWs = rien
    On Error Resume Next
    Set DataEntryWs = ThisWorkbook.Worksheets("Saisie de données")
    On Error GoTo 0

    ' Tester si la feuille existe. Si oui, la supprimer
    If Not DataEntryWs Is Nothing Then
        Application.DisplayAlerts = False
        DataEntryWs.Delete
        Application.DisplayAlerts = True
        MsgBox "Feuille supprimée"
    End If

    ' Ajouter une nouvelle feuille
    MsgBox "Ajout de nouvelles feuilles maintenant"
    With ThisWorkbook
        Set DataEntryWs = .Sheets.Add(after:=.Sheets(.Sheets.Count))
    End With
    DataEntryWs.Name = "Saisie de données"

    Call Data_Entry_Calcs
End Sub

2voto

Xabier Points 6963

Que diriez-vous de vider le contenu de cette feuille au lieu de la supprimer, comme ceci :

Private Sub CommandButton1_Click()

Dim DataEntryWs As Worksheet

For i = Worksheets.Count To 1 Step -1
    If Worksheets(i).Name = "Data Entry" Then
        Application.DisplayAlerts = False
        Worksheets("Data Entry").Rows("2:" & Rows.Count).ClearContents 'effacer le contenu de la ligne 2 à la dernière 
        Call Data_Entry_Calcs
    Else
        If i = Worksheets.Count Then
            MsgBox ("Ajout de nouvelles feuilles maintenant")
            Set DataEntryWs = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count))
            DataEntryWs.Name = "Data Entry"
            Call Data_Entry_Calcs
        End If
    End If
Next i

Call Data_Entry_Calcs

End Sub

1voto

Jpad Solutions Points 272

Pouvez-vous essayer ce code et me dire ce qui se passe, et oui, je reçois la boîte de dialogue lorsque je l'exécute...

        Sub Test2()
        Dim i As Integer

            On Error GoTo err_handler

            For i = Worksheets.Count To 1 Step -1

                If Worksheets(i).Name = "Data Entry" Then

                    Application.DisplayAlerts = False
                    Worksheets("Data Entry").Delete
                    Application.DisplayAlerts = True

                    MsgBox ("Feuille supprimée")

                End If

            Next i

            Exit Sub

err_handler:
        MsgBox Err.Description

        End Sub

1voto

Pourquoi ne pas essayer juste cela?

Private Sub CommandButton1_Click()
Dim DataEntryWs As Worksheet
    On Error Resume Next
    Set DataEntryWs = Sheets("Data Entry")
    On Error GoTo 0

    If Not DataEntryWs Is Nothing Then
        DataEntryWs.Cells.Clear
        MsgBox "Feuille de données effacée.", vbInformation
    Else
        MsgBox "Ajout d'une nouvelle feuille maintenant.", vbInformation
        With ThisWorkbook
            Set DataEntryWs = .Sheets.Add(after:=.Sheets(.Sheets.Count))
            DataEntryWs.Name = "Data Entry"
        End With
    End If
    DataEntryWs.Activate
    Call Data_Entry_Calcs
End Sub

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