Comment vérifier le contenu de plusieurs champs d'un formulaire

lepoitevin86 Messages postés 14 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,



Je suis en ACCESS 2007

Dans un formulaire Nommé F_Toiles j'ai 3 champs contrôles "Num_Objet1", "Num_Objet2" et "Num_Objet3". Je veux controler qu'il ne doit pas y avoir la même valeur dans les trois champs, mais les champs "Num_Objet2" et "Num_Objet3" peuvent ne pas être renseignés.

Sur quel evenement faut-il mettre le contrôle et quelle est la syntaxe

Merci de votre aide

3 réponses

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,
    Un exemple de code.
    A vous d'adapter l'action a faire en cas d'egalite de champ.

    Private Sub Num_Objet1_AfterUpdate()
      If Me.Num_Objet1 = Me.Num_Objet2 Then
        MsgBox "Egalite champ 1 et 2"
      ElseIf Me.Num_Objet1 = Me.Num_Objet3 Then
        MsgBox "Egalite champ 1 et 3"
      Else
      End If
    End Sub
    
    Private Sub Num_Objet2_AfterUpdate()
      If Me.Num_Objet2 = Me.Num_Objet1 Then
        MsgBox "Egalite champ 2 et 1"
      ElseIf Me.Num_Objet2 = Me.Num_Objet3 Then
        MsgBox "Egalite champ 2 et 3"
      Else
      End If
    End Sub
    
    Private Sub Num_Objet3_AfterUpdate()
      If Me.Num_Objet3 = Me.Num_Objet1 Then
        MsgBox "Egalite champ 3 et 1"
      ElseIf Me.Num_Objet3 = Me.Num_Objet2 Then
        MsgBox "Egalite champ 3 et 2"
      Else
      End If
    End Sub
    1
    1. lepoitevin86 Messages postés 14 Statut Membre
       
      Merci f894009,

      Le code est bon, j'obtiens bien un message quand 2 champs sont identiques mais malgré tout après avoir répondu ok au message d'erreur, si je passe à l'enregistrement suivant ou si je fais ajout d'enregistrement access ne bloque pas l'utilisateur.

      Sur quel événement faut t'il tester pour valider le formulaire ?

      Merci de ta réponse et surtout très bon reveillon
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Re,

      Comme je l'ai ecrit, a vous d'ajouter le code en fonction de ce que vous voulez faire!!!!
      0
    3. lepoitevin86 Messages postés 14 Statut Membre
       
      Merci f894009,

      Mais ma question reste sans réponse

      Bonne et heureuse année
      0
    4. un_neurone
       
      explique =)
      0
    5. lepoitevin86 Messages postés 14 Statut Membre
       
      Quand ACCESS me renvoie un message d'erreur et que j'ai appuyé sur OK pour corriger un des champs, si je fais l'action de passer à l'enregistrement suivant ou si je fais ajout d'enregistrement ACCESS ne bloque pas l'utilisateur .

      Sur quel événement faut t'il tester pour valider le formulaire ?
      0
  2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    Mais ma question reste sans réponse Non, vous avez la reponse: apres mise a jour tetxbox, vous devez mettre le code approprie apres ou a la place des lignes de msgbox ex: raz de la textbox en defaut et garder le focus sur cette textbox pour resaisir.

    Bon courage
    0
    1. lepoitevin86 Messages postés 14 Statut Membre
       
      Bonjour,
      J'ai bien compris mais pouvez-vous me donner un exemple de code pour effacer la zone et pour garder le focus (je ne connais pas visual basic)

      Merci pour votre aide
      0
  3. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Re,

    Raz textbox:

    Private Sub Num_Objet1_AfterUpdate()
      If Me.Num_Objet1 = Me.Num_Objet2 Then
        MsgBox "Egalite champ 1 et 2"
        Num_Objet1 = ""
      ElseIf Me.Num_Objet1 = Me.Num_Objet3 Then
        MsgBox "Egalite champ 1 et 3"
        Num_Objet1 = ""
      Else
      End If
    End Sub
    
    Private Sub Num_Objet2_AfterUpdate()
      If Me.Num_Objet2 = Me.Num_Objet1 Then
        MsgBox "Egalite champ 2 et 1"
        Num_Objet2 = ""
      ElseIf Me.Num_Objet2 = Me.Num_Objet3 Then
        MsgBox "Egalite champ 2 et 3"
        Num_Objet2 = ""
      Else
      End If
    End Sub
    
    Private Sub Num_Objet3_AfterUpdate()
      If Me.Num_Objet3 = Me.Num_Objet1 Then
        MsgBox "Egalite champ 3 et 1"
        Num_Objet3 = ""
      ElseIf Me.Num_Objet3 = Me.Num_Objet2 Then
        MsgBox "Egalite champ 3 et 2"
        Num_Objet3 = ""
      Else
      End If
    End Sub


    Il faut au moins un controle supplementaire: textbox1 pas vide. Mais je ne sais pas comment est votre fichier, donc je ne sais pas comment vous aider!!
    0
    1. lepoitevin86 Messages postés 14 Statut Membre
       
      Bonjour f894009

      Merci pour le script,

      Il ne me reste plus qu'à positionner le curseur sur le bon contrôle, car si j'ai un doublon sur le 2eme contrôle , j'ai bien le message d'erreur mais après avoir fait [OK] le curseur se positionne sur le 3eme contrôle. J'ai essayé la fonction GetFocus sans résultat.
      Si tu as une idée et un exemple je suis preneur;

      Merci
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
       
      Bonjour,

      A voir, test fait sur la reception du focus:

      Private Sub Num_Objet1_GotFocus()
        If Me.Num_Objet1 = Me.Num_Objet2 Then
          MsgBox "Egalite champ 1 et 2"
          Num_Objet1 = ""
          Num_Objet1.SetFocus
        ElseIf Me.Num_Objet1 = Me.Num_Objet3 Then
          MsgBox "Egalite champ 1 et 3"
          Num_Objet1 = ""
          Num_Objet1.SetFocus
        Else
        End If
      End Sub
      
      Private Sub Num_Objet2_GotFocus()
        If Me.Num_Objet2 = Me.Num_Objet1 Then
          MsgBox "Egalite champ 2 et 1"
          Num_Objet2 = ""
          Num_Objet2.SetFocus
        ElseIf Me.Num_Objet2 = Me.Num_Objet3 Then
          MsgBox "Egalite champ 2 et 3"
          Num_Objet2 = ""
          Forms!formulaire1!Num_Objet2.SetFocus
        Else
        End If
      End Sub
      
      Private Sub Num_Objet3_GotFocus()
        If Me.Num_Objet2 = Me.Num_Objet1 Then
          MsgBox "Egalite champ 2 et 1"
          Num_Objet2 = ""
          Num_Objet2.SetFocus
        ElseIf Me.Num_Objet2 = Me.Num_Objet3 Then
          MsgBox "Egalite champ 2 et 3"
          Num_Objet2 = ""
          Num_Objet2.SetFocus
        Else
        End If
      End Sub
      
      0