VBA : Excel : si liste de valeur
Résolu/Fermé
regglyss
-
30 janv. 2012 à 11:32
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 31 janv. 2012 à 11:43
pilas31 Messages postés 1825 Date d'inscription vendredi 5 septembre 2008 Statut Contributeur Dernière intervention 24 avril 2020 - 31 janv. 2012 à 11:43
A voir également:
- Target.validation.type = 3
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Autofill vba ✓ - Forum Excel
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
8 réponses
f894009
Messages postés
17219
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 janvier 2025
1 712
30 janv. 2012 à 16:09
30 janv. 2012 à 16:09
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
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
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,
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
f894009
Messages postés
17219
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 janvier 2025
1 712
30 janv. 2012 à 17:49
30 janv. 2012 à 17:49
Re,
Je verifie votre code
A+
Je verifie votre code
A+
f894009
Messages postés
17219
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 janvier 2025
1 712
30 janv. 2012 à 21:15
30 janv. 2012 à 21:15
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.
C'est le fait d'utiliser Worksheet_SelectionChange(ByVal Target As Range) qui pose probleme.
Je ne trouve pas de solution pour le moment.
f894009
Messages postés
17219
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 janvier 2025
1 712
31 janv. 2012 à 08:48
31 janv. 2012 à 08:48
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 31/01/2012 à 11:08
Modifié par pilas31 le 31/01/2012 à 11:08
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,
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,
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"
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"
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
Modifié par pilas31 le 31/01/2012 à 11:43
Modifié par pilas31 le 31/01/2012 à 11:43
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...
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...
f894009
Messages postés
17219
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
2 janvier 2025
1 712
31 janv. 2012 à 11:26
31 janv. 2012 à 11:26
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
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
pilas31
Messages postés
1825
Date d'inscription
vendredi 5 septembre 2008
Statut
Contributeur
Dernière intervention
24 avril 2020
644
31 janv. 2012 à 11:43
31 janv. 2012 à 11:43
Merci et A+ sur un autre sujet....