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 :

[Access 2003] ouverture d'un formulaire à partir d'un tableau de résultat


Sujet :

Access

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut [Access 2003] ouverture d'un formulaire à partir d'un tableau de résultat
    Bonjour,

    J'ai un problème avec mon formulaire de recherche.

    Pour recadrer les choses : j'ai un formulaire de recherche basé sur 5 critères.
    Dans le même formulaire, j'ai un sous-formulaire présentant le résultat de ma recherche sous forme de tableau.
    Je souhaiterai en double cliquant sur un enregistrement de mon tableau de résultat ouvrir la fiche descriptive complète de cet enregistrement. Jusque là les lignes de commande fonctionnent.
    Par contre, c'est à ce niveau que je rencontre un problème : je souhaiterai qu'au bas de la fiche que je vais ouvrir sur double-clic, il y ait une barre de défilement me permettant de faire défiler l'ensemble des fiches descriptives correspondant au résultat de ma requête (donc à chaque enregistrement de mon tableau).

    Pour cela j'ai :

    - Sur double clic d'un enregistrement de mon tableau résultat, le code suivant :
    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
    Private Sub Form_DblClick(Cancel As Integer)
           Dim stDocName As String
           Dim stLinkCriteria As String
     
           stLinkCriteria = "[num_element]=" & Me![num_element]
     
           If Me.[type].Value = "Patrimoine industriel" Then
               stDocName = "Patrimoine_Industriel_modifs"
           End If
     
           If Me.[type].Value = "Château / Edifice religieux" Then
               stDocName = "Château / Edifice_religieux_modifs"
           End If
     
           If Me.[type].Value = "Morvan, terre de légende et de croyance" Then
               stDocName = "Morvan, terre de légende et de croyance_modifs"
           End If
     
           DoCmd.OpenForm stDocName, , , stLinkCriteria, , , [num_element]
     
       End Sub
    - Sur l'ouverture de mes trois types de fiches decriptives, le code suivant :
    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
    Private Sub Form_Open(Cancel As Integer)
     
           Dim lng As Long
           Dim rsttmp As Recordset
     
           Set rsttmp = Me.RecordsetClone
     
           ' on obtient le nombre d'enregistrements
           lng = rsttmp.RecordCount
     
           ' on se positionne sur le recordset à l'endroit voulu
           rsttmp.FindFirst ("[num_element]= " & CInt(OpenArgs))
     
           'on affiche dans le form l'enregistrement voulu
           Me.SelTop = rsttmp.AbsolutePosition + 1
     
       End Sub
    Le message d'erreur suivant apparait à nouveau :

    Erreur de compilation :
    Membre de méthode ou de données introuvable.

    Suite au débogage, il m'indique que l'erreur provient de la fonction FindFirst.

    J'ai suivi le conseil de math en vérifiant ma liste de références mais celle-ci est grisée. Il m'est donc impossible de vérifier si les bonnes bibliothèques sont activées.

    Est-ce que quelqu'un aurait une idée pour me venir en aide ?

    Merci t

  2. #2
    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
    Bonjour,

    Il est possible qu'il manque la référence à la bibliiothèque Microsoft DAO 3.6
    Par défaut elle n'est pas référencée.
    De plus comme Recordset est un membre de ADODB et DAO il faut remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim rsttmp As Recordset
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim rsttmp As DAO.Recordset
    Autre chose, dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rsttmp.FindFirst ("[num_element]= " & CInt(OpenArgs))
    il ne faut pas mettre les parenthèses, et CInt n'est pas utile puisque VBA va reconvertir en texte
    (Critère de recherche est de type Sting).

    Bon courage.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Je te remercie pour tes conseils. J'ai effectuer les modifications que tu m'as conseillé.
    Par contre, chose qui va certainement te paraître idiote : comment je peux activer dans la biblbiothèque Microsoft DAO 3.6 étant donné qu'après le débogage, lorsqu'Access m'ouvre mes lignes de code, ma fonction pour accéder à ma biliothèque (Outils / Références) est en grisée ?
    Est-il possible d'activer d'une manière générale cette bibliothèque sans passer par ce chemin ?

    Merci d'avance

  4. #4
    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
    C'est grisé parce que le code est en cours d'exécution.
    Il faut l'arrêter en faisant Exécution->Réinitialiser dans l'éditeur VBA.
    Ensuite Outil->Référence... sera disponible.

    Lorsque le code n'a pas été activé, depuis Access tu appuie sur Alt+F11 pour basculer vers l'Editeur.
    Ensuite Outils->Référence...

    Et Aussi, faire Déboguage->Compiler NomProjet pour vérifier les références manquantes et autres erreurs dans le code.

    Bon courage

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Salut,

    Je te remercie pour tes conseils.
    Je pensais également que le problème venait de ma bibliothèque. J'ai suivi tes instructions mais cela ne fonctionne toujours pas.
    Le débogueur s'arrête toujours sur la fonction Findfirst et le message d'erreur est toujours le même.

    Aurais-tu une autre idée de l'origine du problème ?

  6. #6
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    J’ai un autre message d’erreur qui s’affiche depuis que j’ai enlevé les parenthèses et que j’ai ajouté DAO.recordset.
    Depuis que j’ai ce 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
    Private Sub Form_Open(Cancel As Integer)
     
        Dim lng As Long
        Dim rsttmp As DAO.Recordset
     
        Set rsttmp = Me.RecordsetClone
     
        ' on obtient le nombre d'enregistrements
        lng = rsttmp.RecordCount
     
        ' on se positionne sur le recordset à l'endroit voulu
        rsttmp.FindFirst ("[num_element]= " & CInt(OpenArgs))
     
        'on affiche dans le form l'enregistrement voulu
        Me.SelTop = rsttmp.AbsolutePosition + 1
     
    End Sub
    Ce message d’erreur apparaît :

    Erreur d’exécution ‘94’
    Utilisation incorrecte de Null.

    Je ne comprends plus rien. Est-ce quelqu’un pourrait m’aider ?

    Merci.

  7. #7
    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
    Bonjour,
    Essaie comme ça:
    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
    Private Sub Form_Open(Cancel As Integer)
    
        Dim lng As Long, strFindCriteria as String
        Dim rsttmp As DAO.Recordset
        
        Set rsttmp = Me.RecordsetClone
        
        ' on obtient le nombre d'enregistrements
        lng = rsttmp.RecordCount
        
        ' on se positionne sur le recordset à l'endroit voulu
        If Not IsNull(OpenArgs) Then
           strFindCriteria = "[num_element]= " & OpenArgs
           rsttmp.FindFirst strFindCriteria
        
           'on affiche dans le form l'enregistrement voulu
           Me.SelTop = rsttmp.AbsolutePosition + 1
        End If
    
    End Sub
    Bon courage

  8. #8
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Merci encore pour ton aide mais dela ne fonctionne pas.
    La fiche correspondant à l'enregistrement sur lequel je double clic s'ouvre mais, la barre de défilement reste à 1 sans avoir la possibilité de faire défiler les autres fiches de mon résultat.

    Aurais-tu une autre proposition ?

  9. #9
    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
    Est-ce que tu n'aurais pas "1 enregistrement sur 1 filtré" ?

    Dans le code de Form_DblClick tu ouvre un formulaire filtré sur [num_element].
    Si il n'y a a pas de doublons sur [num_element] le formulaire filtré ne montre qu'un enregistrement.

    Je pense que tu devrais ouvrir ton formulaire sans critère de filtre.

    Bon courage

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Pour obtenir mon tableau de résultat, j'utilise un filtre dont 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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub Commande20_Click()
     On Error Resume Next
    Dim strFiltre As String
     
     
    ' Initialisation du filtre
    strFiltre = ""
     
    'Filtre sur le departement
    If Not IsNull(Me.cmddept) Then
       strFiltre = "([nom_dept]='" & Me.cmddept.Column(1) & "')"
    End If
     
    'Filtre sur le canton
    If Not IsNull(Me.cmdcanton) Then
       If strFiltre <> "" Then strFiltre = strFiltre & " AND "
       strFiltre = strFiltre & "([chef_lieu]='" & Me.cmdcanton.Column(1) & "')"
    End If
     
    'Filtre sur la commune
    If Not IsNull(Me.cmdcommune) Then
       If strFiltre <> "" Then strFiltre = strFiltre & " AND "
       strFiltre = strFiltre & "([nom_commune]='" & Me.cmdcommune.Column(1) & "')"
    End If
     
    'Filtre sur le type
    If Not IsNull(Me.cmdtype) Then
       If strFiltre <> "" Then strFiltre = strFiltre & " AND "
       strFiltre = strFiltre & "([type]='" & Me.cmdtype & "')"
    End If
     
    'Filtre sur le nom
    If Not IsNull(Me.cmdnom) Then
       If strFiltre <> "" Then strFiltre = strFiltre & " AND "
       strFiltre = strFiltre & "([nom]='" & Me.cmdnom.Column(1) & "')"
    End If
     
    ' Afficher le resultat
    Me.lblSQL.Caption = strFiltre
     
     
    'Filtrer le sous-formulaire
    With Me.resultat.Form
       .Filter = strFiltre
       .FilterOn = True
    End With
    End Sub

    Par contre, pour ouvrir sur Dbl click la fiche descriptive correspondant à un enregistrement de mon tableau j'utilise le code suivant :

    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
    Private Sub Form_DblClick(Cancel As Integer)
        Dim stDocName As String
        Dim stLinkCriteria As String
     
        stLinkCriteria = "[num_element]=" & Me![num_element]
     
        If Me.[type].Value = "Patrimoine industriel" Then
            stDocName = "Patrimoine_Industriel_modifs"
        End If
     
        If Me.[type].Value = "Château / Edifice religieux" Then
            stDocName = "Château / Edifice_religieux_modifs"
        End If
     
        If Me.[type].Value = "Morvan, terre de légende et de croyance" Then
            stDocName = "Morvan, terre de légende et de croyance_modifs"
        End If
     
        DoCmd.OpenForm stDocName, , , stLinkCriteria
     
    End Sub
    Je suis débutante (pas vraiment douée!) en Vba et ne vois pas d'où vient l'erreur. Pourrais-tu, à partir de ce que tu viens de me donner comme explication, me corriger mon code s'il te plait ? merci

  11. #11
    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
    Rien à dire sur la première partie. C'est un formulaire de sélection qui affiche les résultats dans un sous-formulaire.

    La deuxième partie est je suppose une partie du code du sous-formulaire.
    Il choisi parmi trois formulaires, lequel ouvrir.
    Mais il l'ouvre filtré à cause de cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Si tu la remplace par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenForm stDocName
    le formulaire sera ouvert avec tous ses enregistrements, et c'est là que le code que tu as placé
    dans les trois formulaires intervient, en se positionnant sur l'enregistrement voulu.

    Bon courage et persévère.

  12. #12
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 16
    Points : 7
    Points
    7
    Par défaut
    Je te remercie encore pour ton aide mais cela ne fonctionne pas...

Discussions similaires

  1. Run time access 2003: ouverture formulaire
    Par cocoda dans le forum Runtime
    Réponses: 4
    Dernier message: 26/06/2008, 15h39
  2. Réponses: 7
    Dernier message: 26/12/2007, 13h36
  3. [Access 2003]dimensionner un sous formulaire?
    Par steeves5 dans le forum Access
    Réponses: 2
    Dernier message: 21/06/2006, 14h05
  4. Réponses: 6
    Dernier message: 14/06/2006, 15h49
  5. Réponses: 9
    Dernier message: 07/10/2004, 19h41

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