afficher et supprimer des feuilles

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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.
 
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).
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
7
Affichages
884
Réponses
7
Affichages
1 K
Retour