Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

controle saisie textbox

7 réponses
Avatar
Emcy
bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en majuscule.
=> le probleme est que si je fais un copier/coller, je peux passer à travers
le controle comment faire pour que lorsque je fais un coller dans ma
TextBox, les miniscules soient transformées en majuscule et que s'il y a un
caratère interdis, le copier ne s'execute pas et une message d'erreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/" ou
les chiffre mais rien ne m'empeche actuellement de saisire 303020/05405/ ?

7 réponses

Avatar
Michel Gaboly
Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 2000 ou postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici : http://cjoint.c om/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1), .Offset(.CurrentRegion.Rows.Co unt - 1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate)
' La fonction EstDate, différente de IsDate, est dans le module MO utils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au forma t " & """" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le descr iptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub


bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en majus cule.
=> le probleme est que si je fais un copier/coller, je peux passer à travers
le controle comment faire pour que lorsque je fais un coller dans ma
TextBox, les miniscules soient transformées en majuscule et que s'il y a un
caratère interdis, le copier ne s'execute pas et une message d'erreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/" ou
les chiffre mais rien ne m'empeche actuellement de saisire 303020/05405 / ?





--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Emcy
le probleme est que j'aurais voulu un controle lors de la saisie et non pas
après...

"Michel Gaboly" a écrit dans le message de news:

Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 2000 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1), .Offset(.CurrentRegion.Rows.Count -
1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate)
' La fonction EstDate, différente de IsDate, est dans le module MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au format " &
"""" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub


bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en majuscule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller dans
ma TextBox, les miniscules soient transformées en majuscule et que s'il y
a un caratère interdis, le copier ne s'execute pas et une message d'erreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/"
ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?




--
Cordialement,

Michel Gaboly
www.gaboly.com

Avatar
Michel Gaboly
Re,

Tu pourrais au moins dire si tu as regardé le fichier exemple que j'ai mis sur CJoint, ou si tu t'es contenté de
parcourir ma réponse.


Par ailleurs pour avoir un contrôle lors de la saisie, tu associes le c ontrôle de la date à l'événement BeforeUpdate du
TextBox par exemple, en ajoutant

If Not Resultat then Cancel = True.


A part cela, que penses-tu de cette fonction Controle ?


Elle permet de faire face à peu près à n'importe quelle contrainte à respecter, pour peu qu'on sache l'exprimer sous
forme d'une expression dont le résultat est un booléen.





le probleme est que j'aurais voulu un controle lors de la saisie et non pas
après...

"Michel Gaboly" a écrit dans le message de news:

Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 200 0 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1), .Offset(.CurrentRegion.Rows. Count -
1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate )
' La fonction EstDate, différente de IsDate, est dans le module MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au for mat " &
"""" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub



bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en majus cule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller da ns
ma TextBox, les miniscules soient transformées en majuscule et que s' il y
a un caratère interdis, le copier ne s'execute pas et une message d'e rreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/"
ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?








--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
Emcy
Excuse moi, je n'ai pas completement lu ton message tout à l'heure (j'ai
honte, j'avais pas vu le fichier joint), tu m'as bien donné la solution pour
la première question

par contre quand je rentre comme date 45/12/05, je n'ai pas d'erreur mais ça
c'est facile à modifier
=> ce que je trouve dommage avec cette fonction c'est qu'elle n'est active
que lorsqu'on clic sur le bouton OK ... mais je ne vois pas comment on
purrait faire autrement...


"Michel Gaboly" a écrit dans le message de news:
OEy$
Re,

Tu pourrais au moins dire si tu as regardé le fichier exemple que j'ai mis
sur CJoint, ou si tu t'es contenté de
parcourir ma réponse.


Par ailleurs pour avoir un contrôle lors de la saisie, tu associes le
contrôle de la date à l'événement BeforeUpdate du
TextBox par exemple, en ajoutant

If Not Resultat then Cancel = True.


A part cela, que penses-tu de cette fonction Controle ?


Elle permet de faire face à peu près à n'importe quelle contrainte à
respecter, pour peu qu'on sache l'exprimer sous
forme d'une expression dont le résultat est un booléen.





le probleme est que j'aurais voulu un controle lors de la saisie et non
pas après...

"Michel Gaboly" a écrit dans le message de
news:
Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 2000 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1),
.Offset(.CurrentRegion.Rows.Count - 1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate)
' La fonction EstDate, différente de IsDate, est dans le module
MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au format " &
"""" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub



bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en majuscule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller dans
ma TextBox, les miniscules soient transformées en majuscule et que s'il y
a un caratère interdis, le copier ne s'execute pas et une message d'erreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/"
ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?








--
Cordialement,

Michel Gaboly
www.gaboly.com


Avatar
Michel Gaboly
Le principal, c'est que tu aies trouvé le fichier joint ;-))

J'ai passé un certain temps à le concocter, et je trouvais un peu sur prenant que tu ne l'évoques même pas. Si tu n'avais
pas remarqué son existence, je comprends mieux. :-))


PS - pour Excel, 45/12/05, c'est le 45ème jour de décembre 2005, soit le 14/01/06 ;-))



Excuse moi, je n'ai pas completement lu ton message tout à l'heure (j 'ai
honte, j'avais pas vu le fichier joint), tu m'as bien donné la soluti on pour
la première question

par contre quand je rentre comme date 45/12/05, je n'ai pas d'erreur ma is ça
c'est facile à modifier
=> ce que je trouve dommage avec cette fonction c'est qu'elle n'est a ctive
que lorsqu'on clic sur le bouton OK ... mais je ne vois pas comment on
purrait faire autrement...


"Michel Gaboly" a écrit dans le message de news:
OEy$
Re,

Tu pourrais au moins dire si tu as regardé le fichier exemple que j'a i mis
sur CJoint, ou si tu t'es contenté de
parcourir ma réponse.


Par ailleurs pour avoir un contrôle lors de la saisie, tu associes le
contrôle de la date à l'événement BeforeUpdate du
TextBox par exemple, en ajoutant

If Not Resultat then Cancel = True.


A part cela, que penses-tu de cette fonction Controle ?


Elle permet de faire face à peu près à n'importe quelle contraint e à
respecter, pour peu qu'on sache l'exprimer sous
forme d'une expression dont le résultat est un booléen.






le probleme est que j'aurais voulu un controle lors de la saisie et non
pas après...

"Michel Gaboly" a écrit dans le message de
news:
Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 200 0 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1),
.Offset(.CurrentRegion.Rows.Count - 1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate )
' La fonction EstDate, différente de IsDate, est dans le module
MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au for mat " &
"""" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub




bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en maju scule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller d ans
ma TextBox, les miniscules soient transformées en majuscule et que s 'il y
a un caratère interdis, le copier ne s'execute pas et une message d' erreur
apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/198 0 :
comment faire (j'ai fais un controle en n'autorisant que le caractèr e "/"
ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?











--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Emcy
pour interdir l'utilisation de certains caratères, je crois que j'ai trouvé
une meilleur solution en utilisant les modules de classe
=> le probleme avec ta solution est que tu ne peux pas insérer facilement
des caractères en milieu de chaine car à chaque fois qu'on insere un
caratère interdis, le curseur est mis en fin de chaine.

qu'en penses-tu ?

classeur : http://cjoint.com/?mvrBOyzdQK

Option Explicit
' Met en Majuscule et interdis les caractères $, ?, ( et )

Public WithEvents MaTextBox As MSForms.TextBox

Private ActivationColler As Boolean
Private PressePapierOld As String

Private Sub MaTextBox_BeforeDropOrPaste(ByVal Cancel As
MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As
MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As
MSForms.ReturnEffect, ByVal Shift As Integer)
' gestion du copier/coller

Dim MaChaineTemp As String

PressePapierOld = Data.GetText
MaChaineTemp = PressePapierOld

MaChaineTemp = UCase(MaChaineTemp)
MaChaineTemp = Replace(MaChaineTemp, "$", "")
MaChaineTemp = Replace(MaChaineTemp, "?", "")
MaChaineTemp = Replace(MaChaineTemp, "(", "")
MaChaineTemp = Replace(MaChaineTemp, ")", "")

Data.Clear
Data.SetText MaChaineTemp
Data.PutInClipboard

ActivationColler = True
End Sub

Private Sub MaTextBox_Change()
Dim objPressePapier As New DataObject

If ActivationColler = True Then
objPressePapier.SetText PressePapierOld
objPressePapier.PutInClipboard
ActivationColler = False
End If

End Sub

Private Sub MaTextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' controle la saise des caratères

KeyAscii = Asc(UCase(Chr(KeyAscii))) 'on transforme en majuscule

Select Case KeyAscii
Case Asc("$")
KeyAscii = 8 'efface si caractère "$"
Case Asc("?")
KeyAscii = 8 'efface si caractère "?"
Case Asc("(")
KeyAscii = 8 'efface si caractère "("
Case Asc(")")
KeyAscii = 8 'efface si caractère ")"
End Select
End Sub




"Michel Gaboly" a écrit dans le message de news:

Le principal, c'est que tu aies trouvé le fichier joint ;-))

J'ai passé un certain temps à le concocter, et je trouvais un peu surprenant
que tu ne l'évoques même pas. Si tu n'avais
pas remarqué son existence, je comprends mieux. :-))


PS - pour Excel, 45/12/05, c'est le 45ème jour de décembre 2005, soit le
14/01/06 ;-))



Excuse moi, je n'ai pas completement lu ton message tout à l'heure (j'ai
honte, j'avais pas vu le fichier joint), tu m'as bien donné la solution
pour la première question

par contre quand je rentre comme date 45/12/05, je n'ai pas d'erreur mais
ça c'est facile à modifier
=> ce que je trouve dommage avec cette fonction c'est qu'elle n'est active
que lorsqu'on clic sur le bouton OK ... mais je ne vois pas comment on
purrait faire autrement...


"Michel Gaboly" a écrit dans le message de
news: OEy$
Re,

Tu pourrais au moins dire si tu as regardé le fichier exemple que j'ai mis
sur CJoint, ou si tu t'es contenté de
parcourir ma réponse.


Par ailleurs pour avoir un contrôle lors de la saisie, tu associes le
contrôle de la date à l'événement BeforeUpdate du
TextBox par exemple, en ajoutant

If Not Resultat then Cancel = True.


A part cela, que penses-tu de cette fonction Controle ?


Elle permet de faire face à peu près à n'importe quelle contrainte à
respecter, pour peu qu'on sache l'exprimer sous
forme d'une expression dont le résultat est un booléen.






le probleme est que j'aurais voulu un controle lors de la saisie et non
pas après...

"Michel Gaboly" a écrit dans le message de
news:
Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 2000 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1),
.Offset(.CurrentRegion.Rows.Count - 1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate)
' La fonction EstDate, différente de IsDate, est dans le module
MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au format " &
"""" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub




bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en
majuscule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller dans
ma TextBox, les miniscules soient transformées en majuscule et que s'il y
a un caratère interdis, le copier ne s'execute pas et une message
d'erreur apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980 :
comment faire (j'ai fais un controle en n'autorisant que le caractère "/"
ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?











--
Cordialement,

Michel Gaboly
www.gaboly.com



Avatar
Clément Marcotte
M'est avis que tu te compliques inutilement la vie. Il y a toujours de la
place pour les solutions pragmatiques, et moins baveuses envers les
utilisateurs, dans la vie. C'est probablement plus simple de mettre un label
à droite avec un exemple de chaîne bien formatée et de faire un test global
à la fin.


"Emcy" a écrit dans le message de news:

pour interdir l'utilisation de certains caratères, je crois que j'ai
trouvé une meilleur solution en utilisant les modules de classe
=> le probleme avec ta solution est que tu ne peux pas insérer facilement
des caractères en milieu de chaine car à chaque fois qu'on insere un
caratère interdis, le curseur est mis en fin de chaine.

qu'en penses-tu ?

classeur : http://cjoint.com/?mvrBOyzdQK

Option Explicit
' Met en Majuscule et interdis les caractères $, ?, ( et )

Public WithEvents MaTextBox As MSForms.TextBox

Private ActivationColler As Boolean
Private PressePapierOld As String

Private Sub MaTextBox_BeforeDropOrPaste(ByVal Cancel As
MSForms.ReturnBoolean, ByVal Action As MSForms.fmAction, ByVal Data As
MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal Effect As
MSForms.ReturnEffect, ByVal Shift As Integer)
' gestion du copier/coller

Dim MaChaineTemp As String

PressePapierOld = Data.GetText
MaChaineTemp = PressePapierOld

MaChaineTemp = UCase(MaChaineTemp)
MaChaineTemp = Replace(MaChaineTemp, "$", "")
MaChaineTemp = Replace(MaChaineTemp, "?", "")
MaChaineTemp = Replace(MaChaineTemp, "(", "")
MaChaineTemp = Replace(MaChaineTemp, ")", "")

Data.Clear
Data.SetText MaChaineTemp
Data.PutInClipboard

ActivationColler = True
End Sub

Private Sub MaTextBox_Change()
Dim objPressePapier As New DataObject

If ActivationColler = True Then
objPressePapier.SetText PressePapierOld
objPressePapier.PutInClipboard
ActivationColler = False
End If

End Sub

Private Sub MaTextBox_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
' controle la saise des caratères

KeyAscii = Asc(UCase(Chr(KeyAscii))) 'on transforme en majuscule

Select Case KeyAscii
Case Asc("$")
KeyAscii = 8 'efface si caractère "$"
Case Asc("?")
KeyAscii = 8 'efface si caractère "?"
Case Asc("(")
KeyAscii = 8 'efface si caractère "("
Case Asc(")")
KeyAscii = 8 'efface si caractère ")"
End Select
End Sub




"Michel Gaboly" a écrit dans le message de
news:
Le principal, c'est que tu aies trouvé le fichier joint ;-))

J'ai passé un certain temps à le concocter, et je trouvais un peu
surprenant que tu ne l'évoques même pas. Si tu n'avais
pas remarqué son existence, je comprends mieux. :-))


PS - pour Excel, 45/12/05, c'est le 45ème jour de décembre 2005, soit le
14/01/06 ;-))



Excuse moi, je n'ai pas completement lu ton message tout à l'heure (j'ai
honte, j'avais pas vu le fichier joint), tu m'as bien donné la solution
pour la première question

par contre quand je rentre comme date 45/12/05, je n'ai pas d'erreur mais
ça c'est facile à modifier
=> ce que je trouve dommage avec cette fonction c'est qu'elle n'est
active que lorsqu'on clic sur le bouton OK ... mais je ne vois pas
comment on purrait faire autrement...


"Michel Gaboly" a écrit dans le message de
news: OEy$
Re,

Tu pourrais au moins dire si tu as regardé le fichier exemple que j'ai
mis sur CJoint, ou si tu t'es contenté de
parcourir ma réponse.


Par ailleurs pour avoir un contrôle lors de la saisie, tu associes le
contrôle de la date à l'événement BeforeUpdate du
TextBox par exemple, en ajoutant

If Not Resultat then Cancel = True.


A part cela, que penses-tu de cette fonction Controle ?


Elle permet de faire face à peu près à n'importe quelle contrainte à
respecter, pour peu qu'on sache l'exprimer sous
forme d'une expression dont le résultat est un booléen.






le probleme est que j'aurais voulu un controle lors de la saisie et non
pas après...

"Michel Gaboly" a écrit dans le message de
news:
Salut Emcy,

Utilise mon outil de contrôle de saisie, la fonction Controle


Présentation :

http://www.gaboly.com/VBA/FonctionControle.html

Code commenté :

http://www.gaboly.com/VBA/CodeCompletControle.html


Pour le premier problème, utilise une succession de Replace Excel 2000 ou
postérieur Win ou Substitute (Excel 97 ou
Excel Mac), pour éliminer les éventuels caractères interdits.


Voici un exemple de code (j'ai mis mon fichier test ici :
http://cjoint.com/?mvlWoYTsfG

Private Sub UserForm_Initialize()
' Détermine la plage qui liste les caractères à remplacer.
With Range("RéfCarInterdits")
Set Ref = Range(.Offset(1),
.Offset(.CurrentRegion.Rows.Count - 1))
End With
End Sub

Private Sub TDescriptif_Change()
Dim c As Range
For Each c In Ref
TDescriptif = Replace(TDescriptif, c, "")
Next
End Sub

Private Sub BAnnuler_Click()
Unload Me
End Sub

Private Sub BOK_Click()
ControleSaisie
If Resultat Then
Me.Hide
ReportDonnees
Unload Me
End If
End Sub

Private Sub ControleSaisie()
Resultat = Controle(TDate = "", "la date de livraison.", TDate)
' La fonction EstDate, différente de IsDate, est dans le module
MOutils
If Resultat Then Resultat = Controle(Not EstDate(TDate), , _
TDate, "La date indiquée est incorrecte. Elle doit être au format "
& """" & "jj/mm/aa.""", True)
If Resultat Then Resultat = Controle(TDescriptif = "", "le
descriptif.")
End Sub

Private Sub ReportDonnees()
' Ton code
End Sub




bonjour,

j'ai deux probleme lié à la saisie d'une TextBox

1er probleme :
Actuellement en utilisant KeyPress, j'interdis la saisie de certains
caractères (ex :"?") et je transforme la saisie de minuscule en
majuscule.
=> le probleme est que si je fais un copier/coller, je peux passer à
travers le controle comment faire pour que lorsque je fais un coller
dans ma TextBox, les miniscules soient transformées en majuscule et que
s'il y a un caratère interdis, le copier ne s'execute pas et une message
d'erreur apparait ?

2eme probleme :
dans une textbox, je voudrais rentrer que des date au format 30/05/1980
: comment faire (j'ai fais un controle en n'autorisant que le caractère
"/" ou les chiffre mais rien ne m'empeche actuellement de saisire
303020/05405/ ?











--
Cordialement,

Michel Gaboly
www.gaboly.com