Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

VBA effacement de feuilles

Soleil11

XLDnaute Occasionnel
Bonjour le forum,

Actuellement, j'utilise le code ci-dessous pour effacer mes feuilles les unes après les autres a partir de la feuille 1.

Existe-t-il une méthode/procédure plus simple sans utiliser une boucle "For X" et "next" ?


Public Sub test()

For x = 2 To Sheets.Count

Sheets(1).Next.Select

Application.DisplayAlerts = False

ActiveWindow.SelectedSheets.Delete

Application.DisplayAlerts = True

Next x

End Sub

Merci pour votre aide.

Soleil11
 
G

Guest

Guest
Re : VBA effacement de feuilles

Bonjour à tous

voici une porposition, en attendant mieux.

Code:
 Application.DisplayAlerts = False
    Do While Sheets.Count > 1
        Sheets(Sheets.Count - 1).Delete
    Loop
    Application.DisplayAlerts = False
A+
 

pierrejean

XLDnaute Barbatruc
Re : VBA effacement de feuilles

bonjour soleil11

un tout petit peu plus smple

Code:
Public Sub test()
For x = Sheets.Count To 2 Step -1
Application.DisplayAlerts = False
Sheets(x).Delete
Application.DisplayAlerts = True
Next x
End Sub

Edit : Salut Hasco Salut MJ13
 

job75

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Bonsoir le fil,

Content aussi de retrouver Hasco

Bien que pierrejean n'aime pas le contrôle d'erreur :

Code:
Sub test()
On Error Resume Next
Application.DisplayAlerts = False
1 Sheets(2).Delete: If Err = 0 Then GoTo 1
End Sub

A+
 

YANN-56

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Bonsoir à tous,

Notre ami n'a-t-il pas voulu parler simplement d'effacer le contenu de ses Feuilles, et non de leur suppression???
(Malgré ce que sa tentative de macro le laisserait entendre)

Soleil; si tu nous écoutes ………

Amicalement

Yann
 

job75

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Re,

Bon pierrejean, je reconnais que ceci est mieux

Code:
Sub test()
Application.DisplayAlerts = False
1 Sheets(2).Delete: If Sheets.Count > 1 Then GoTo 1
End Sub

A+
 

Soleil11

XLDnaute Occasionnel
Re : VBA effacement de feuilles

Bonjour à tous,

J'avoue être assez étonné du nombre de possibilités qu'il existe pour supprimer les feuilles dans un classeur. A moi de décider quelle est le meilleure code en terme de performance et rapidité d'exécution.

Merci à tous.

Soleil11
 

job75

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Re,

A moi de décider quelle est le meilleure code en terme de performance et rapidité d'exécution.

J'ai testé sur 1000 feuilles avec en tête de macro Application.ScreenUpdating = False pour accélérer :

- Hasco => 6,76 s

- pierrejean => 7,06 s

- job75 (contrôle d'erreur) => 4,98 s

- job75 (2ème macro) => 6,25 s

Comme quoi le contrôle d'erreur, pierrejean...

A+
 

job75

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Bonjour le fil, le forum,

J'ai retesté en prenant à chaque fois un nouveau document sur lequel j'ajoutais 1000 feuilles.

Les écarts sont nettement plus faibles :

- Hasco => 5,06 s

- pierrejean => 5,42 s

- job75 (contrôle d'erreur) => 4,51 s

- job75 (2ème macro) => 4,56 s

PS : il semble que la numérotation des feuilles joue un rôle dans la rapidité.

A+
 

pierrejean

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Re

Je m'incline Job , je m'incline
Effectivement la gestion d'erreur bien maitrisée est un excellent outil
Si je l'evite c'est precisement que j'ai peur de tomber dans la facilité et d'en arriver comme certains a coller systematiquement un on erreur resume next en tete de macro
par ailleurs la macro que je proposais devrait etre plus rapide avec

Code:
Public Sub test()
Application.DisplayAlerts = False
For x = Sheets.Count To 2 Step -1
Sheets(x).Delete
Next x
Application.DisplayAlerts = True
End Sub

Enfin j'aimerai bien savoir comment tu procedes pour avoir 1000 feuilles (moi j'ai planté Excel bien avant)
 

job75

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Salut pierrejean,

Non, le fait de sortir les Application.DisplayAlerts ne change pratiquement rien => 5,40 s.

Par contre cette macro s'exécute en 4,53 s :

Code:
Sub Test()
t = Timer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
For x = 2 To Sheets.Count
Sheets([COLOR="red"]2[/COLOR]).Delete
Next x
Application.DisplayAlerts = True
MsgBox Timer - t
End Sub

Donc c'est Sheets(2) qui fait la différence, et c'est tout.

Nota : bien voir que la ligne For x = 2 To Sheets.Count s'exécute une seule fois...

Pour ajouter 1000 feuilles j'utilise :

Code:
Sub Ajoute()
Application.ScreenUpdating = False
For i = 1 To 1000
Sheets.Add After:=Sheets(Sheets.Count)
Next
End Sub

A+
 

pierrejean

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Merci Job

Veux-tu tester celle-ci

Code:
Sub test1()
debut = Timer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
While Sheets.Count > 1
Sheets(Sheets.Count).Delete
Wend
MsgBox (Timer - debut)
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : VBA effacement de feuilles

Re

Voila qui est curieux
chez moi ta macro avec on error resume next s'execute en 4,3 secondes , la dernière que j'ai proposée en 2,36 secondes
fichier joint au cas ou d'autres machines pourraient tester
 

Pièces jointes

  • efface_feuilles.zip
    127.8 KB · Affichages: 42

Discussions similaires

Réponses
29
Affichages
1 K
Réponses
4
Affichages
332
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…