Microsoft 365 Validation des données avec VBA

  • Initiateur de la discussion Initiateur de la discussion pat66
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

pat66

XLDnaute Impliqué
Bonjour le forum,

merci pour votre aide,

j'aimerai pouvoir remplacer Formula2:=[C12] par Formula2:="MIN[C12;2]" car je souhaite plafonner à 2 la saisie dans C14,
j'ai essayé bien des solutions mais sans trouver la bonne, quelqu'un aurait-il une idée ?

With Range("C14").Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="0", Formula2:=[C12]
End With

merci beaucoup
 
Solution
Bonjour.
Et ça, ça donnerait quoi ? :
VB:
Sub Ellipse1_Cliquer()
   Dim N As Integer
   N = (Range("C14").Value + 1) Mod (Range("C12").Value + 1)
   Range("C14") = N
   ActiveSheet.Shapes("Ellipse 1").Fill.ForeColor.RGB = Array(RGB(0, 32, 96), RGB(51, 51, 200), RGB(0, 153, 153))(N)
   End Sub
re,

erreur exécution 1004 lorsque j'active la macro à partir de la feuille avec un bouton relié à la macro, sinon à partir de la macro dans VBA cela fonctionne bien ??

Range("C14").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="0", Formula2:="=MIN(C12;2)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
end with
 
Dernière édition:
c'est pas ca l'enregistreur de macro..

1) onglet développeur / Enregistrer macro
2) mettre ta liste de validation à la main
3) arreter l'enregistreur
4) regarder le code ..

mais LA question est:
AVANT de mettre ta liste de validation par macro, est ce que tu peux la mettre à la main (et est ce que ca marche)

sinon.. comme d'hab.. un fichier exemple est plus pratique
 
voilà la macro enregistrée qui ne fonctionne que si je l'active à partir de VBA et pas si je la lie avec une forme
Sub Macro2()
'
' Macro2 Macro
'

'
Range("C14").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateWholeNumber, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:="0", Formula2:="=MIN(C12;2)"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
 
C'est n'importe quoi ton truc...

une liste de validation, c'est une liste de choix
toi. tu veux une liste qui contient soit 0 soit 1 soit 2 donc: Données-validation-liste "0;1;2"

et donc. si tu tapes une valeur autre que ces 3 la, tu as un message d'erreur qui te dit que la valeur ne correspond pas aux restrictions...
donc.. comment veux tu pouvoir taper autre chose??

et pourquoi supprimer et remettre la liste de validation??
et l'alternance... selon quoi?? à quel moment la valeur doit passer de 0 à 1 ou de 1 à 2 ou de 2 à 0 ?
 
re,

oui désolé, je fait mon possible...

Ok je supprime le Delete pour la validation
Chaque clic permet d'alterner la saisie dans C14 (soit 1,soit 2,soit 0), cela doit se faire par macro et non par saisie manuelle
là ou cela se complique, c'est lorsqu'on arrive à 2 (1,2,0) donc au 2e clic dans la macro
il faut vérifier avant de saisir 2 dans C14 que ce 2 <= C12, sinon on reste sur 1 dans C14 avec un msbox d'annulation du fait que cela dépasse le plafond C12

j'espère être explicite
 
je ne comprend toujours pas l'intérêt du test si C14<=C12 (avec C12 = 5.. ce sera toujours vrai...)

VB:
Sub Ellipse1_Cliquer()
    couleur = Array(RGB(0, 32, 96), RGB(51, 51, 200), RGB(0, 153, 153))

    Select Case Range("C14")
        Case 0
            If Range("C14") < Range("C12") Then Range("C14") = 1
        Case 1
            If Range("C14") < Range("C12") Then Range("C14") = 2
        Case 2
            If Range("C14") < Range("C12") Then Range("C14") = 0
    End Select
    
    ActiveSheet.Shapes("Ellipse 1").Fill.ForeColor.RGB = couleur(Range("C14"))
End Sub
 
re,

merci beaucoup, votre solution semble correspondre à mon problème
juste un soucis, lorsque C12 = C14, exemple C12 = 2 et C14 = 2, je ne peut plus alterner 0,1,2, autre exemple si exemple C12 = 1 et C14 = 1, alterner entre 0 et 1

merci
 
Dernière édition:
re, désolé je n'arrive pas à insérer le code pour la visibilité

Sub Ellipse1_Cliquer()
couleur = Array(RGB(0, 32, 96), RGB(51, 51, 200), RGB(0, 153, 153))
Select Case Range("C14")
Case 0
If Range("C14") <= Range("C12") Then Range("C14") = 1
Case 1
If Range("C14") <= Range("C12") Then Range("C14") = 2
Case 2
If Range("C14") <= Range("C12") Then Range("C14") = 0
End Select
ActiveSheet.Shapes("Ellipse 1").Fill.ForeColor.RGB = couleur(Range("C14"))
End Sub

mais en fait cela n'alterne plus lorsque la variable C12 =1 devient inférieur à C14 ou que C14 = 2 est supérieur à C12 = 1 il faudrait que cela alterne entre 0 et 1, puisque C12 est le Plafond (Formula2:="=MIN(C12;2)")

Merci pour votre aide et pardonnez mon ignorance, je pense qu'avec cette modification, cela fonctionnera, mais déjà avec votre proposition je suis sur la bonne voie
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
12
Affichages
1 K
Réponses
2
Affichages
865
Réponses
3
Affichages
904
Réponses
16
Affichages
3 K
Réponses
1
Affichages
1 K
  • Question Question
XL 2016 Validation
Réponses
3
Affichages
497
Retour