IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Recherche et filtre avec un dynaset


Sujet :

Access

  1. #1
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut Recherche et filtre avec un dynaset
    Bonjour,

    Je souhaite ecrire un code pour controlé si la valeur saisie par l'utilisateur dans le formulaire n'est pas déja dans la table source. Voici les codes que j'ai essayé et qui ne marchent pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    Private Sub idemp_Exit(Cancel As Integer)
    Dim MaBase As Database
    Dim DynaListe As Object, DynaFiltre As Object
    Set MaBase = CodeDb
    Set DynaListe = MaBase.OpenRecordset("f_emprunteur", dbOpenDynaset)
    DynaListe.Sort = "[idemp] ASC"
    Set DynaListe = DynaListe.OpenRecordset
    Do Until DynaListe.EOF
    Filtre = Me.idemp
    DynaListe.Filter = Filtre
    Set DynaFiltre = DynaListe.OpenRecordset
    DynaFiltre.MoveFirst
        If DynaFiltre.RecordCount >= 1 Then
            Message = "Cliquez sur Oui pour modifier votre saisie " & Chr(10) & Chr(10) & "Cliquez sur Non afin d'être redirigé(e) vers la page précédente et de séléctionner l'emprunteur à l'aide des menus déroulants"
            Réponse = MsgBox(Message, vbYesNo, "Le code emprunteur " & Me.idemp & " est déja dans la base")
            If Réponse = vbYes Then Me.idemp.SetFocus
            If Réponse = vbNo Then
            DoCmd.close
        Else: DynaFiltre.MoveNext
     
            End If
        End If
        DynaFiltre.MoveNext
    Loop
     
     
    End Sub
    Votre aide me serait vraiment précieuse ! C'est la premiere fois que j'utilise des objet recordset je suis vraiment perdu la !
    Merci d'avance !

    edit : cafeine, merci de regarder les règles pour les titres et les balises
    ancien titre : URGENT !!!!! Recherche et filtre avec un dynaset ??????????

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 136
    Points : 163
    Points
    163
    Par défaut
    Salut,

    remarque préliminaire:

    la note "URGENT" et l'absence de balise risque de diminuer considérablement le nb de réponse à ta question.


    Ceci étant je propose 2 pistes:

    1/ verifier la propriété du champ dans la table et mettre au besoin indexé = oui, sans doublons

    2/ dans le formulaire de saisie prévoir eventuellement un masque de saisie si le type de donnée s'y prête, afin d'éviter des similitudes
    (ex 01 04 10 32 02 et 01.04.10.32.02)

  3. #3
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,
    J'ai l'impression qu'il manque le nom du champ à filtrer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre = "NomDuChampAfilter='" & Me.idemp & "'"

  4. #4
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut
    Merci, pour ces réponses mais en faite je ne suis toujours pas éclairé, je fait référence à la table concernée dans (en gras le nom de la table) : "Set DynaListe = MaBase.OpenRecordset("f_emprunteur", dbOpenDynaset)"

    Sinon le champs idemp est bien indexé donc, en cas de doublons, une erreur apparait lorsque l'utilisateur quite le formulaire ou clique ds le sous formulaire mais mon objectif est d'obtenir est de devellopé une application ergonomique (je veu que l'utilisateur ne voit pas qu'il est dans access) je veu donc un messagfe d'erreur des qu'il sort du champs idemp.
    Pour ce qui est du masque de saisie, c'est impossible puisque que c'est un nombre compris entre 0 et 999999999.
    Voila j'essaye de me documenter mais je ne trouve rien qui m'éclaire !

    Merci qd meme a vous

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Je pense que LedZeppII t'a mis sur la voie, mais comme il s'agit d'un nombre, ça donnerait ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Filtre = "idemp=" & Me.idemp
    Cependant, tu te compliques la tâche avec les Recordset. Et je ne vois pas l'intérêt de la boucle Do... Loop.

    Pourquoi ne pas se contenter d'un DLookup ou d'un DCount ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Dim Nb As Long, Titre As String, Message As String, Réponse
     
    Nb = DCount("idemp","f_emprunteur","idemp=" & Me.idemp)
     
    If Nb >= 1 Then
        Titre = "Le code emprunteur " & Me.idemp & " est déjà dans la base"
        Message = "Cliquez sur Oui pour modifier votre saisie " & _
            vbCrLf & vbCrLf & _
            "Cliquez sur Non afin d'être redirigé(e) vers la page précédente " & _
            "et de séléctionner l'emprunteur à l'aide des menus déroulants" 
     
        Réponse = MsgBox(Message, vbYesNo, Titre) 
     
        If Réponse = vbYes Then
            Me.idemp.SetFocus 
        Else
            DoCmd.close 
        EndIf
    Else
        ' le code emprunteur est nouveau    
    End If

  6. #6
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut
    Merci beaucoup !

    Ca marche ! Juste un petit probleme au niveau du DoCmb.Close mais ca doit venir de mes autre controles de saisie !

    Encore merci !

  7. #7
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut
    Je vous embete encore, dsl...

    Mais je fait exactement le meme code pour libemp et la ca ne marche pas ???? Est-ce parce que libemp n'est pas indexé dans la table ?
    Merci d'avance

  8. #8
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut
    Autant pour moi... je devrais reflechir un peu avant de vous saouler !
    libemp est en texte... il suffisait que je lise ce qui vous avez ecrit au dessus ! : "NomDuChampAfilter='" & Me.idemp & "'"

    Voila merci a vous mon probleme est résolu !!!!

  9. #9
    Membre du Club
    Inscrit en
    Avril 2006
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 177
    Points : 55
    Points
    55
    Par défaut
    ReBonjour,

    Je vous redérange, dsl
    Je souhaiterais quitter un formulaire de saisie lorsque la valeur est deja présente dans la base et renvoyer l'utilisateur sur la fiche de consultation existante. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    Private Sub idemp_AfterUpdate() 
    Dim Nb As Long, Titre As String, Message As String, Réponse 
     
    Nb = DCount("idemp", "f_emprunteur", "idemp=" & Me.idemp) 
     
    If Nb >= 1 Then 
    Titre = "Le code emprunteur " & Me.idemp & " est déjà dans la base" 
    Message = "Cliquez sur Oui pour modifier votre saisie " & _ 
    vbCrLf & vbCrLf & _ 
    "Cliquez sur Non afin d'être redirigé(e) vers la page précédente " & _ 
    "et de séléctionner l'emprunteur à l'aide des menus déroulants" 
     
    Réponse = MsgBox(Message, vbYesNo, Titre) 
     
    If Réponse = vbYes Then 
    Me.idemp.SetFocus 
    Else 
    DoCmd.close 
    Dim stDocName As String 
    Dim stLinkCriteria As String 
     
     
    DoCmd.OpenForm "modif_dr_assos", , , "[choixemp] =" & Me.idemp 
     
    End If 
    Else 
    ' le code emprunteur est nouveau 
    End If 
    End Sub
    Le code du début marche, mais lorsque que je veu renvoyer l'utilisateur sur le formulaire avec la valeur qu'il a saisi dans le controle idemp. Le debogueur m'indique "l'expression entrée fait référence à un objet fermé ou supprimé"
    Je n'ai plus de message d'erreur si j'enregistre idemp dans une variable mais ca ne marche pas non plus (access demande de saisir un parametre).

    Merci d'avance pour votre aide précieuse !

  10. #10
    Expert éminent
    Avatar de LedZeppII
    Homme Profil pro
    Maintenance données produits
    Inscrit en
    Décembre 2005
    Messages
    4 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Maintenance données produits
    Secteur : Distribution

    Informations forums :
    Inscription : Décembre 2005
    Messages : 4 485
    Points : 7 759
    Points
    7 759
    Par défaut
    Bonsoir,

    Je pense que c'est parce que tu ferme le formulaire (DoCmd.close) et que plus loin tu utilise Me.idemp. Le formulaire étant fermé Me ne fait plus référence à rien.
    Essaie dans cet ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DoCmd.OpenForm "modif_dr_assos", , , "[choixemp] =" & Me.idemp
    DoCmd.close
    A+

  11. #11
    Membre habitué
    Inscrit en
    Novembre 2005
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 136
    Points : 163
    Points
    163
    Par défaut
    bonjour,



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenForm "modif_dr_assos", , , "[choixemp] =" & Me.idemp 
    DoCmd.close
    il faut peut etre alors preciser le nom du formulaire à fermer sinon il y a un risque de fermer le formulaire qui vient d'etre ouvert ("modif_dr_assos")

    Sinon on peut déclarer "Me.idemp " en statique ou en variable globale pour qu'elle survive à la procédure "idemp_AfterUpdate() "

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Recherche filtré avec CommandButton
    Par nacereddine.mourad dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/02/2014, 09h25
  2. DBgrid avec champs de recherche et filtre
    Par thered dans le forum Composants VCL
    Réponses: 9
    Dernier message: 20/06/2009, 03h19
  3. Moteur de recherche multi critères avec filtre
    Par kina17 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 08/04/2008, 19h33
  4. Recherche de fichiers avec filtre
    Par mimic50 dans le forum MFC
    Réponses: 1
    Dernier message: 24/10/2007, 21h58
  5. Rechercher un crochet avec grep
    Par le mage tophinus dans le forum Linux
    Réponses: 2
    Dernier message: 27/05/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo