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:confused:
 
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
 

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

Statistiques des forums

Discussions
313 344
Messages
2 097 337
Membres
106 916
dernier inscrit
Soltani mohamed