Vérifier la présence de listes déroulantes

papajer

XLDnaute Nouveau
Bonjour,

Je souhaiterais réaliser une macro pour contrôler si ma feuille contient des cellules avec des listes déroulantes de manière à les effacer ou les garder selon le cas.

Code:
Sub TestListe()
Dim Cel As Range
    For Each Cel In Range("A1:BY86")
        If Cel.Validation.Type = 3 Then Cel.Interior.ColorIndex = 1
    Next Cel
End Sub

J'en suis là mais ça ne fonctionne pas.
Je ne comprends pas pourquoi.

Merci de m'aider.
 

chris

XLDnaute Barbatruc
Re : Vérifier la présence de listes déroulantes

Bonjour

Code:
x = Cells.SpecialCells(xlCellTypeAllValidation).Count
renvoie le nombre de cellules de l'onglet avec une validation mais une erreur 1004 si 0 dont à gérer avec ON ERROR

Code:
    x = 0
    On Error Resume Next
    x = Cells.SpecialCells(xlCellTypeAllValidation).Count
    On Error GoTo 0
    If x = 0 Then ...
 
Dernière édition:

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

Bonsoir,

merci pour votre réponse.

Je ne comprends pas trop où mettre les quelques lignes manquantes.
Pourriez-vous être plus précis ?

Je débute vraiment avec le VBA.

J'ai fait ça pour compter le nombre de cellules avec une liste :
Code:
Sub compte()
Dim x As Integer
    x = Cells.SpecialCells(xlCellTypeAllValidation).Count
    MsgBox x
End Sub

J'obtiens donc le bon nombre.
Toutefois, Excel me compte 5 pour une cellule fusionnée à partir de 5 cellules. J'imagine que c'est normal.

Au final, j'aimerais que les cellules avec liste déroulante se colorient pour que je puisse vérifier si tout est à la bonne place.
 
Dernière édition:

chris

XLDnaute Barbatruc
Re : Vérifier la présence de listes déroulantes

RE

Tu peux aussi le faire sans VBA : sélection de la plage, touche F5, cellules, Validation de données : cela sélectionne les cellules où une validation existe et tu peux agir sur la sélection. (se dépacer avec TAB à intérieur de la sélection)

Pour le VBA tout dépend de ce que tu veux faire concrètement, si c'est colorer les cellules concernées :
Code:
Sub TestListe()
    x = 0
    On Error Resume Next
    x = Cells.SpecialCells(xlCellTypeAllValidation).Count
    On Error GoTo 0
    If x <> 0 Then Cells.SpecialCells(xlCellTypeAllValidation).Interior.ColorIndex = 1
End sub
 

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

J'ai fait ça :
Code:
Sub TestListe()
Dim Cel As Range
    x = 0
    On Error Resume Next
    x = Cells.SpecialCells(xlCellTypeAllValidation).Count
    On Error GoTo 0
    If x = 0 Then
                Exit Sub
             Else
                For Each Cel In Range("A1:BY86")
                If Cel.Validation.Type = 3 Then
                                           Cel.Interior.ColorIndex = 1
                End If
                Next Cel
    End If
End Sub

Cela ne fonctionne toujours pas.
 

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

Bon, naturellement, ta macro fonctionne et elle est parfaite.

Je t'en remercie.

Mais je ne comprends pas pourquoi la mienne ne fonctionne pas.
Peux-tu m'expliquer pourquoi ?
(Que je puisse me débrouiller tout seul la prochaine fois ?)

Merci d'avance.
 

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

Ta macro est vraiment plus simple en fait.
J'avais fait celle-ci pour voir les cellules déverrouillées :
Code:
Sub TestVerrouillage()
Dim Cel As Range
    For Each Cel In Range("A1:BZ86")  
        If Cel.Locked = False Then Cel.Interior.ColorIndex = 4
    Next Cel
End Sub

Je pensais faire la même chose pour les cellules avec validation.
Mais ton système est beaucoup plus simple.
 

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

Ah ben ça !

Oui, je suis sur la bonne feuille et cela me donne une erreur 1004, Erreur définie par l'application ou par l'objet
comme tu as dit.

Code:
Sub TestListe()
Dim Cel As Range
    x = 0
    On Error Resume Next
    x = Cells.SpecialCells(xlCellTypeAllValidation).Count
    On Error GoTo 0
    If x = 0 Then
                Exit Sub
             Else
                For Each Cel In Range("A1:BY86")
                If Cel.Validation.Type = 3 Then
                                           Cel.Interior.ColorIndex = 1
                End If
                Next Cel
    End If
End Sub

Lorsque je clique sur débogage, cette ligne est surlignée :

Code:
                If Cel.Validation.Type = 3 Then
 

chris

XLDnaute Barbatruc
Re : Vérifier la présence de listes déroulantes

Re

Arf j'ai testé sur une colonne homogène !
Oui s'il n'y a pas de validation il faut une gestion d'erreur
Code:
Sub TestListe()
Dim Cel As Range
On Error Resume Next
    For Each Cel In In Range("A1:BY86")
        If Cel.Validation.Type = 3 Then
            GoTo suite
        Else
            Cel.Interior.ColorIndex = 1
        End If
suite:
    Next Cel
End Sub
devrait marcher
 
Dernière édition:

papajer

XLDnaute Nouveau
Re : Vérifier la présence de listes déroulantes

AAAAAAH mais oui !
Bien sûr !!

Putain, quel con.

Oui, le code marche parfaitement. (il faut mettre <> 3 plutôt que = 3 )

Merci beaucoup pour ton aide et tes explications !

Je garde ton premier code, beaucoup plus efficace.

Merci.
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz