Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

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

  • Contrôle Saisies.xlsm
    27.7 KB · Affichages: 10

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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

  • Contrôle Saisies(1).xlsm
    30.8 KB · Affichages: 1

job75

XLDnaute Barbatruc
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

  • Contrôle Saisies(2).xlsm
    31.2 KB · Affichages: 5

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…