[RÉSOLU) Macro qui fait bien le boulot mais pas tout à fait

un internaute

XLDnaute Impliqué
Bonjour le forum,
J'ai trouvé cette macro qui supprime bien les boutons qui se trouvent en A1:C1 sur toutes les feuilles des 12 mois de Janvier 2018 à Décembre 2018 mais j'ai une feuille MENU qui se trouve au début du classeur et là aussi j'ai des boutons mais ceux-ci ne doivent pas être supprimés hors ça le fait aussi (normal)
Quelles modifs faut-il apporter à la macro?
Merci pour vos éventuels retours
Cordialement


Code:
Sub supprime_C_Shapes()
Dim nombre As Integer
Dim Ws As Worksheet
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For I = 1 To nombre
Worksheets(I).Unprotect Password:="blabla"
Next I
   Application.ScreenUpdating = False
  AfficherOnglets

Dim Forme As Object
  For Each Ws In Sheets
    For Each Forme In Ws.Shapes
      With Forme
        Select Case .Type
          Case 12
            'ici permet de ne pas supprimer
            'les boutons de la BO Formulaire
          Case Else
            'supprime le reste
            .Delete
        End Select
      End With
    Next Forme
  Next Ws
End Sub
 

un internaute

XLDnaute Impliqué
Bonjour laetitia90 et Ce lien n'existe plus
Effectivement vous avez raison TOUS les deux
Tout fonctionne super bien

Code:
Sub Supprime_C_Shapes()
Dim nombre As Integer
Dim Ws As Worksheet
nombre = ActiveWorkbook.Sheets.Count
Application.ScreenUpdating = False
For I = 1 To nombre
Worksheets(I).Unprotect Password:="blabla"
Next I
   Application.ScreenUpdating = False
  AfficherOnglets

Dim Forme As Object
  For Each Ws In Sheets
  If Ws.Name <> "MENU" Then
    For Each Forme In Ws.Shapes
      With Forme
        Select Case .Type
          Case 12
            'ici permet de ne pas supprimer
            'les boutons de la BO Formulaire
          Case Else
            'supprime le reste
            .Delete
        End Select
      End With
    Next Forme
  End If
  Next Ws
End Sub

Un peu plus compliqué:
Je veux maintenant ne plus supprimer MENU et Janvier 2018

Là ça serait le TOP

En tout un GROS merci à vous deux
A plus
Bien cordialement
 

herve62

XLDnaute Barbatruc
Supporter XLD
Bonjour à tous
Autre méthode écourtée , tu supprimes le for each ws
Donc dans ta boucle après le .count au lieu de For I= 1 tu mets 2 et maintenant 3
Tu peux vérifier en faisant une petite sub à part dans un module que tu lances avec F5 : tu boucles sur le nombre total de 1 à sheets.count ; ensuite tu fais un msgbox "Feuille " & I & "= " & sheets(I).name
comme ça tu controles bien le N° associé au nom
Code:
For I = 3 To nombre ' Si 1= Menu et 2=Janvier
Worksheets(I).Unprotect Password:="blabla"
For Each Forme In sheets(i).Shapes
      With Forme
        Select Case .Type
          Case 12
etc ....
Next Forme
Next I
J'ai testé cela qui fonctionne bien :
Code:
Sub eff()
nombre = ActiveWorkbook.Sheets.Count
For i = 3 To nombre

For Each forme In Sheets(i).Shapes
forme.Delete
Next forme
Next i
End Sub
Info : il y a une règle en Basic qui préconise de mettre tous les DIM en tout début de Sub
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, le forum

Une autre voie (un chouia radicale ;))
VB:
Sub a()
' macro à utiliser avec modération
Dim ws As Worksheet
Sheets("Menu").Visible = False
Sheets("Janvier 2018").Visible = False
For Each ws In Worksheets
    If ws.Visible Then
    ws.DrawingObjects.Delete ' supprime tout type d'objet
    End If
Next ws
Sheets("Menu").Visible = True
Sheets("Janvier 2018").Visible = True
End Sub
 

Discussions similaires

Réponses
29
Affichages
2 K

Membres actuellement en ligne

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 103
dernier inscrit
Maxime@mar