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 :

[code VBA]passage de variable pour une requête paramétrée


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut [code VBA]passage de variable pour une requête paramétrée
    J'ai un formulaire avec un groupe d'option et une zone de liste

    Le groupe d'option permet choisir un type de recherche par date, client ou catégorie. La réponse passe par une input box dont la valeur est transmise comme paramètre à une requête.

    La requête sert alors pour le rowsource de la zone de liste.

    j'ai le message d'erreur suivant "erreur 3265 : impossible de trouver l'objet dans la collection correspondant au nom ou à la référence orinale demandée"

    Le déboggeur bloque sur les lignes cmdGestion.Parameters("") = sRponseRequte

    J'avais déjà utilisé ce type de code pour une autre requête et cela fonctionnait suis paumé. si vous voyez le soucis ou un autre moyen de passer la paramètre de la requête
    Merci

    voila 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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
     
    Private Sub CadreOption_AfterUpdate()
        'Procdure de slection des options
     
           'Dclaration des variables de rponse
                Dim sDateMoisTest As String
                Dim vRponseOption As Variant
                Dim sRponseRequte As String
                Dim dRponseRequte As Date
     
            'Dclaration des variables lie  la requte paramtre
                Dim curConn As New ADODB.Connection
                Dim catGestion As New ADOX.Catalog
            'Dim rst As New ADODB.Recordset
                Dim cmdGestion As New ADODB.Command
                Dim vRequteGestion As Variant
     
                Dim objRequeryGestionEnregistrement As Object
                Dim dbs As Object
     
            'Dfinition de la connection
                Set dbs = Application.CurrentProject
     
                Set curConn = CurrentProject.Connection
     
                catGestion.ActiveConnection = curConn
     
     
        'Choix en fonction de l'option
         With CodeContextObject
         'selection Date
             If .[CadreOption] = 2 Then
     
                    'Demande de la date et test de vRponseOption
                        Do
                            vRponseOption = InputBox("Entrez la date que vous recherchez sous la forme jj/mm/aaaa", "Date")
                            sDateMoisTest = vRponseOption
     
                                If vRponseOption = "" Then
                                            Exit Sub
                                End If
     
                        Loop Until TestMois(sDateMoisTest) = False
     
                       dRponseRequte = Format(sDateMoisTest, "mm/dd/yyyy")
     
                     'passage de la variable date demande vers la requte Gestion Date Requte
     
                        Set objRequery = Application.CurrentData.AllQueries("Gestion Date Requte")
     
                        vRequteGestion = objRequery.Name
     
                        Set cmdGestion = catGestion.Procedures(vRequteGestion).Command
     
                        cmdGestion.Parameters("[DateSaisie]") = dRponseRequte
     
                     'Modification du row source avec la requte
     
                        .[Gestion_recherche_list].RowSource = ""
                       .[Gestion_recherche_list].RowSourceType = "Table/Query"
                       .[Gestion_recherche_list].RowSource = "Gestion Date Requte"
     
                End If
     
         'selection client
         If .[CadreOption] = 3 Then
     
                        vRponseOption = InputBox("Entrez le nom du client", "Client")
                                If vRponseOption = "" Then
                                            Exit Sub
                                End If
     
                        sRponseRequte = vRponseOption
                'passage de la variable date demande vers la requte Gestion Clients Requte
     
                        Set objRequery = Application.CurrentData.AllQueries("Gestion Clients Requte")
     
                        vRequteGestion = objRequery.Name
     
                        Set cmdGestion = catGestion.Procedures(vRequteGestion).Command
     
                        cmdGestion.Parameters("[NomClients]") = sRponseRequte
     
     
                 'Modification du row source avec la requte
                        .[Gestion_recherche_list].RowSource = ""
                        .[Gestion_recherche_list].RowSourceType = "Table/Query"
                        .[Gestion_recherche_list].RowSource = "Gestion Clients Requte"
     
         End If
         'selection catgorie
     
         If .[CadreOption] = 4 Then
     
                                vRponseOption = InputBox("Entrez la catgorie", "Catgorie")
                                If vRponseOption = "" Then
                                            Exit Sub
                                End If
     
                        sRponseRequte = vRponseOption
     
                         Set objRequery = Application.CurrentData.AllQueries("Gestion Catgorie Requte")
     
                         vRequteGestion = objRequery.Name
     
                        cmdGestion.Parameters("[GestionCatgorie]") = sRponseRequte
     
          'Modification du row source avec la requte
     
            .[Gestion_recherche_list].RowSource = ""
            .[Gestion_recherche_list].RowSourceType = "Table/Query"
            .[Gestion_recherche_list].RowSource = "Gestion Catgorie Requte"
     
         End If
         End With
     
     
     
    End Sub]

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut
    j'ai modifié mon code mais cela ne fonctionne toujours pas.

    je me suis basé sur ce genre de 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
     
    Set QueryDef = CurrentDb.QueryDefs("q_QueryName")
     
    QueryDef.Parameters("[Param_1]") = stringvalue_1
    QueryDef.Parameters("[Param_2]") = stringvalue_2
    QueryDef.Parameters("[Param_3]") = stringvalue_3
    QueryDef.Parameters("[Param_4]") = "#" & Format(timevalue_1, "HH:mm") & "#"
    QueryDef.Parameters("[Param_5]") = "#" & Format(timevalue_1, "HH:mm") & "#"
     
    QueryDef.Parameters.Refresh
     
    'QueryDef.Sql
     
    DoCmd.OpenReport "r_ReportName", acViewPreview
    Le code me demande le paramètre malgré le passage de ce dernier dans une variable.
    Une fois le paramètre donné, cela fonctionne parfaitement.

    J'ai du passé directement par sql
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
     
    Private Sub CadreOption_AfterUpdate()
        'Procédure de sélection des options
     
           'Déclaration des variables de réponse
                Dim sDateMoisTest As String
                Dim vRéponseOption As Variant
                Dim sRéponseRequête As String
                Dim dRéponseRequête As Date
                Dim sValeurSQL As String
     
                Me.[Gestion_recherche_list].RowSource = ""
     
            'Choix en fonction de l'option
     
                With CodeContextObject
                'selection Date
                        If .[CadreOption] = 1 Then
     
                         'Demande de la date et test de vRéponseOption
                        Do
                            vRéponseOption = InputBox("Entrez la date que vous recherchez sous la forme jj/mm/aaaa", "Date")
                            sDateMoisTest = vRéponseOption
     
                                If vRéponseOption = "" Then
                                            Exit Sub
                                End If
     
                        Loop Until TestMois(sDateMoisTest) = False
     
                       dRéponseRequête = Format(sDateMoisTest, "mm/dd/yyyy")
     
                       'Modification du row source de la zone de liste avec la requête Date
     
                        Me.[Gestion_recherche_list].RowSourceType = "Table/Query"
                        sValeurSQL = "SELECT * FROM DONNEEES WHERE ((DONNEEES.DATATION LIKE #" & dRéponseRequête & "#)) ORDER BY DONNEEES.Numéro, DONNEEES.DATATION;"
     
     
                                If IsNull(Me.Gestion_recherche_list.ListCount) = True Then
     
                                    Me.[Gestion_recherche_list].RowSource = ""
                                    Exit Sub
                                Else
     
                                    Me.[Gestion_recherche_list].RowSource = sValeurSQL
                                    Me.RecordSource = sValeurSQL
     
                                End If
     
                          End If
     
         'selection client
                If .[CadreOption] = 2 Then
     
                        vRéponseOption = InputBox("Entrez le nom du client", "Client")
                                If vRéponseOption = "" Then
                                            Exit Sub
                                End If
     
                        sRéponseRequête = vRéponseOption
     
                        'Modification du row source de la zone de liste avec la requête client
                        Me.[Gestion_recherche_list].RowSourceType = "Table/Query"
                        sValeurSQL = "SELECT * FROM DONNEEES WHERE ((DONNEEES.CLIENTS LIKE '" & sRéponseRequête & "')) ORDER BY DONNEEES.DATATION, DONNEEES.CLIENTS;"
     
                            If IsNull(Me.Gestion_recherche_list.ListCount) = True Then
     
                                Me.[Gestion_recherche_list].RowSource = ""
                                Exit Sub
                            Else
     
                                Me.[Gestion_recherche_list].RowSource = sValeurSQL
     
                                Me.RecordSource = sValeurSQL
     
                            End If
                End If
            'selection catégorie
     
                If .[CadreOption] = 3 Then
     
                                vRéponseOption = InputBox("Entrez la catégorie", "Catégorie")
     
                                If vRéponseOption = "" Then
                                       Exit Sub
                                End If
     
                                sRéponseRequête = vRéponseOption
     
                'Modification du row source de la zone de liste avec la requête catégorie
                         Me.[Gestion_recherche_list].RowSourceType = "Table/Query"
                         sValeurSQL = "SELECT * FROM DONNEEES WHERE ((DONNEEES.CATEGORIE LIKE '" & sRéponseRequête & "')) ORDER BY DONNEEES.DATATION, DONNEEES.CATEGORIE;"
                        Me.[Gestion_recherche_list].RowSource = sValeurSQL
     
                            If IsNull(Me.Gestion_recherche_list.ListCount) = True Then
     
                                    Me.[Gestion_recherche_list].RowSource = ""
                                    Exit Sub
                            Else
     
                                    Me.[Gestion_recherche_list].RowSource = sValeurSQL
     
                                    Me.RecordSource = sValeurSQL
     
                            End If
     
                 End If
         End With
     End Sub
    cela fonctionne mais je m'explique toujours pas pourquoi la requête paramétrée refuse la variable en paramètre??

    Christophe

  3. #3
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut,
    tu es nouveau, donc d'abord je te souhaite la bienvenu, ensuite:
    un conseil: nous mettre 110 lignes de code en debut de post: c'est pas utile.
    vu le nombre de post qui il y a par jour, un modérateur comme Heureux-oli te dira qu'il venait juste de lire son journal... et encore je soupconne qu'il regardait les images... , alors ton truc là... (et crois moi c'est pas à défaut de pas vouloir aider les gens comme tu peux voir sur son compteur)
    mais ca faire genre: j'ai un pb, trouver moi ca la dedans
    alors évite, enfin, si tu souhaite avoir plus de réponses à tes pb.

    cerne mieux tes pb et poste les séparemments si besoin.
    parce que ca ma l'air confus : pb sur formulaire au départ puis de requete, d'état, de vb...

    pour donc revenir à ton post, je n'utilise pas le QueryDef rien qu'a voir le codage ca m'épuise...
    j'ai toujours pas compris si tu as prob sur form ou sur etat...
    sur etat l'aide sur:
    DoCmd.OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
    t'apprendra que tu peux mettre simplement la condition where de la sql en parametre.
    pourquoi en QueryDef ca marche pas? je ne pourrais pas te dire je ne l'utilise pas mais je soupconne que l'appel DoCmd.OpenReport vide les arguments s'il sont omis dans l'appel.
    peut être en mettant avant le QueryDef? .

    bon courage.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 62
    Points : 62
    Points
    62
    Par défaut
    Merci pour la réponse. L'ajout du code c'était pour information. dès fois que cela aurait été un problème connu et si cela peut aider d'autres personnes avec le même soucis pour comparer.

    Le problème est effectivement uniquement lié à du vba. Mais j'ai résolu en passant par du SQL

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

Discussions similaires

  1. Variable pour une requête SQL
    Par guiguir68 dans le forum C#
    Réponses: 4
    Dernier message: 16/09/2014, 08h52
  2. Code VBA fonction du resultat d'une requête
    Par Nessie37 dans le forum VBA Access
    Réponses: 10
    Dernier message: 20/02/2008, 13h21
  3. Réponses: 2
    Dernier message: 30/12/2007, 15h31
  4. Réponses: 4
    Dernier message: 09/01/2007, 11h31
  5. Passage de variable dans une requête
    Par zestrellita dans le forum Langage SQL
    Réponses: 5
    Dernier message: 02/09/2004, 13h27

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