Supprimer des listes déroulantes dans des cellules vides

Bonjour à tous,

J'ai un petit soucis. Je souhaite faire une fonction qui supprime tous les éléments d'une feuille, sauf les formules. Or dans cette feuille, il y a des listes déroulantes que je souhaite aussi supprimer.

Cas 1 : la cellule contenant la liste déroulante est non vide car l'utilisateur a choisit un des éléments de la liste déroulante : la macro supprime bien tout, même la liste déroulante.

Cas 2: La cellule contenant la liste déroulante est vide car l'utilisateur n'a pas choisit un des éléments de la liste déroulante : la macro ne supprime pas la liste déroulante.

Je souhaite donc que la macro supprime aussi les listes déroulantes du cas 2.

Ci-joint un fichier simplifié pour isoler le problème. Commencez par appuyer sur le bouton "suppression" et vous verrez que les cellules qui étaient vides en colonne A contiennent toujours la liste déroulante

16exemple.xlsm (20.43 Ko)

Bonjour,

Voici une proposition assez radicale (on supprime tout sauf les formules) à essayer :

Sub test()

with activesheet
    for each cell in .usedrange
        if not cell.hasformula then cell.clear
    next cell
end with

end sub

Cdlt,

Hello,

Sinon, peut-être ceci ? :

Sub Macro1()
    Selection.SpecialCells(xlCellTypeConstants, 23).Clear
End Sub

Obtenu en modifiant (quasiment pas) le code obtenu par l'enregistreur de macro en faisant : rechercher et sélectionner / constantes, de l'onglet accueil du ruban.

Salut JoyeuxNoel,

C'est plus efficace en effet ! Clear suffit à supprimer les listes déroulantes ? C'était mon petit doute, pour ça que je le fais en 2 temps (delete puis clear). D'ailleurs, mon code est à corriger...

Oui, j'ai vérifié, ça supprime directement les listes déroulantes

Oui, je viens de tester ! Bien joué !

Bon bah, je vais corriger mon code alors

Je vous remercie pour vos réponses cela fonctionne à merveille!

Pardon j'ai parlé un peu trop vite, la solution de 3GB est trop lente pour des gros fichiers mais fonctionne bien. La solution de Joyeuxnoel ( qui est celle que j'utilise dans le fichier exemple) supprime les listes mais pas quand elles sont vides. L'intérêt est que j'ai à traiter des dizaine de milliers de ligne, et qu'avec un bouton clear je peux réimporter un fichier dans mon fichier macro pour à nouveau traiter des lignes. Mais si j'utilise la solution de Joyeuxnoel, toutes les cellules avec les listes déroulantes qui étaient vides lors du clear auront encore la liste déroulante, et mon fichier à vide fera 7mb au lieu de 114ko.

Voici un nouvel essai moins lent je pense :

Sub test()

dim rclean as range

with activesheet
    for each cell in .usedrange
        if not cell.hasformula then 
            if rclean is nothing then set rclean = cell
            set rclean = union(rclean, cell)
        end if
    next cell
end with

if not rclean is nothing then rclean.clear

end sub

Edit : Et pouvez-vous essayer en remplaçant le 23 de la solution de JoyeuxNoel par -8330 ou -4147 ou 27 ?

Cdlt,

Ah effectivement, je n'avais pas pensé à vérifier si ça le faisait aussi quand la cellule était vide.

Heureusement, l'enregistreur de macros existe et permet d'effectuer ces actions qui se font autrement en 4 clics ....

Sub Macro1()
    With Selection
    .SpecialCells(xlCellTypeConstants, 23).Clear
    .SpecialCells(xlCellTypeAllValidation).Validation.Delete
End With
End Sub

Sur mon fichier texte, cela fonctionne.

Rechercher des sujets similaires à "supprimer listes deroulantes vides"