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

afficher et supprimer des feuilles

  • Initiateur de la discussion mustapha
  • Date de début
M

mustapha

Guest
C’est la première fois que je participe à ce forum
Je voulais proposer deux macros, l'un pour afficher tous les feuilles masquer et l'autre pour supprimer un nombre déterminer de ces feuille

Merci de me évaluer et critiquer

Mustapha




Sub mfffeuille()
' mffeuille c'est le nom du macro qu'il faut créer dans Excel
For i = 1 To ActiveWorkbook.Sheets.Count
ActiveWorkbook.Sheets(i).Visible = True
Next i

' à personnaliser par l'utilisateur :Touche de raccourci du clavier: Ctrl+l

End Sub





Sub supfffeuille()
For i = ActiveWorkbook.Sheets.Count To 9 Step -1
' le chifrre 9 designe que je veux garder juste 9 feuille et effecer les autres
Sheets(i).Delete
Next i
' à perssonaliser par vous : Touche de raccourci du clavier: Ctrl+d

End Sub
 
M

m.lecxe

Guest
Salut
Ta macro pour effacer les feuilles permet seulement de suprimer les feuilles 10 à sheets.count, elle conserve les 9 premières.
Que faire si tu veux supprimer la seconde et la dernière uniquement.

je te propose ceci (inspirée d'un macro de J Walkenback et à améliorer

Dim Tablo As Variant
'IL RESTE À FAIRE LA GESTION DES ERREURS SI ON COCHE TOUT
Sub SupprimerFeuilles()
Tablo = Array("")
For i = 1 To Sheets.Count
ReDim Preserve Tablo(UBound(Tablo) + 1)
Tablo(UBound(Tablo)) = Sheets(i).Name
Next i
ufCaption = "Quel(s) onglet(s) voulez-vous supprimer?"
UB = UBound(Tablo)
Application.VBE.MainWindow.Visible = False
Set ufTemp = Nothing
Set ufTemp = ThisWorkbook.VBProject.VBComponents.Add(3)
With ufTemp
.properties("Caption") = ufCaption
.properties("Width") = 300
.properties("Height") = 30 * (UB + 2)
End With
For i = 1 To UB
Set newButton = ufTemp.Designer.Controls.Add("forms.CheckBox.1", "cb" & i)
With newButton
.Caption = Tablo(i): .Left = 20: .Top = 10 + 30 * (i - 1): .Width = 250
End With
Next
Set NewComButton = ufTemp.Designer.Controls _
.Add("forms.CommandButton.1", "BtnAnnuler") 'Création du bouton Annuler
With NewComButton
.Caption = "Annuler": .Left = 20: .Top = 30 * (UB - 1) + 50: .ForeColor = &HFF&
With .Font
.Bold = -1: .Name = "Arial": .Size = 12
End With
End With
With ufTemp.CodeModule 'Ajout de code au bouton Annuler
Line = .CountOfLines
.InsertLines Line + 1, "Sub BtnAnnuler_Click()"
.InsertLines Line + 2, "Unload Me"
.InsertLines Line + 8, "End Sub"
End With
Set NewComButton = ufTemp.Designer.Controls.Add("forms.CommandButton.1", "BtnOK") ''Création du bouton Valider
With NewComButton
.Caption = "Valider": .Left = 190: .Top = 30 * (UB - 1) + 50: .ForeColor = &H4000&
With .Font
.Bold = -1: .Name = "Arial": .Size = 12
End With
End With
With ufTemp.CodeModule
Line = .CountOfLines 'Ajout de code au bouton OK
.InsertLines Line + 1, "Sub BtnOK_Click()"
.InsertLines Line + 2, "Application.DisplayAlerts = False"
.InsertLines Line + 3, "For i = 1 To " & UB
.InsertLines Line + 4, " If Controls(""cb"" & i).Value Then Sheets(Controls(""cb"" & i).Caption).Delete"
.InsertLines Line + 5, "Next i"
.InsertLines Line + 6, "Application.DisplayAlerts = True"
.InsertLines Line + 7, "Unload me"
'.InsertLines Line + 8, "Application.VBE.CommandBars.FindControl(Id:=106).Execute" 'je ne sais pas si ça fonctionne sur PC
.InsertLines Line + 9, "End Sub"
End With
VBA.UserForms.Add(ufTemp.Name).Show
ThisWorkbook.VBProject.VBComponents.Remove ufTemp 'Efface le UF
Application.VBE.CommandBars.FindControl(Id:=106).Execute
Set ufTemp = Nothing
End Sub

@+
m.
 
J

Jon

Guest
bonjour


qlques remarques ;-)

lorsque ta première macro affichera, voire masquera tes feuilles, elle plantera si la feuille est protégée. pour arranger simplement, cela tu peux utiliser l'instruction "onerror resume next".

cela ne plante-il pas ? car logiquement tu ne peux avoir toutes les feuilles masquées, il faut qu'une au moins soit visible.


pour la seconde, tu peux utiliser l'instruction application.displayalerts=false pour éviter la boîte de dialogue excel de demande de confirmation de la suppression d'une feuille.


pour les deux, l'instruction application.screenupdating=false désactive la mise à jour de l'écran, ce qui peut faire gagner du temps (puisque excel utilise moins de ressources pour rafraîchir l'affichage).
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…