-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle =
True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle =
True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle =
True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" wrote in message
news:085d01c4ea95$a26e49a0$
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier lessaisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRefControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexteEnd If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'infomanque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
ThenCellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression ThenControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle >
TrueEnd Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurerque l'info fournie est correcte. Mais une autre méthode
est nécessairepour vérifier que toutes les infos attendues ont été
saisies, ouqu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adressee-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :le controle actif est le bon, celui passé comme 3ème
argument à lafonction Controle, ce qu'on peut vérifier avec un
Debug.PrintActiveControl, mais le curseur n'y clignote pas et rien
ne se produit sion entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survientsur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel jefais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant desannées ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" <verificator@nd.veritas> wrote in message
news:085d01c4ea95$a26e49a0$a301280a@phx.gbl...
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle >
True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" wrote in message
news:085d01c4ea95$a26e49a0$
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier lessaisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRefControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexteEnd If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'infomanque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
ThenCellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression ThenControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle >
TrueEnd Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurerque l'info fournie est correcte. Mais une autre méthode
est nécessairepour vérifier que toutes les infos attendues ont été
saisies, ouqu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adressee-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :le controle actif est le bon, celui passé comme 3ème
argument à lafonction Controle, ce qu'on peut vérifier avec un
Debug.PrintActiveControl, mais le curseur n'y clignote pas et rien
ne se produit sion entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survientsur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel jefais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant desannées ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonjour,
Merci de ta réponse. J'ai trouvé une solution simple qui consiste à
inverser l'ordre du MsgBox et du SetFocus, et tout fonctionne.
Je ne pense pas que ce soit un bug d'Excel 2000, car mon code
fonctionnait avec cette version. Je suppose plutôt que c'est lié à la
combinaison Excel et certaines versions de Windows ou à une des
nombreuses mise à jour de Windows.
En tout cas, le problème est réglé
Merci encore,
docm wrote:Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de
l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" wrote in message
news:085d01c4ea95$a26e49a0$
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier lessaisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRefControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexteEnd If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'infomanque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
ThenCellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression ThenControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle > >
TrueEnd Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurerque l'info fournie est correcte. Mais une autre méthode
est nécessairepour vérifier que toutes les infos attendues ont été
saisies, ouqu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adressee-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :le controle actif est le bon, celui passé comme 3ème
argument à lafonction Controle, ce qu'on peut vérifier avec un
Debug.PrintActiveControl, mais le curseur n'y clignote pas et rien
ne se produit sion entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survientsur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel jefais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant desannées ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonne fin d'année, et merci encore
Michel Gaboly
www.gaboly.com
Bonjour,
Merci de ta réponse. J'ai trouvé une solution simple qui consiste à
inverser l'ordre du MsgBox et du SetFocus, et tout fonctionne.
Je ne pense pas que ce soit un bug d'Excel 2000, car mon code
fonctionnait avec cette version. Je suppose plutôt que c'est lié à la
combinaison Excel et certaines versions de Windows ou à une des
nombreuses mise à jour de Windows.
En tout cas, le problème est réglé
Merci encore,
docm wrote:
Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de
l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" <verificator@nd.veritas> wrote in message
news:085d01c4ea95$a26e49a0$a301280a@phx.gbl...
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.
-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier les
saisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,
Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRef
ControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexte
End If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'info
manque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"
End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
Then
CellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression Then
ControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle > >
True
End Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurer
que l'info fournie est correcte. Mais une autre méthode
est nécessaire
pour vérifier que toutes les infos attendues ont été
saisies, ou
qu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant
2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adresse
e-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :
le controle actif est le bon, celui passé comme 3ème
argument à la
fonction Controle, ce qu'on peut vérifier avec un
Debug.Print
ActiveControl, mais le curseur n'y clignote pas et rien
ne se produit si
on entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survient
sur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel je
fais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.
Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant des
années ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonne fin d'année, et merci encore
Michel Gaboly
www.gaboly.com
Bonjour,
Merci de ta réponse. J'ai trouvé une solution simple qui consiste à
inverser l'ordre du MsgBox et du SetFocus, et tout fonctionne.
Je ne pense pas que ce soit un bug d'Excel 2000, car mon code
fonctionnait avec cette version. Je suppose plutôt que c'est lié à la
combinaison Excel et certaines versions de Windows ou à une des
nombreuses mise à jour de Windows.
En tout cas, le problème est réglé
Merci encore,
docm wrote:Bonjour.
Il semble que ce soit un bug dans Excel 2000.
On suggère comme voie de contournement d'utiliser un Label à la place du
MsgBox.
http://groups.google.ca/groups?q=setfocus+textbox+back+bug+2000+excel&hl=en&
lr=&selm=%23wUiplhkAHA.1708%40tkmsftngp04&rnum=2
Je te suggère d'utiliser OnTime afin d'appeler le setfocus de
l'extérieur du
Userform.
If Not IsMissing(CellActive) Then
CellActive.SetFocus
Set CellActivePourOnTime = CellActive
Application.OnTime Now + TimeValue("00:00:01"),
"SetFocusSurCellActive"
End If
MsgBox TexteMessage, Code, "Info erronée ou manquante"
et dans un module:
Public CellActivePourOnTime As Object
Sub SetFocusSurCellActive()
CellActivePourOnTime.SetFocus
End Sub
Non testé sur Excel 2000.
Amicalement.
Docm.
"verificator" wrote in message
news:085d01c4ea95$a26e49a0$
bonjour Michel,
il me semble que le MsgBox soit la cause du problème.
Chez moi (XL2000, WinXP) si je le supprime, ça marche,
sinon le focus ne revient jamais sur le TextBox à
renseigner.
Ce qui m'étonne, c'est que ça marchait auparavant chez
toi.
Désolé de ne pas faire avancer davantage le schmilblick,
mais te souhaite (à tous d'ailleurs) une joyeuse fin de
Xmas.-----Original Message-----
Re,
Désolé, fausse manip ;-((.
Voici le message complet :
Bonjour à tous,
Depuis des années, j'emploie une fonction qui me permet
de vérifier lessaisies au sein d'un UserForm :
Function Controle(ByVal Expression As Boolean, Optional
ComplTexte,Optional CellActive, _
Optional TexteMessage, Optional VideoInverse As Boolean,
Optional ByRefControleUnique)
Dim Code As Integer
If Not IsMissing(ControleUnique) Then
If ControleUnique Then
Exit Function
End If
End If
' Test si anomalie
If Expression Then
If IsMissing(TexteMessage) Then
TexteMessage = "Vous n'avez pas
indiqué " & ComplTexteEnd If
' MAJ Curseur
If Not IsMissing(CellActive) Then
CellActive.SetFocus
' Emploi d'une icône différente
selon que l'infomanque ou est erronée.
If Len(CellActive) = 0 Then
Code = 48
Else
Code = 64
End If
Else
Code = 48
End If
MsgBox TexteMessage, Code, "Info erronée ou
manquante"End If
' Sélection de l'info à modifier
If VideoInverse And Not IsMissing(CellActive)
ThenCellActive.SelStart = 0
CellActive.SelLength = Len(CellActive)
End If
' MAJ Contrôle déjà effectué
If Not IsMissing(ControleUnique) And Not
Expression ThenControleUnique = True
End If
' Résultat du contrôle
If Expression Then Controle = False Else Controle > >
TrueEnd Function
Le code est commenté ici :
http://www.gaboly.com/VBA/CodeSimplifieControle.html
Pour certains éléments, une procédure événementielle
suffit à s'assurerque l'info fournie est correcte. Mais une autre méthode
est nécessairepour vérifier que toutes les infos attendues ont été
saisies, ouqu'elles sont cohérentes.
Voici par exemple le code associé au bouton OK d'un
UserForm contenant2 TextBox, TNom et TAdresseMail.
Private Sub BOK_Click()
ControleSaisie
ReportDonnees
If Resultat Then
Unload Me
End If
End Sub
Private Sub ControleSaisie()
Resultat = Controle(TNom = "", "le nom.", TNom)
If Resultat Then Resultat = Controle(TAdresseMail
= "", "l'adressee-mail.", TAdresseMail)
End Sub
Private Sub ReportDonnées
' Traitement sans incidence ici
End Sub
Si TNom (ou TAdresseMail pour le second) est égal à ""
le message
"Vous n'avez pas indiqué le nom*."
* (ou l'adresse e-mail pour le second TextBox)
est affiché, et
CellActive.SetFocus
replace en principe le curseur dans TNom (ou
TAdresseMail).
Depuis quelque temps, SetFocus ne fonctionne plus qu'à
moitié ;-(( :le controle actif est le bon, celui passé comme 3ème
argument à lafonction Controle, ce qu'on peut vérifier avec un
Debug.PrintActiveControl, mais le curseur n'y clignote pas et rien
ne se produit sion entre quelque chose au clavier.
Je n'ai pas changé de version d'Excel (2000), et le
problème survientsur plusieurs machines (Win NT et XP, y compris un Mac
sur lequel jefais tourner Excel 2000 sous Win XP Pro grâce à
l'émulateur Virtual PC.Si quelqu'un a une idée de pourquoi ce code qui a
fonctionné pendant desannées ne marche plus, j'en serais ravi.
NB - Le code ci-dessous
Private Sub BOK_Click()
TNom.SetFocus
End Sub
fonctionne parfaitement.
En attendant, joyeuses fêtes à tous, et bonne année.
Michel Gaboly
www.gaboly.com
.
Bonne fin d'année, et merci encore
Michel Gaboly
www.gaboly.com
Heureux d'avoir eu l'occasion d'essayer de te rendre service.
Bonne année.
Merci encore, et bonne année à toi aussi.
Heureux d'avoir eu l'occasion d'essayer de te rendre service.
Bonne année.
Merci encore, et bonne année à toi aussi.
Heureux d'avoir eu l'occasion d'essayer de te rendre service.
Bonne année.
Merci encore, et bonne année à toi aussi.