VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Choops

XLDnaute Occasionnel
Bonsoir à toutes et à tous,

je ne comprends pas pourquoi le code suivant m'enlève la petite flèche qui donne accès aux menus déroulants ??

VB:
Private Sub RESET_Click()

    Dim s As Shape
    
    For Each s In ActiveSheet.Shapes
        s.Delete
    Next s

End Sub

Une fois le code exécuté, les cellules qui contiennent les menus déroulants sont pourtant toujours bien paramétrées, mais impossible de faire apparaître la petite flèche à droite des cellules correspondantes !?

Merci d'avance pour vos éclaircissements !
 

MichD

XLDnaute Impliqué
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Bonjour,

Ta procédure pose aussi problème avec les "commentaires" contenus dans les cellules de la feuille.

Utilise plutôt ceci : Worksheets("Feuil1").DrawingObjects.Delete pour supprimer tous les contrôles contenus dans la feuille.
 

klin89

XLDnaute Accro
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Bonsoir à tous,

Essaie ceci :

Code:
.../...
For Each Sh In ActiveSheet.Shapes
  If Sh.AutoShapeType <> msoShapeMixed Then
     Then Sh.Delete
   End If
Next Sh
sinon faire un petit tour dans la fenêtre des variables locales : mode débogage

Klin89
 

Choops

XLDnaute Occasionnel
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Bonjour MichD et klin89,

klin89 ta proposition n'efface rien (et ne génère pas d'erreur de code) donc je ne sais pas comment l'adapter.
MichD, effectivement ActiveSheet.DrawingObjects.Delete a l'air de bien fonctionner mais ça m'efface mes boutons. J'ai essayé de faire avec ce code là mais mon piètre niveau en VBA ne me permet pas de déterminer ce qui génère des erreurs :


VB:
Private Sub RESET_Click()

For Each DrawingObjects In ActiveSheet.DrawingObjects Then
   If DrawingObjects.Name <> "RESET" Then
   DrawingObjects.Delete
   End If
Next DrawingObjects

End Sub
 

MichD

XLDnaute Impliqué
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

| effectivement ActiveSheet.DrawingObjects.Delete a l'air de bien fonctionner mais ça m'efface mes boutons

Tu n'as pas précisé ce que tu veux effacer. Quels sont ces contrôles ? Ma ligne de code fait seulement ce que la petite procédure devait faire, c'est-à-dire supprimer tous les objets dans la feuille. Sauf que ta procédure affecte les listes déroulantes et les commentaires de la feuille de calcul tandis que la ligne de code ne touche pas à ces objets. À toi de PRÉCISER ce que tu veux supprimer.
'-----------------------------------------
Private Sub RESET_Click()
Dim s As Shape
For Each s In ActiveSheet.Shapes
s.Delete
Next s
End Sub
'-----------------------------------------
 
G

Guest

Guest
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Bonjour le fil,

Choops,

Change le nom de la variable de la boucle For( DrawingObjects est la collection des DrawingObject (sans s) de la feuille). Surtout que ton code est dans le module de la feuille.

Private Sub RESET_Click()

For Each O In ActiveSheet.DrawingObjects Then
If O.Name <> "RESET" Then O.Delete
Next O

End Sub

A+
 

Choops

XLDnaute Occasionnel
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Bonjour MichD, je voudrais supprimer toutes les checkboxes de la feuille active en cliquant sur un bouton comme montré dans Effacement.xlsm attaché en 1er post. Le problème du code en 1er post est que cela m'enlève les flèches des menus déroulants.
Merci d'avance !
 

MichD

XLDnaute Impliqué
Re : VBA : Pourquoi la commande Shape.Delete efface mes listes déroulantes ???

Une autre façon de faire :

Private Sub RESET_Click()
Dim S As Shape
For Each S In ActiveSheet.Shapes
If TypeName(S.OLEFormat.Object) = "CheckBox" Then
S.Delete
End If
Next
End Sub
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 247
Messages
2 086 591
Membres
103 248
dernier inscrit
Happycat