Vérifier présence dans liste deroulante

ptityoyo

XLDnaute Nouveau
Bonjour a tous,

Je suis actuellement en cours de recherche pour une formule VBA qui pourrait vérifier la présence d'un choix dans une liste déroulant quelque soit la valeur choisit de cette case.

Par exemple je possède une case déroulant ayant les choix 1, 2, 3, 4, 5 et 6.
Je sélectionne le choix 1.
Mais derrière ma formule détecte qu'il y a la valeur 5 possible dans la liste et change donc la couleur de la cellule F1 par exemple.

Est-ce possible ?

Cordialement,
 

Pièces jointes

  • vérification.xlsx
    8.8 KB · Affichages: 53
  • vérification.xlsx
    8.8 KB · Affichages: 61
  • vérification.xlsx
    8.8 KB · Affichages: 60

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Vérifier présence dans liste deroulante

Bonjour à tous,

un essai ................ d'après ce que j'ai compris

à+
Philippe
 

Pièces jointes

  • 111.xlsx
    11.8 KB · Affichages: 58
  • 111.xlsx
    11.8 KB · Affichages: 64
  • 111.xlsx
    11.8 KB · Affichages: 58

ptityoyo

XLDnaute Nouveau
Re : Vérifier présence dans liste deroulante

Re,

merci pour vos réponse rapide mais je n'ai pas réussi à m'exprimer clairement.
Ci-joint un fichier plus clair avec les fonctions voulue véritablement.


Cdlt
 

Pièces jointes

  • vérification 2.xlsx
    38.8 KB · Affichages: 58

phlaurent55

Nous a quittés en 2020
Repose en paix
Re : Vérifier présence dans liste deroulante

Re- bonjour,


avec ce code:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
Application.ScreenUpdating = False
For i = 1 To 13
ActiveSheet.Shapes("CommandButton" & i).Visible = False
Next i

Select Case [B5]
Case 1
    For i = 1 To 6
    ActiveSheet.Shapes("CommandButton" & i).Visible = True
    Next i
Case 2
    For i = 1 To 9
    ActiveSheet.Shapes("CommandButton" & i).Visible = True
    Next i
Case 3
    For i = 10 To 13
    ActiveSheet.Shapes("CommandButton" & i).Visible = True
    Next i
End Select

Application.ScreenUpdating = True
End If
End Sub

à+
Philippe
 

Pièces jointes

  • 111.xlsm
    45.7 KB · Affichages: 74
  • 111.xlsm
    45.7 KB · Affichages: 59
  • 111.xlsm
    45.7 KB · Affichages: 64

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Bonjour ptityoyo, Marc, Philippe,

Dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B5]) Is Nothing Then Exit Sub
Dim o As Object, n As Variant
For Each o In Me.OLEObjects
  n = Replace(o.Name, "CommandButton", "")
  n = Application.Match(Val(n), Evaluate("liste" & Target), 0)
  o.Object.Enabled = IsNumeric(n)
Next
End Sub
Fichier joint.

A+
 

Pièces jointes

  • Vérification(1).xls
    62.5 KB · Affichages: 62

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Re,

Si les CommandButtons sont bien numérotés de 1 à 13 :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B5]) Is Nothing Then Exit Sub
Dim i As Byte, n As Variant
For i = 1 To 13
  n = Application.Match(i, Evaluate("liste" & Target), 0)
  Me.OLEObjects("CommandButton" & i).Object.Enabled = IsNumeric(n)
Next
End Sub
Fichier (2).

Edit : la propriété Enabled me paraît mieux adaptée que la propriété Visible.

Sinon remplacer Object.Enabled par Visible.

A+
 

Pièces jointes

  • Vérification(2).xls
    62.5 KB · Affichages: 50
Dernière édition:

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Re,

Une solution avec la propriété Visible :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B5]) Is Nothing Then Exit Sub
Dim i As Byte, x As Boolean
Application.ScreenUpdating = False
For i = 1 To 13
  x = IsNumeric(Application.Match(i, Evaluate("liste" & Target), 0))
  With Me.OLEObjects("CommandButton" & i)
    If i > 9 Then .Top = IIf(x, [I3], [I21]).Offset(2 * i - 20).Top
    .Visible = x
  End With
Next
End Sub
Il y a déplacement des boutons 10 11 12 et 13.

Fichier (3).

A+
 

Pièces jointes

  • Vérification(3).xls
    64 KB · Affichages: 55

ptityoyo

XLDnaute Nouveau
Re : Vérifier présence dans liste deroulante

Bonjour Job 75

Merci pour tes réponse permettant de multiples possibilité.J'ai une préférence pour la fonction enable
Cependant, je vois que tu te base par rapport au choix 1. Et lors de mon application cela est difficilement gérable car mon choix deux utilise la fonction "décaler" et est donc non définissable face au choix 1.
Si joint une copie du fichier réel.

Cordialement
 

Pièces jointes

  • ptit_yoyo2.xlsx
    85.3 KB · Affichages: 53
  • ptit_yoyo2.xlsx
    85.3 KB · Affichages: 61
  • ptit_yoyo2.xlsx
    85.3 KB · Affichages: 57

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Re,

A chaque post c'est un nouveau problème, et en plus compliqué.

Quand est-ce que ça s'arrêtera :confused:

Code:
Private Sub Worksheet_Calculate()
Dim o As Object, a, n, liste, t$
For Each o In Me.OLEObjects
  a = Array("B", "D", "F", "H", "J")
  n = Val(Right(o.Name, 1)) - 1
  liste = Evaluate("IF(SUM(B7:" & a(n) & "7)>10,"""",OFFSET(Article,,,MATCH(" & a(n) & "11,N5:N11)))")
  t = Left(o.Name, Len(o.Name) - 1)
  n = Application.Match(t, liste, 0)
  o.Object.Enabled = IsNumeric(n)
Next
End Sub
Nouveau fichier joint.

A+
 

Pièces jointes

  • ptit_yoyo(1).xls
    102 KB · Affichages: 57

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Re,

Deux modifications dans ce fichier (2).

1) Le traitement des boutons "eau" n'était pas bon.

En effet il y avait un espace superflu après "eau" en M11 :rolleyes:

2) Si la liste de validation ne comporte qu'une valeur il faut la traiter différemment :

Code:
Private Sub Worksheet_Calculate()
Dim o As Object, a, n, liste, t$
For Each o In Me.OLEObjects
  a = Array("B", "D", "F", "H", "J")
  n = Val(Right(o.Name, 1)) - 1
  liste = Evaluate("IF(SUM(B7:" & a(n) & "7)>10,"""",OFFSET(Article,,,MATCH(" & a(n) & "11,N5:N11)))")
  t = Left(o.Name, Len(o.Name) - 1)
  If Application.CountA(liste) = 1 Then 'liste avec une seule valeur
    o.Object.Enabled = UCase(t) = UCase(liste)
  Else
    n = Application.Match(t, liste, 0)
    o.Object.Enabled = IsNumeric(n)
  End If
Next
End Sub
A+
 

Pièces jointes

  • ptit_yoyo(2).xls
    104 KB · Affichages: 50

job75

XLDnaute Barbatruc
Re : Vérifier présence dans liste deroulante

Re,

La macro beuguait avec Prix max = 7 en N13.

Fichier (3) avec cette modification :

Code:
If Application.CountA(liste) = 1 And Not IsError(liste) Then 'liste avec une seule valeur
A+
 

Pièces jointes

  • ptit_yoyo(3).xls
    103.5 KB · Affichages: 55

ptityoyo

XLDnaute Nouveau
Re : Vérifier présence dans liste deroulante

Bonjour JOB75, le forum,

Désolé pour ma réponse tardive. Merci pour tes nombreuses solutions malgré mes nombreux problèmes apportés.
Maintenant j'essaye de comprendre ta solution.
Peux-tu me confirmer mes dires voir me corriger si nécessaire.

Private Sub Worksheet_Calculate()
Dim o As Object, a, n, liste, t$ '
'déclaration de variable o avec les objets a,n,liste et t$
For Each o In Me.OLEObjects
a = Array("B", "D", "F", "H", "J") '
'se reporte aux listes d'element, ici les liste déroulantes
n = Val(Right(o.Name, 1)) - 1 '
'valeur des éléments moins 1
liste = Evaluate("IF(SUM(B7:" & a(n) & "7)>10,"""",OFFSET(Article,,,MATCH(" & a(n) & "11,N5:N11)))")
'formule général pour déterminer les possibilité
t = Left(o.Name, Len(o.Name) - 1)
'renvoie un nombre de caractères en partant de la gauche. La syntaxe est Left(Texte, Nombre de caractères).
If Application.CountA(liste) = 1 And Not IsError(liste) Then 'liste avec une seule valeur
o_Object.Enabled = UCase(t) = UCase(liste)
Else
n = Application.Match(t, liste, 0)
o_Object.Enabled = IsNumeric(n)
End If
Next
End Sub


Merci


Cordialement
 

Discussions similaires

Réponses
8
Affichages
450
Réponses
7
Affichages
377

Statistiques des forums

Discussions
312 364
Messages
2 087 624
Membres
103 624
dernier inscrit
PhilduMorvan