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

VBA Access Discussion :

formulaire recherche et navigation sur tous les enregistrements [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut formulaire recherche et navigation sur tous les enregistrements
    Bonjour.
    J'ai quelques difficultés quand un utilisateur souhaite effectuer une recherche.

    Dans mon formulaire principale, j'ai un bouton recherche qui m'ouvre un "petit" formulaire recherche sous la la forme d'une boite de dialogue. Dans ce formulaire recherche, l'utilisateur entre un champs nom (de la table A) et une date (de la table B). En cliquant sur un bouton d'exécution (code ci-dessous), on tombe sur l'enregistrement désiré:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DoCmd.OpenForm "FJ", , , "[N° dépôt]=" & Me.[N° dépôt] & _
    " And [Date achat] = #" & Format(Me.[Date recherche une feuille FJ], "mm/dd/yyyy") & "#"
    DoCmd.Close acForm, "Recherche FJ"
    Par contre, si je souhaite naviguer entre les enregistrements, je suis limité par rapport à mon filtre appliqué lors de la recherche.
    J'ai donc insérer le code suivant sur les boutons de navigations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'j'efface un éventuel filtre du bouton recherche
    Me.FilterOn = False
    Ça marche mais gros problème, je retourne sur le premier enregistrement au lieu de rester sur celui de la recherche pour passer au suivant.
    J'ai essayer avec bookmark, mais il semblerait que le code ci-dessus (où l'on retire le filtre) détruise le signet.

    Je ne sais plus trop dans quelle direction aller.

    Si on pouvait m'orienter...
    Merci par avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonsoir,

    Intéresses- toi à l'argument OpenArgs lors de l'ouverture avec Docmd.OpenForm comme indiqué dans la discussion ci-joint.

    Il faut après appliquer le filtre à l'ouverture du formulaire appelé en utilisant la propriété Me.Filter avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.Filter =  "[N° dépôt]=" & ArgN°1 & " And [Date achat] = #" & ArgN°2 & "#"
    Me.FilterOn = True
    Me.Requery
    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  3. #3
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour cinkiem_as,

    Tu pourrais faire ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenForm "FJ", , , , , ,Me.[N° dépôt] & ";" & Format(Me.[Date recherche une feuille FJ], "mm/dd/yyyy")
    DoCmd.Close acForm, "Recherche FJ"
    C'est à dire passer tes critères dans le OpenArgs séparé par le ; pour le récupérer dans ton formulaire.
    Puis:
    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
    Private Sub Form_Load()
     
        Dim rst As DAO.Recordset
        Dim strCriteria As String
        Dim vaFiltre As Variant
        'Ici on récupère le OpenArgs
        vaFiltre = Me.OpenArgs
        'Ici on le divise
        vaFiltre = Split(vaFiltre, ";")
        'On fabrique le filtre, le nombre de colonne commence à 0
        strCriteria = "[N° dépôt]=" & vaFiltre(0) & " And [Date achat]=#" & vaFiltre(1) & "#"
        'On se rend au bon record
        Set rst = Me.RecordsetClone
        rst.FindFirst strCriteria
        'Si jamais innexistant on averti et on continu
        If rst.NoMatch Then
            MsgBox "Aucune entrée correspondante"
            Set rst = Nothing
            Exit Sub
        Else
            'Si trouvé on se rend au bon record
            Me.Bookmark = rst.Bookmark
        End If
     
        Set rst = Nothing
     
     
    End Sub
    Dans mon exemple j'ai supposé que le premier champ était numérique et le second date. Si ce n'est pas le cas tu devras adapter pour que ça fonctionne. De cette manière tu vas te positionner sur le bon record et si tu cliques sur suivant tu vas aller au suivant.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  4. #4
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Oupssss,

    madefemere je crois qu'on répondait en même temps!

    En tout cas on a le même point de départ.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Bonjour et merci madefemere et Robert1957 pour votre rapidité.
    Je vais tester le fonctionnement.
    je vous tiens au jus.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Re,

    Mon premier champs est bien numérique (en faite, c'est une liste déroulante où figure [N° dépôt] en caché sur la 1ère colonne et [Nom] en visible sur la 2ième colonne) et mon second champs est bien une date.

    En appliquant le code que tu m'as donné Robert1957 , j'ai une erreur d'execution '9': l'indice n'appartient pas à la sélection.
    la ligne surlignée est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        strCriteria = "[N° dépôt]=" & vaFiltre(0) & " And [Date achat]=#" & vaFiltre(1) & "#"
    Mais je n'arrive pas à résoudre cette erreur d'exécution. :(

  7. #7
    Membre expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 873
    Points : 3 459
    Points
    3 459
    Par défaut
    Bonjour cinkiem_as,

    Insère un Debug.print me.OpenArgs à la ligne 6 pour voir ce que tu as comme OpenArgs. Tu devrais avoir "9;25-03-2014" si ce n'est pas le cas c'est un problème dans la première commande.

    Bonne journée
    Ce qui se conçoit bien s’énonce clairement et les mots pour le dire arrivent aisément. Nicolas Boileau
    Si tout est OK, n'oubliez pas de cliquer sur

  8. #8
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Bonjour Robert1957, bonjour madefemere.

    En fait, c'est bon, le code fonctionne.

    Mais c'est au niveau de l'utilisation que ça bloque. En effet, si j'ouvre le formulaire [FJ] à partir du formulaire de recherche pas de problème.
    Mais si on ouvre le formulaire FJ sans passer par le formulaire, c'est là que ça coince!
    J'ai d'abord eu 'Erreur d'exécution 94': utilisation incorrecte de null (forcément).

    J'ai essayé de résoudre ce problème en modifiant le split comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vaFiltre = Split(Nz(vaFiltre, ";"),0)
    Et c'est là qu'intervient mon Erreur d'exécution dont je parle sur mon post précédent.

    Je pense que je dois mal gérer le null. Mais comment faire?
    (sachant que l'ouverture doit se faire sur un nouvel enregistrement mais que je ne peux pas mettre 'Entrée données' à oui, cela bloquerait le formulaire de recherche)

    Merci par avance et bonne journée!!

  9. #9
    Expert éminent

    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    3 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 840
    Points : 7 974
    Points
    7 974
    Par défaut
    Bonjour,

    Il faut que tu vérifies si ton formulaire principal est "loadé" avant l'exécution du code. J'imagine avec un code du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (CurrentProject.AllForms("TonformulairePrincipal").IsLoaded) Then
    Bonne continuation
    Mandresy
    "Je ne sais qu'une chose, c'est que je ne sais rien" Socrate

    N'oublions pas de mettre quand on a trouvé notre bonheur. Soyons sympa pour les futurs heureux.

    Merci, c'est toujours sympa de recevoir des de votre part

  10. #10
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 16
    Points
    16
    Par défaut
    Je viens juste de voir ton message madefemere.

    Entre temps j'ai trouvé une solution (qui me parait peut orthodoxe!): la gestion d'erreur.
    Voici mon code au final:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Form_Load()
    On Error GoTo GestionErreur
    ------
    ma procédure
    -----
    GestionErreur:
    If Err.Number = 94 Then
    DoCmd.GoToRecord , , acNewRec
    End If
     
    End Sub
    Et là ça marche!!

    Par contre, je trouve ça moyen comme pratique, je vais examiner ta proposition madefemere.

    En tout cas, merci Robert1957, merci madefemere.
    Vous m'avez bien aidé!!!

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

Discussions similaires

  1. [AC-2010] Rechercher un enregistrement sur tous les champs
    Par Goose- dans le forum IHM
    Réponses: 4
    Dernier message: 08/11/2012, 15h10
  2. Filtres successifs sur tous les enregistrements
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/10/2010, 18h28
  3. [MySQL] Une requête qui ne marche pas sur tous les enregistrements
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2010, 13h20
  4. Réponses: 3
    Dernier message: 26/06/2008, 13h47
  5. Recherche sur tous les fichiers d'un projet
    Par Kaorichan dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 28/04/2005, 11h28

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