Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/12/2010, 11h08   #1
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
Par défaut OpenRecordset Err 3061 (Trop Peu de paramètre)

Bonjour à tous,

Encore une fois je revien vers vous pour un probléme au quel je n'ai pas pu trouver de solution sur les multiples forums et tuto.

J'utilise souvent OpenRecordset pour retourner la valeur d'une de mes requètes.

J'essay ici de retourner la valeur d'une requéte contenant deux champs l'un visible (que je souaite retrouver en vba) et l'autre sur le quel s'applique une condition (=valeur d'un menu déroulant dans un formulaire)

Cette condition pose probléme dés que je l'applique j'obtien l'erreur suivante ERR 3061 (Trop peu de paramétre 1 attendu)


Voici la partie de mon code posant probléme.

Code :
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
Dim Dbs As DAO.Database
Dim rstTAB As DAO.Recordset
Dim StrJoinDoc As String
Dim StrQueryName As String
Dim Str_Texte1 As String
Dim Str_Titre1 As String
Dim StrDest As String
Dim StrSignature As String
Dim Str_Mail_To As String
Dim Str_Mail_Cc As String
Dim strQuery As String
 
StrQueryName = "Z_CALL_OFF_REL_GEST"
Str_Mail_To = "xxx@fr.xxxxcom"
Str_Mail_Cc = "yyyy@fr.yyyyycom"
Str_Titre1 = "GRILLE GDA Exemple"
StrDest = "PTF"
 
 
Str_Texte1 = CurrentDb.OpenRecordset("Signature_Gestionnaire").Fields(0).Value
 
DoCmd.SendObject acSendQuery, StrQueryName, , Str_Mail_To, Str_Mail_Cc, , Str_Titre1 & " --> " & StrDest & " - " & Date, Str_Texte1 & StrSignature
 
 
 
    Exit Function
 
End Function

Je commence à être réelement pomé

Merci à tous pour l'aide que vous pourriez m'apporter.

Alex
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h11   #2
Membre du Club
 
clément
Étudiant
Inscription : septembre 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : clément
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2010
Messages : 131
Points : 59
Points : 59
T'aurais pas oublié des simples cotes sur ta variable si c'est un string ?
Mycose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h17   #3
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
Mon champ est de type mémo, je ne suis pas un expert en vba que veux tu dire par cotes??
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 11h31   #4
Membre du Club
 
clément
Étudiant
Inscription : septembre 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : clément
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2010
Messages : 131
Points : 59
Points : 59
La simple cote c'est ca : ' et faut parfois la mettre autour de la valeur que tu cherches dans le champ.

Exemple :

Code :
"SELECT meschamps FROM matable WHERE monchamp = '" & mavar & "'"
ou

Code :
"SELECT meschamps FROM matable WHERE monchamp = 'test'"
Mais sinon tu peux nous mettre ta requête ? Parce que j'ai déjà eu la même erreur avec des fautes de syntaxes sur ma requête ^^
Mycose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 13h25   #5
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
J'utilise une requéte d'Access mais globalement je ne vois pas pourquoi cela disfonctionne alros qu'avec les autre aucun probléme???


Pour info je te met la requéte transcrite en SQL (j'ai aussi essayé):

Code :
1
2
3
SELECT GEST_SIGNATURE.SIGNATURE
FROM GEST_SIGNATURE
WHERE (((GEST_SIGNATURE.[GESTIONNAIRE APPEL])=[Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire]));
Merci de ton aide
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 13h35   #6
Membre du Club
 
clément
Étudiant
Inscription : septembre 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : clément
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2010
Messages : 131
Points : 59
Points : 59
[Gestionnaire Appel] doit etre égal au contenu de la variable : "[Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire]"

ou c'est [Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire] qui est une valeur ?

si tu veux le contenu de "MenuD_Gestionnaire" :

Code :
1
2
3
SELECT GEST_SIGNATURE.SIGNATURE
FROM GEST_SIGNATURE
WHERE (((GEST_SIGNATURE.[GESTIONNAIRE APPEL])= '" & [Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire] & "'));
Ou si dans ta table c'est la valeur "[Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire]" que tu cherches c'est :

Code :
1
2
3
SELECT GEST_SIGNATURE.SIGNATURE
FROM GEST_SIGNATURE
WHERE (((GEST_SIGNATURE.[GESTIONNAIRE APPEL])='[Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire]'));
Mycose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 15h34   #7
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
Aprés plusieurs essais cela ne fonctionne pas, mais je comprend pas pourquoi il ne peut pas exécuter une bête requète d'access???

Ci-join le code total adapté, si cela peut aider.

Merci de ton aide



Code :
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
Public Function SEND_MAIL_GRILLE()
 
'On Error GoTo Out
 
Dim Dbs As DAO.Database
Dim rstTAB As DAO.Recordset
Dim StrJoinDoc As String
Dim StrQueryName As String
Dim Str_Texte1 As String
Dim Str_Titre1 As String
Dim StrDest As String
Dim StrSignature As String
Dim Str_Mail_To As String
Dim Str_Mail_Cc As String
Dim strQuery As String
Dim sql As String
 
StrQueryName = "Z_CALL_OFF_REL_GEST"
Str_Mail_To = "xxxx@fr.xxxxx.com"
Str_Mail_Cc = "yyyyyyyy@fr.yyyyy.com"
Str_Titre1 = "GRILLE GDA Exemple"
StrDest = "PTF"
 
sql = "SELECT GEST_SIGNATURE.SIGNATURE From GEST_SIGNATURE WHERE (((GEST_SIGNATURE.[GESTIONNAIRE APPEL])='[Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire]'));"
DoCmd.RunSQL sql
 
'Str_Texte1 = CurrentDb.OpenRecordset("Signature_Gestionnaire").Fields(0).Value
Str_Texte1 = CurrentDb.OpenRecordset(sql).Fields(0).Value
 
If Str_Texte1 = "" Then
MsgBox "Aucun Gestionnaire n'est séléctionné"
 
GoTo Out
 
End If
 
 
 
If DCount("*", StrQueryName) > 0 Then
 
DoCmd.SendObject acSendQuery, StrQueryName, , Str_Mail_To, Str_Mail_Cc, , Str_Titre1 & " --> " & StrDest & " - " & Date, Str_Texte1 & StrSignature
 
GoTo Out
 
End If
 
MsgBox "Aucune donnée à envoyer à la Platforme "
 
 
 
Out:
 
Exit Function
 
End Function
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h21   #8
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Bonjour,

tout d'abord, dans la 2ème version de ton code, la commande RunSQL ne doit pas fonctionner, car elle ne permet que d'exécuter des requêtes action (INSERT, DELETE, UPDATE, ALTER TABLE, etc) mais pas de requeêtes SELECT.
Ensuite si je reprends ton 1er code, est-ce que le formulaire sur lequel tu te bases est ouvert au moment où tu exécutes ton code VBA ?
Habituellement, l'erreur "Trop peu de paramètres, X attendus" signifie que Access n'a pas pu interprété X colonnes de ta requête. 9 fois sur 10, il s'agit d'une erreur de typo, vite corrigée lorsqu'on écrit la requête dans le requêteur. Le reste du temps, il s'agit de variable qu'il n'a pas pu interpréter car la variable n'est pas disponible au moment où on exécute la requête (par exemple dans ton cas, ça pourrait être le formulaire qui est fermé au moment de l'exécution de la requête).

Perso, j'ajouterai un debug.print [Forms]![Appel Gestionnaire]![MenuD_Gestionnaire] juste avant l'ouverture du recordset pour vérifier la valeur renvoyée.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h41   #9
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
Hello,

Avant tout merci de ta réponse

Mon formulaire est bien ouvert au moment de l'exécution de mon code, la variable du menu déroulant est bien retourné et il n'y a pas d'erreur topographique (En effet j'ai pu voir que c'était souvent le probléme).

Ma requéte Access elle n'est pas ouverte au moment de l'exécution du code, mais je ne vois pas vraiment ce que cela peut changer???

Une idée pour résoudre ce probléme ou alors le contourner(other way)?

Merci d'avance

Alex
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h46   #10
Membre du Club
 
clément
Étudiant
Inscription : septembre 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : clément
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2010
Messages : 131
Points : 59
Points : 59
Si tu mets avant ta requete:
Code :
1
2
 
msgbox([Forms]![Appel Gestionnaire]![MenuD_Gestionnaire])
il t'affiche quoi ?
Mycose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h47   #11
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
La bonne variable (celle de mon menu déroulant)
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h49   #12
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
Le pire et ce qui me titille le crâne c'est:

J'éxécute la requète manuellement = aucun PB

Je remplace le critére variable (menu déroulant) par une valeur fixe = mon code s'exécute bien

En gros il n'aime pas la variable comme critére quand j'éxécute le code.
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h54   #13
Membre du Club
 
clément
Étudiant
Inscription : septembre 2010
Messages : 131
Détails du profil
Informations personnelles :
Nom : clément
Âge : 21

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2010
Messages : 131
Points : 59
Points : 59
T'es sur d'avoir bien mis ça :

Code :
1
2
3
4
5
6
7
8
 
...
 
sql = "SELECT GEST_SIGNATURE.SIGNATURE From GEST_SIGNATURE WHERE (((GEST_SIGNATURE.[GESTIONNAIRE APPEL])= '" & [Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire] & "'));"
 
Str_Texte1 = CurrentDb.OpenRecordset(sql).Fields(0).Value
 
...
Si sa marche pas ça c'est que [Formulaires]![Appel Gestionnaire]![MenuD_Gestionnaire] c'est faux, soit sa renvoi pas la valeur que tu veux, soit y a une faute dans l'orthographe :s

EDIT: sinon essaye peut-être "Forms" à la place de "Formulaires" ?
Mycose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 16h56   #14
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
justement pour contourner le problème, et si tu trichais en récupérant ta variable de ton formulaire dans un variable de ton code et en la mettant dans ton sql :
Code :
1
2
3
4
5
6
 
dim blabla as string
 
blabla = [Forms]![Appel Gestionnaire]![MenuD_Gestionnaire]
sql = "SELECT GEST_SIGNATURE.SIGNATURE FROM GEST_SIGNATURE WHERE (GEST_SIGNATURE.[GESTIONNAIRE APPEL]= '" & blabla & "');"
Str_Texte1 = CurrentDb.OpenRecordset(sql).Fields(0).Value
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h01   #15
Membre régulier
 
Alexis CANET
Étudiant
Inscription : novembre 2009
Messages : 95
Détails du profil
Informations personnelles :
Nom : Alexis CANET
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2009
Messages : 95
Points : 70
Points : 70
J'étais repassé en requéte Acccess.

Cela fonctionne ton petit ETID a tout changé

Mais pourquois il ne suporte pas les requétes d'Access.


En tout cas super Ca marche à Merveille, UN GRAND MERCI

Peut étre à bientot Pour de nouvelles aventures

@+

PI je passe en résolut
Deustalos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/12/2010, 17h05   #16
Membre habitué
 
Inscription : janvier 2006
Messages : 99
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2006
Messages : 99
Points : 101
Points : 101
Citation:
Envoyé par Deustalos Voir le message
J'étais repassé en requéte Acccess.

Cela fonctionne ton petit ETID a tout changé

Mais pourquois il ne suporte pas les requétes d'Access.
En fait le problème portait sur l'interférence anglais/français dans le code. Ton SQL de ta requête a été "francisé" par Access, mais le VBA ne supporte que l'anglais comme langue. Du coup, [Formulaire] ne représente rien en VBA.
C'est toujours bon à savoir.
Aegnor est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h35.


 
 
 
 
Partenaires

Hébergement Web