Utilisation de Delete dans une instruction VB

Fermé
Aulane Messages postés 84 Date d'inscription mardi 27 janvier 2009 Statut Membre Dernière intervention 29 juillet 2017 - 27 janv. 2009 à 17:38
 Utilisateur anonyme - 28 janv. 2009 à 13:34
Bonjour,
J'ai créé un petit programme pour ne conserver que 2 feuilles sur un nouveau classeur Excel, donc effacer toutes celles qui le composent à partir de la 3e incluse, j'ai écrit à cet endroit:
With Classeur ’ Active le « nouveau classeur » créé, dans une boucle With
For i = 3 To .Worksheets.count ' active une boucle For dont le compteur (i) démarre à 3
.WorkSheets(i).Delete ’ Toutes les fois que la boucle rencontre une 3e feuille elle doit l'effacer
et c'est là que le bât blesse, Excel affiche une boîte de dialogue, demandant de confirmer l'effacement!
Comment éviter cette boîte et provoquer l'effacement immédiat?
D'autant que s'il y a beaucoup de feuilles a effacer ça prend du temps, et ce n'est pas le but recherché
et je termine la boucle For par
Next i
Mille fois merci à celui ou celle qui m'indiquera comment faire

Aulane
A voir également:

2 réponses

Utilisateur anonyme
27 janv. 2009 à 19:03
Bonjour,

Exemple type :

Sub EffaceFeuille()

    Dim Boucle As Long, Limite As Long
    
    Application.DisplayAlerts = False
    
    With ActiveWorkbook
        Limite = .Worksheets.Count
        For Boucle = Limite To 3 Step -1
            .Worksheets(Boucle).Delete
        Next
    End With
    Application.DisplayAlerts = True
    
End Sub
'

Lupin
0
Aulane Messages postés 84 Date d'inscription mardi 27 janvier 2009 Statut Membre Dernière intervention 29 juillet 2017
28 janv. 2009 à 09:25
Bonjour Lupin,

Merci pour la réponse et sa rapidité, mais à force de chercher, j'avais trouvé une solution, confortée par votre réponse.

Je vous mets ci dessous la façon dont j'avais rectifié le "tir", et ça marche, est-ce mieux ou moins bien que ce que vous me proposez?

For i = 3 To .Worksheets.Count
' Ajout de la propriété DisplayAlerts avec la valeur False pour stopper l'invite de confirmation
Application.DisplayAlerts = False
.Worksheets(i).delete

Next i
' Restauration de la valeur True à la propriété DisplayAlerts car VBA ne le fait pas automatiquement
Application.DisplayAlerts = True

Encore merci et peut être à bientôt

Aulane
0
Utilisateur anonyme
28 janv. 2009 à 13:34
re :

' Ici vous ne pouvez pas utiliser le propriété [ .Worksheets.Count ]
' puisque celle-ci est décrémenté à chaque instruction [ .Worksheets(i).delete ]
'
For i = 3 To .Worksheets.Count 
    ' Ajout de la propriété DisplayAlerts avec la valeur False pour stopper l'invite de confirmation 
    Application.DisplayAlerts = False 
    .Worksheets(i).delete 
Next i 


c'est pourquoi, il vous faut capturer la valeur de [ .Worksheets.Count ] dans une variable

Sub EffaceFeuille()

    Dim Boucle As Long ' Ici la variable pour boucler -> équivalent à [ i ]
    Dim Limite As Long  ' Ici la variable qui capture le nombre de feuille
                                ' avant la première suppression
    
    Application.DisplayAlerts = False
    
    With ActiveWorkbook
        ' Capture du nombre de feuille
        Limite = .Worksheets.Count
        ' Boucle pour supprimer les feuilles en commençant par la dernière
        For Boucle = Limite To 3 Step -1
            ' Ici la propriété [ .Worksheets.Count ] est décrémenté automatiquement
            .Worksheets(Boucle).Delete
        Next
    End With
    Application.DisplayAlerts = True
    
End Sub
'


Lupin
0