Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2011, 16h51   #1
Membre confirmé
 
Avatar de Oliv'83
 
Homme Mon prénom cherche, c'est pas très dur...
Directeur commercial
Inscription : mars 2008
Messages : 356
Détails du profil
Informations personnelles :
Nom : Homme Mon prénom cherche, c'est pas très dur...
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Directeur commercial
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2008
Messages : 356
Points : 216
Points : 216
Par défaut Rédaction d'un test de vérification avec des champs définis

Bonsoir à tous,

J'ai un formulaire pour lequel je souhaiterai vérifier que certains champs soient bien renseignés avant de valider l'inscription.

J'ai trouvé sur le forum la solution suivante par Philippe JOCHMANS :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Sub TestCtrl()
Dim Ctrl As control
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is TextBox Then
            If Ctrl.Value = "" Or IsNull(Ctrl.Value) Then
                MsgBox "Toutes les cases doivent être renseignées", vbOKOnly + vbExclamation, "Sélection"
                Ctrl.SetFocus
                Exit Sub
            End If
        End If
    Next Ctrl
End Sub
Seulement moi je souhaite vérifier seulement une partie des Textbox j'ai donc pensé qu'il fallait mettre :

Code :
    For Each Ctrl In Me.Controls!NomClient or Me.Controls!PrenomClient or Me.Controls![Date début] or Me.Controls![Date fin])
Mais Access n'aime pas du tout ma syntaxe. Je ne vois pas comment rédiger ma liste autrement alors si quelqu'un peut me venir en aide je lui serai reconnaissant.

Bonne soirée

Oliv'
Oliv'83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2011, 17h04   #2
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Puisque tu n'as que 4 ou 5 controls à vérifier, tu pourrais peut etre faire une serie de If...End If non?
comme ceci:
Code :
1
2
3
4
 If isnull(Me!NomClient) Then
  msgbox "Le nom du client.....",vbexclamation,"monAppli"
  exit sub
End if
Faire ça pour les 5 controls; non?
@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 06h48   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 605
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 605
Points : 30 956
Points : 30 956
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Je pense que tu n'as pas compris le principe des collection.

Dans cette ligne
Code :
 For Each Ctrl In Me.Controls
On passe en revu tous les contrôles du formulaire en cours, hors ce que tu écris ici
n'a aucun sens, car tu ne trouves qu'un contrôle.

Par contre ce que tu peux faire c'est jouer sur la propriété Name du contrôle.

Voici un exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Dim Ctrl As Control
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is TextBox Then
            If Ctrl.Name = "NomClient" Or Ctrl.Name = "PrenomClient" Then
                If Ctrl.Value = "" Or IsNull(Ctrl.Value) Then
                    MsgBox "Il manque des informations", vbOKOnly + vbExclamation, "Sélection"
                    Ctrl.SetFocus
                    Exit Sub
                End If
            End If
        End If
    Next Ctrl
Une autre solution plus judicieuse est de créer une fonction où tu passes en paramètre le nom de la zone de texte et le nom du formulaire, et qui renvoie un booléen (de type Vrai Faux).

Il faut tester le résultat de cette fonction par une suite de If, l'avantage si tu as pleins de formulaires tu auras une fonction qui fait tout.


Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/01/2011, 12h34   #4
Membre confirmé
 
Avatar de Oliv'83
 
Homme Mon prénom cherche, c'est pas très dur...
Directeur commercial
Inscription : mars 2008
Messages : 356
Détails du profil
Informations personnelles :
Nom : Homme Mon prénom cherche, c'est pas très dur...
Âge : 42
Localisation : France

Informations professionnelles :
Activité : Directeur commercial
Secteur : Tourisme - Loisirs

Informations forums :
Inscription : mars 2008
Messages : 356
Points : 216
Points : 216
Bonjour Keita, bonjour Philippe,

Merci de vos aides respectives

Keita ta solution ne me convient pas complètement car je ne pourrais pas l'adapter (ou alors avec de fortes contraintes) si un jour j'ai un test sur de nombreux champs à faire. Merci quand même

Philippe, je pense que je vais tenter ta solution.

Citation:
Envoyé par Philippe JOCHMANS Voir le message
Je pense que tu n'as pas compris le principe des collection.

Dans cette ligne
Code :
 For Each Ctrl In Me.Controls
On passe en revu tous les contrôles du formulaire en cours, hors ce que tu écris ici
n'a aucun sens, car tu ne trouves qu'un contrôle.
Je pensais que si on établissait une liste des contrôles à vérifier le passage en revue se faisait au sein de cette liste, du moins je l'espérais...

Citation:
Envoyé par Philippe JOCHMANS Voir le message
Par contre ce que tu peux faire c'est jouer sur la propriété Name du contrôle.
Merci pour cette piste et ton exemple que je vais essayer d'adapter de ce pas.

Citation:
Envoyé par Philippe JOCHMANS Voir le message
Une autre solution plus judicieuse est de créer une fonction où tu passes en paramètre le nom de la zone de texte et le nom du formulaire, et qui renvoie un booléen (de type Vrai Faux).

Il faut tester le résultat de cette fonction par une suite de If, l'avantage si tu as pleins de formulaires tu auras une fonction qui fait tout.
Philippe
Je ne suis pas sur d'être encore "au niveau" pour arriver à ce que tu préconises ma difficulté étant de faire passer le non des champ à contrôler à la fonction.

En tout cas merci beaucoup

Oliv'
Oliv'83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h02   #5
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
bonjour
Dans ce cas ceci devrais suffire;non?
Code :
1
2
3
4
5
6
7
8
9
10
Dim Ctrl As Control
    For Each Ctrl In Me.Controls
        If TypeOf Ctrl Is TextBox Then
            If Ctrl.Value = "" Or IsNull(Ctrl.Value) Then
                    MsgBox "Il manque des informations ici: " & Ctrl.name, vbOKOnly + vbExclamation, "Sélection"
                    Ctrl.SetFocus
                    Exit Sub
            End If
        End If
    Next Ctrl
@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h48.


 
 
 
 
Partenaires

Hébergement Web