Utilisation de Delete dans une instruction VB

Aulane Messages postés 84 Date d'inscription   Statut Membre Dernière intervention   -  
 Utilisateur anonyme -
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
Configuration: Windows XP pro
Internet Explorer 7.0

2 réponses

  1. Utilisateur anonyme
     
    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
    1. Aulane Messages postés 84 Date d'inscription   Statut Membre Dernière intervention  
       
      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
  2. Utilisateur anonyme
     
    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