XL 2010 Un contrôle de saisies psychédélique

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 !

Magic_Doctor

XLDnaute Barbatruc
Bonsoir,

Pour m'amuser, j'ai réalisé ceci pour une application. C'est, en fait, une compilation de plusieurs astuces glanées essentiellement sur ce forum.
Pour ce contrôle de saisies, 3 cas de figure :
1/ la valeur entrée est inférieure à une valeur stipulée. On est averti, et la valeur inférieure stipulée s'impose.
2/ idem pour une valeur supérieure à une valeur stipulée.
3/ on rentre n'importe quoi qui ne soit pas strictement numérique (début d'Alzheimer). On est averti et la dernière valeur valable entrée s'impose.
Et tout ça dans une ambiance Woodstock !
Ma foi, ça marche correctement. En revanche, si – pour un même résultat – on peut vaire plus succinct, je suis preneur.

Enfin, une question. Pour l'entrée de la valeur, je suis obligé, dans le module de feuille, de mettre :
VB:
Application.EnableEvents = False
Sinon, bordel incommensurable précédé d'un terrible message "Número de pila insuficiente" ("Nombre de pile insuffisant").
Pourquoi ce message ?
 

Pièces jointes

Bonjour Magic_Doctor, le forum,

Application.EnableEvents = False désactive les évènements.

Sans cette instruction le macro boucle sans fin : il y a accumulation des End Sub en mémoire sans leur exécution, d'où le message.

Il faut terminer la macro avec Application.EnableEvents = True.

A+
 
Pour ce qui est du psychédélisme perso je n'aime pas trop les clignotements 🙄

Vois le fichier joint, la formule et la MFC en E6 et la macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    With [F6]
        If Not IsNumeric(CStr(.Value)) Then .Select: Exit Sub
        If .Value >= [Mini] And .Value <= [Maxi] Then Exit Sub
        Application.Wait Now + 3 / 86400 'attente de 3 secondes
        .Value = .Value < [Mini], [Mini], IIf(.Value > [Maxi], [Maxi], .Value))
    End With
End Sub
Pas besoin des Application.EnableEvents.

Si l'on veut protéger la formule en E6 on pourra protéger la feuille.
 

Pièces jointes

Fichier (2) si l'on veut contrôler le nombre de décimales :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If IsNumeric([Mini]) Then If Round([Mini], 2) <> [Mini] Then [Mini] = Round([Mini], 2) 'arrondi à 2 décimales
    If IsNumeric([Maxi]) Then If Round([Maxi], 2) <> [Maxi] Then [Maxi] = Round([Maxi], 2) 'arrondi à 2 décimales
    With [F6]
        If Not IsNumeric(CStr(.Value)) Then .Select: Exit Sub
        If Round(.Value, 2) <> .Value Then .Value = Round(.Value, 2) 'arrondi à 2 décimales
        If .Value >= [Mini] And .Value <= [Maxi] Then Exit Sub
        Application.Wait Now + 3 / 86400 'attente de 3 secondes
        .Value = IIf(.Value < [Mini], [Mini], IIf(.Value > [Maxi], [Maxi], .Value))
    End With
End Sub
 

Pièces jointes

- 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
Retour