La msg se déclenche avant la fin de la saisie de la cellule
bonjour à tous,
me revoilà avec mon problème de msgBox,
L'utilisateur doit saisir la latitude dans une fourchette de valeur. Le séparateur de décimale est le point.
Je voudrais que la msgBox d'erreur s'affiche que quand la saisie de la cellule est terminée. soit que la saisie est arrivée au 10ème caractère, soit l'utilisateur passe à la cellule suivante.
Là, tel que j'ai fait, la msg s'affiche dès le premier chiffre saisi dans la cellule.
on aurait, éventuellement, la possibilité d'afficher les messages que quand on clique sur le bouton d'envoi du formulaire, mais là, je ne sais pas comment "récupérer" les variables pour déclencher l'affichage des msgBox.
merci d'avance de votre aide.
Private Sub TextBoxLatCor_Change()
Dim ValeurLatCor As Byte
TextBoxLatCor.MaxLength = 10 'nb caractères maxi autorisé dans le textbox
ValeurLatCor = Len(TextBoxLatCor)
If ValeurLatCor = 2 Then TextBoxLatCor = TextBoxLatCor & "."
TextBoxLatCor = Replace(TextBoxLatCor, ",", "")
TextBoxLatCor = Replace(TextBoxLatCor, "..", ".") ' évite que l'utilisateur saisisse 2 points
Dim var As Variant
varLatCor = TextBoxLatCor.Value
If Val(varLatCor) > 48.908 Then ' si la variable est supérieure à 48.908 alors VRAI
TextBoxLatCor.ForeColor = vbRed
TextBoxLatCor.BackColor = vbWhite
MsgBox "La valeur de latitude saisie est trop au Nord de **********." & vbCrLf & "La latitude de ****** est comprise entre 48.887 et 48.908."
ElseIf Val(varLatCor) < 48.887 Then ' si la variable est inférieure à 48.887 alors VRAI
TextBoxLatCor.ForeColor = vbRed
TextBoxLatCor.BackColor = vbWhite
MsgBox " La valeur de latitude saisie est trop au Sud de ********." ' & vbCrLf & La latitude de ******** est comprise entre 48.887 et 48.908."
Else ' si c'est dans la plage, affichage des couleurs par défaut
TextBoxLatCor.ForeColor = vbBlack
TextBoxLatCor.BackColor = &H80C0FF ' couleur par défaut
End If
End SubInutile de refaire un sujet sur la même question,on pourrait même dire sur le même projet. En multipliant les fils vous multipliez les interlocuteurs qui n'ont aussi suivi de cohérence...
Sans fichier il est difficile, la plupart du temps impossible d'évaluer une procédure. Parce qu'elle dépend de beaucoup d'éléments relatif aux objets. VBA c'est de la programmation orienté objet (POO) Objet Classeur, Objets feuille, Range, UserForm, Contr^^oles et TOUSSA ont de multiples propriétés. Donc prenez l'habitude de ne pas vous faire prier pour joindre un classeur, peut-être simplifié, mais identique pour l'essentiel à votre classeur de travail.
A+
Bonjour,
Le problème étant différent, j'ai cru bon de faire un nouveau sujet dont le titre est bien en rapport avec le problème rencontré.
J'ai donc repris mon fichier et supprimé un max de lignes de codes et de cellules afin que vous puissiez voir ce qui me pose problème
J'espère que cela sera correct. Le formulaire en question est le frm_Ajouter
Bonjour,
J'ai un gros doute : Essaie de remplacer la ligne d'entête de macro par
Private Sub TextBoxLatCor_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)A
Bonjour
La modification permet de finir de saisir les chiffres et la boite de dialogue s'affiche bien en fin de saisie.
par contre, les limites et mise en forme ne sont plus prises en compte :
- le point séparateur qui ne se met pas.
- la limite à 10 caractères ne fonctionne pas
- le message ne s'affiche pas en entier. il est coupé au saut de ligne.
voici le fichier avec ta proposition. version _02
Sissi la limitation à 10 caractères fonctionne bien quand on rétabli le fonctionnement normal.
D'ailleurs je l'ai supprimé du code et je l'ai mis dans les propriétés du contrôle.
Je t'ai remis un petit bout de macro Change. Voir dans le classeur
Et le message s'affiche bien en entier.
A+
Bonsoir Papicx,
Je rejoins la proposition de Galopin01. Mettre dans la propriété du contrôle le nombre de caractères maximum.
Comme tu indiques des contraintes pour la saisie. Autant les imposer en créant deux de celles-ci.
Soit LatCorMax pour le maximum à ne pas dépasser et LatCorMin pour le minimum requis.
Je mettrais plutôt, vu que le début de la latitude est la même dans les 2 cas, cette dernière dans un label de même couleur de fond que le textbox. Avec, donc 48. En caption dans ce contrôle et il sera repris et rajouté au final si aucune erreur n'est survenu lors des vérifications des entrées du textbox.
Celui-ci sera seulement de 7 caractères.
'Première contrainte
LatCorMax = Right(TextBoxLatCar & "080000", 7- ValeurLatCar)
' Deuxième contrainte
LatCorMin = Right(TextBoxLatCar & "870000", 7- ValeurLatCar)
'Ensuite, il suffit d' utiliser les opérateurs de comparaison < ou > pour vérifier que l'utilisateur reste dans les contraintes imposées.
'Donc passer par Val comme dans ton codeExemple: pour le maximum. Si le 1ier caractère est 9 puis le 2ème c' est 1. L'erreur surviendra par les couleurs du textbox. Car la valeur sera de 9180000.
Au dessus de 9080000 en requis.
re
bonjour
tu nous dit tou ton besoins
le separateur (point)
limite de 10 caractère
peut être même un format particulier
dans ce cas là plutôt que d'attendre le before update ou exit et tout le toutim , fait une recherche avec le pseudo patricT ou patricktoulon et comme argument textbox formatés
Bonsoir à tous.
Tout d'abord un grand merci à vous de votre aide et de vos propositions.
Celle de Galopin fonctionne à merveille et je vais pouvoir la dupliquer sur les autres formulaires où j'en ai besoin.
La solution proposée par X Cellus est intéressante mais, hélas, vu les données que je récupère sont parfois bien au dessus des tolérances des chiffres avant la décimale aussi. j'avais pensé à un truc de ce genre, mais j'ai du me résoudre à chercher d'analyser la valeur entière, décimale incluse.
Je retiens néanmoins le principe.
PatrickT : je vais chercher tes sujets, tâcher de les comprendre, et surtout les mettre au chaud. Je sens que je vais m'en servir sur d'autres champs.
Merci à tous de votre aide.
grâce à vous, je vais bien dormir.