Access problème code VB "If" résultat re
ewan_joey
Messages postés
4
Statut
Membre
-
Sergio63 Messages postés 53 Statut Membre -
Sergio63 Messages postés 53 Statut Membre -
Bonjour, j'ai un problème dans Access 2002 SP3 sous XP. J'ai besoin d'aide pour écrire le code VB associé à la demande ci-après :
En cliquant sur 1 bouton appellé Commande4 dans un formulaire, je veux :
- que la macro1 s'exécute (cette macro1 fait tourner une requête1 de sélection, puis une requête2 qui compte le nombre de flag trouvé dans la requête1)
- ensuite que "If" le résultat de la requête2 est plus petit que 7 "Then" il exécute la macro2, "Else" message d'erreur style Attention c'est plus grand que 7.
C'est assez clair pour moi ce que je dois faire, par contre je ne sais pas écrire du code qui test le résultat de la requête. Bref...A tâton c'est un peu long. Donc merci de votre aide. Mon patron est sur mon dos !
Private Sub Commande4_Click()
HELP HELP HELP
End Sub
En cliquant sur 1 bouton appellé Commande4 dans un formulaire, je veux :
- que la macro1 s'exécute (cette macro1 fait tourner une requête1 de sélection, puis une requête2 qui compte le nombre de flag trouvé dans la requête1)
- ensuite que "If" le résultat de la requête2 est plus petit que 7 "Then" il exécute la macro2, "Else" message d'erreur style Attention c'est plus grand que 7.
C'est assez clair pour moi ce que je dois faire, par contre je ne sais pas écrire du code qui test le résultat de la requête. Bref...A tâton c'est un peu long. Donc merci de votre aide. Mon patron est sur mon dos !
Private Sub Commande4_Click()
HELP HELP HELP
End Sub
A voir également:
- Access problème code VB "If" résultat re
- Code ascii - Guide
- Resultat foot - Télécharger - Vie quotidienne
- Code puk bloqué - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code activation windows 10 - Guide
1 réponse
Bonjour,
Je te propose une solution qui utilise DAO. Personnellement je procède de cette façon mais il y a surement d'autres méthodes.
1) Définir des variables objet pour la base de données et un recordset ...
Dim VO_Base as database
Dim VO_Liste as recordset
... Initialiser la variable Base de données
Set VO_Base = codedb
2) Définir une variable texte qui contiendra le code SQL de la requête ...
Dim V_Requete as string
... Initialiser la variable
V_Requete = "Select ..... from ..... where ..."
3) Initialiser le recordset avec le résultat de la requête
Set VO_Liste= Vo_Base.Openrecordset(V_Requete)
4) Tester le nombre d'enregistrements contenus dans le recordset
If Vo_Liste.recordcount < 7 then
Macro2
Else
Msgbox("Attention c'est plus grand que 7")
Endif
Cordialement
Sergio
Je te propose une solution qui utilise DAO. Personnellement je procède de cette façon mais il y a surement d'autres méthodes.
1) Définir des variables objet pour la base de données et un recordset ...
Dim VO_Base as database
Dim VO_Liste as recordset
... Initialiser la variable Base de données
Set VO_Base = codedb
2) Définir une variable texte qui contiendra le code SQL de la requête ...
Dim V_Requete as string
... Initialiser la variable
V_Requete = "Select ..... from ..... where ..."
3) Initialiser le recordset avec le résultat de la requête
Set VO_Liste= Vo_Base.Openrecordset(V_Requete)
4) Tester le nombre d'enregistrements contenus dans le recordset
If Vo_Liste.recordcount < 7 then
Macro2
Else
Msgbox("Attention c'est plus grand que 7")
Endif
Cordialement
Sergio
Tout d'abord, merci de m'aider à me sortir de cette merde. Sur tous les autres forums on me propose de me démerder tout seul...Bref. Je dois présenter ma base et il y a encore une erreur. Voici où j'en suis (pour info j'ai une table Personnes (nom, prénom, Selecteur1). Selecteur1 fait oui/non quand on le coche ou non. Dans un formulaire, j'ai fait un sous-formulaire de type Formulaires continus avec la table Personnes. Et le personnel de mon bureau flag le Selecteur1 quand ils sont dans la base. Mais je veux que la Macro tourne uniquement s'il n'y a qu'un seul Selecteur1 allumé) :
Private Sub Commande4_Click()
On Error GoTo Err_Commande4_Click
Dim VO_Base As Database
Dim VO_Liste As Recordset
Set VO_Base = CodeDb
Dim V_Requete As String
V_Requete = "SELECT * FROM Personnes WHERE ([Selecteur1] = Oui)"
Set VO_Liste = VO_Base.OpenRecordset(V_Requete)
If VO_Liste.RecordCount < 2 Then
Dim stDocName As String
stDocName = "Macro"
DoCmd.RunMacro stDocName
Else
MsgBox "Attention vous n'êtes pas seul dans la base. Recommencez plus tard !", vbExclamation, ATTENTION
End If
Exit_Commande4_Click:
Exit Sub
Err_Commande4_Click:
MsgBox Err.Description
Resume Exit_Commande4_Click
End Sub
Et voici le message d'erreur : "Trop peu de paramètres. 1 attendu".
Si vous avez encore le courrage d'essayer de décortiquer ce code...je vous en serais très reconnaissant.
Je ne peux malheureusement pas reconstituer le contexte sur mon PC, il faudrait me dire quelle est la ligne de code qui génère cette erreur.
Sergio
Mais maintenant. j'ai enlevé la 2ème ligne : On Error Goto... Et maintenant, l'erreur pointe sur la ligne qui commance par Set VO_Liste.
Private Sub Commande4_Click()
Forms!Table_des_heures!Texte20 = Calendar7.Value
Forms!Table_des_heures!Date_provisoire = Texte20
Dim VO_Base As Database
Dim VO_Liste As Recordset
Set VO_Base = CodeDb
Dim V_Requete As String
V_Requete = "SELECT * FROM Personnes WHERE ([Selecteur1] = Oui)"
Set VO_Liste = VO_Base.OpenRecordset(V_Requete)
If VO_Liste.RecordCount < 2 Then
Dim stDocName As String
stDocName = "Macro"
DoCmd.RunMacro stDocName
Else
MsgBox "Attention vous n'êtes pas seul dans la base. Recommencez plus tard !", vbExclamation, ATTENTION
End If
Exit_Commande4_Click:
Exit Sub
End Sub
Mais je ne vais pas vous embêter plus longtemps. Si vous ne voyez pas le problème, laisser tomber.
Merci.
L'erreur vient du code SQL.
La clause "where" porte sur un champ de type texte, il faut donc encadrer la valeur avec des quotes, essaie comme ça :
V_Requete = "SELECT * FROM Personnes WHERE ([Selecteur1] = 'Oui')"
Ca devrait marcher.
Cordialement
Sergio