VBA : Excel : si liste de valeur

Résolu
regglyss -  
pilas31 Messages postés 1878 Statut Contributeur -
Bonjour à tous,
je suis Newbie en VBA.
J'ai trouvé sur le Net une macro qui permet d'ouvrir automatiquement les listes de valeurs d'une cellule. Mon problème, c'est que j'ai une centaine de cellule avec liste de valeurs...
Il existerait un bout de code qui dirait si la cellule est une liste de valeur ?
Merci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If target.address = "liste de valeur" Then 
     SendKeys "%{down}"
  End If
End Sub


<config>Windows XP / Safari 535.7</config>

8 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Comment vérifier si une liste de validation existe dans une cellule ?
    [haut]
    auteur : SilkyRoad
    La vérification est effectuée sur la feuille active:

    Vba

    Sub Test()
    'Vérifie si la cellule A1 contient une liste de validation.
    MsgBox ValidationExiste(Range("B1"))
    End Sub

    Function ValidationExiste(Cell As Range) As Boolean
    Dim Cible As Range

    On Error Resume Next
    'Définit toutes les cellules contenant une liste de validation dans la feuille active.
    Set Cible = ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo 0

    If Not Cible Is Nothing Then
    If Not Intersect(Cible, Cell) Is Nothing Then
    ValidationExiste = True
    Else
    ValidationExiste = False
    End If
    Else
    ValidationExiste = False
    End If
    End Function

    Provient du site Developpez.com
    Sommaire > Les cellules > Les listes de validation

    Bonne suite
    0
  2. regglyss
     
    Bonjour,
    J'ai adapté le code que vous m'avez envoyé.
    Il a bien le fonctionnement attendu pour les cellules avec Liste, le problème, c'est qu'il a le même comportement pour les cellules sans listes... C'est à dire que dans le cas de cellules normales, la macro ouvre une liste de valeur qui ne contient aucune valeur !
    C'est moi qui me suis planté dans l'adaptation du code ???
    merci,

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If ValidationExiste(Range(Target.Address)) = True Then
         SendKeys "%{down}"
      End If
    End Sub
    
    
    Function ValidationExiste(Cell As Range) As Boolean
        Dim Cible As Range
        On Error Resume Next
        Set Cible = ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation)
        On Error GoTo 0
        If Not Cible Is Nothing Then
            If Not Intersect(Cible, Cell) Is Nothing Then
                ValidationExiste = True
            Else
                ValidationExiste = False
            End If
        Else
            ValidationExiste = False
        End If
    End Function
    
    0
    1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,
      Je verifie votre code

      A+
      0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    C'est le fait d'utiliser Worksheet_SelectionChange(ByVal Target As Range) qui pose probleme.
    Je ne trouve pas de solution pour le moment.
    0
  4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Apres quelques recherches et essais (je ne suis pas un pro d'EXCEL), j'ai trouvre une solution qui permet de bloquer les evenements (Application.EnableEvents ) qui posaient un probleme au niveau de la subroutine Worksheet_SelectionChange

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.EnableEvents = False
    If ValidationExiste(Range(Target.Address)) = True Then
    SendKeys "%{down}"
    End If
    Application.EnableEvents = True
    End Sub

    Function ValidationExiste(Cellule As Range) As Boolean
    Dim Cible As Range
    On Error Resume Next
    Set Cible = ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation)
    On Error GoTo 0
    If Not Cible Is Nothing Then
    If Not Intersect(Cible, Cellule) Is Nothing Then
    ValidationExiste = True
    Else
    ValidationExiste = False
    End If
    Else
    ValidationExiste = False
    End If
    End Function

    Essayez et merci de rendre compte du resultat

    Bonne suite
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. regglyss
     
    Magnifique !
    Une correction de votre post : vous êtes un pro d'excel !
    Merci
    0
  7. pilas31 Messages postés 1878 Statut Contributeur 648
     
    Bonjour regglyss et f894009,

    J'ai aussi testé de mon coté car le sujet est intérressant.
    En effet, f894009 à raison, c'est bien l'instruction :
    ActiveSheet.Cells.SpecialCells(xlCellTypeAllValidation) qui provoque l'appel récurssif de l'événement Worksheet_SelectionChange.
    Donc la solution donnée fonctionne.

    Pour ma part, j'avais trouvé une autre solution que je vous soumet :

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo FIN
    If Target.Validation.Type = 3 Then SendKeys "%{down}"
    FIN:
    End Sub

    Il s'agit d'utiliser la propriété Validation.type de la cellule qui vaut 3 si il s'agit d'une liste.

    A+

    Cordialement,
    0
  8. regglyss
     
    Bonjour,

    Ma foi, ta solution est encore meilleure. 5 lignes pour le même fonctionnement que les 25 proposées. Ça me plait !
    Je me permets une question au passage. A part connaitre le langage comme sa poche, comment faire pour chercher ce genre d'instruction ?

    PS : c'est marrant on peut écrire "comme ca" mais pas "comme sa"
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      Je suis (très très) loin de connaitre tous les objets, les propriétés et méthodes du VBA.
      Personnellement, je cherche avec l'explorateur d'objet du vba.
      Là par exemple je me suis demandé si il n'y avait pas une propriété de Range adaptée.
      Donc dans l'explorateur d'objet du clique sur range et tu vois toutes les propriétés et méthodes. Tu découvre la propriété "Validation" dont le nom m'a incité à tester....
      Voilà...
      Bonne continuation...
      0
  9. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour Pilas31
    Merci de votre solution car je n'ai pas penser cette propriete Validation.type de la cellule du fait que je cherchai plutot a bloquer ces evenements parasites. Votre solution est plus simple donc je l'adopterai si besoin et je la recommande a regglyss.

    Merci encore

    Bonne suite
    0
    1. pilas31 Messages postés 1878 Statut Contributeur 648
       
      Merci et A+ sur un autre sujet....
      0