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 10/05/2011, 16h43   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 29
Points : 2
Points : 2
Par défaut Validation d'un controle

* Bonjour, *

j'ai un formulaire de saisie contenant un textbox nommé txtsite qui saisit le code de l'ensemble des sites de l'organisation.
je veux m'assurer que:

1. avant la validation, l'application vérifie que le code du site est correcte en le comparant avec la liste des codes existant
2. on a 12 enregistrements pour chaque site

donc, il faut refuser la saisie d'un code qui ne retrouve pas dans la liste des codes et si l'utilisateur essaie de saisie un 13e enregistrement pour un site donné.

* Merci *
Legarraudien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 18h43   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Pourrais-tu préciser quelle version d'Acess tu utilise ?

Pour le contrôle, la solution la plus facile est d'utiliser une liste déroulante branchée sur ta table des codes valides et d'activer la propriété "Limiter à la liste". Avec cela Access va empécher qu'on entre un code qui n'est pas dans la liste et ceux sans aucune ligne de code.

Le contrôle du nombre de ligne est un peu plus difficile. En gros il faut vérifier avant l'insertion si on pas déjà un NOMBRE_MAX de ligne.

Avec toutes les versions tu peux coder cela dans un formulaire avec la version 2010 tu peux mettre cela dans la table elle-même ce qui est plus sécuritaire mais un peu moins simple.

Dans un formulaire, sur l'événement before insert, tu pourrais faire un truc du genre

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
Private Const NB_ENR_MAX As Long = 12
 
Private Function CompterEnr() As Long
    Dim result As Long
 
    Dim r As DAO.Recordset: Set r = Me.RecordsetClone
    If r.RecordCount <> 0 Then
        r.MoveLast
    End If
 
    result = r.RecordCount
 
    Set r = Nothing
 
    CompterEnr = result
End Function
 
Private Sub Form_BeforeInsert(Cancel As Integer)
 
    If CompterEnr() > NB_ENR_MAX Then
        MsgBox "Au maximum " & NB_ENR_MAX & " enr"
        Cancel = CInt(True)
    End If
 
End Sub
Ceci empéchera la création d'un nouvel enr.

On pourrait faire plus éléguant en empéchant l'ajout d'enregistrements si on a atteind le max mais c'est plus compliqué que d'empécher la création d'un nouvel enr.


A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 21h48   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 29
Points : 2
Points : 2
Par défaut version d'access

Merci pour votre prompte réponse.
On utilise la version 2007. je vais essayer ces codes
merci
Legarraudien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 21h54   #4
Invité de passage
 
Inscription : décembre 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 29
Points : 2
Points : 2
je ne sais pas comment lier la fonction au champ txtsite du formulaire. en plus est-ce que cette fonction permettra-elle de vérifier que le code est correcte en le comparant avec la liste des codes existant dans la table tblsite
Legarraudien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2011, 23h44   #5
Invité de passage
 
Inscription : décembre 2007
Messages : 29
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 29
Points : 2
Points : 2
Par défaut precision

ce bout de code permet d'avoir seulement 12 enregistrements alors que je veux avoir plutot 12 enregistrement par site.
Par exemple, j'ai un site nommé Jacmel dont le code est 123; je dois avoir dans la table 12 enregistrements et pour un autre 12 enregistrements et ainsi de suite....

Je vois aussi que vous avez omis de tester si le code saisi existe dans la liste des codes avant de valider

merci
Legarraudien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2011, 22h50   #6
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
Abosulment ce code ne fait pas exactement ce que tu veux c'est une piste de solution a adapter à tes besoins que je ne connais pas en détail.

Il te suffit de modifier la fonction CompterEnr().

Par exemple tu pourrais utiliser la fonction
Code :
1
2
 
DCount("id", "NomTaTable", "CodeSite=" & TonCodeSiteNumerique)
pour compter un certain site au llieu de compter tous les enregistrements.

Pour le contrôle comme je l'avais mentionné en utilisant une liste déroulante couplée à une table de référence au lieu d'une TextBox tu peux éviter d'avoir à faire un contrôle. La liste ne propose QUE des codes valides et empèche qu'on en saisisse des invalides.

Si tu tiens à utiliser un TextBox tu peux faire un truc du genre :
sur le BeforeUpdate de ton champ de saisie

Code :
1
2
3
4
if not CodeSiteValide(me.CodeSite) then
   msgbox "Code site invalide"
   Cancel=cint(true)
end if
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private function CodeSiteValide(prmCode as variant) as boolean
   dim result as boolean:result=false
   dim code as variant
   if not isNull(prmCode) then
      code=dfirst("Code","TaTableDeCodeSite","Code=" & prmCode)
   end if
 
   if isnull(code) then
       'Si l'élément cherché n'existe pas, DFirst() retourne Null
       result=false
     else
       result=true
   end if
 
   CodeSiteValide=result
end function
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h38.


 
 
 
 
Partenaires

Hébergement Web