Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access
Access Forum d'entraide sur Microsoft Access. Avant de poster -> La F.A.Q Access
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 21/03/2011, 22h05   #1
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Par défaut Vba - requête paramétrée

Bonjour,

Je me tourne vers vous car je n'arrive pas du tout à résoudre mon problème. J'ai un formulaire access qui est censé me servir à transmettre des mails. J'ai récupéré un package (procédure vba + formulaire) que je voudrai faire évoluer un poil.

J' n'y connais rien en vba et je souhaiterai que ma requête sql (en gras ci-dessous) soit paramétrée, c'est à dire qu'elle prenne la valeur d'une liste déroulante dans le formulaire pour effectuer la sélection.

Je vous mets le code vba en espérant que vous pourrez m'aider. Merci.

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
Public Sub EnvoiMassif()
'Ajouter les références suivantes :
'Microsoft Outlook
'Microsoft DAO
Dim oApp As Outlook.Application
Dim oMail As Outlook.MailItem
Dim oDB As DAO.Database
Dim strContenu As String
Dim oRst0 As DAO.Recordset
Dim oRst1 As DAO.Recordset
Dim strTo As String
Dim sqlMail As String


Set oDB = CurrentDb
Set oApp = CreateObject("Outlook.Application")
'Crée un nouveau message
sqlMail = "SELECT  * FROM tblMessage;"
Set oRst0 = oDB.OpenRecordset(sqlMail)
oRst0.MoveLast
Set oMail = oApp.CreateItem(olMailItem)
oMail.Body = oRst0.Fields("txtcorps")
oMail.Subject = oRst0.Fields("strObjet") & " du " & oRst0.Fields("dtCrea")

'Ouvre un recordset sur les clients
Set oRst1 = oDB.OpenRecordset("SELECT stEmail FROM tblClient WHERE region=?")
'Boucle sur chaque client et les ajoute au champ BCC du mail
While Not oRst1.EOF
  strTo = strTo & oRst1.Fields("stEmail") & "; "
  oRst1.MoveNext
Wend
'Supprime la dernière virgule
oMail.BCC = Left(strTo, Len(strTo) - 2)

'Envoi le mail
oMail.Send
'ferme le curseur
oRst0.Close
oRst1.Close
Set oRst0 = Nothing
Set oRst1 = Nothing
Set oDB = Nothing
'Ferme Outlook
oApp.Quit
Set oApp = Nothing
End Sub
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2011, 14h11   #2
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour,
Code :
Set oRst1 = oDB.OpenRecordset("SELECT stEmail FROM tblClient WHERE region=" & Me.monCombobox & ";")
devrait faire l'affaire.

Pour ton info, le paramètre de la méthode OpenRecordset est une chaîne de caractère (String). Tu la concatènes avec le symbole & avec la variable de ton choix.

Me représente le formulaire dans lequel tu écris ton code.
monComboBox représente le contrôle liste déroulante de ton formulaire.

Attention à la propriété colonne liée de ton contrôle.

Si la colonne liée est un identifiant sous forme de nombre, c'est parfait. Si c'est une string, il faut rajouter des guillemets simples de part et d'autres de ta variable. Comme ceci :
Code :
Set oRst1 = oDB.OpenRecordset("SELECT stEmail FROM tblClient WHERE region='" & Me.monCombobox & "';")
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 08h34   #3
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Merci Paidge pour ces explications très claires ainsi que pour l'aide que tu m'apportes.
J'ai néanmoins un problème avec ta ligne de code car quand je l'exécute via un bouton sur le formulaire, il me renvoe une erreur : Erreur de compilation, utilisation incorrecte du mot clé "Me".
Comment puis je faire ?
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 09h38   #4
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour,

Tu as ce message car, ta Sub (procédure en FR), tu l'as placée dans un module.

Dans ce cas, il faut écrire ça :
Code :
1
2
 
Set oRst1 = oDB.OpenRecordset("SELECT stEmail FROM tblClient WHERE region=" & Forms("monFormulaire").monCombobox & ";")
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h23   #5
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
On avance mais ça coince toujours.
Alors comment te dire ???

Lorque j'entre dans ma liste déroulante une région composée d'un seul mot (genre Paris), il me met : Erreur 3061 - Trop peu de paramètres - 1 attendu ; alors que des valeurs sont bien présentes dans la requête que je cible.

Lorsque j'entre dans ma liste déroulante une région composée de plusieurs mots (genre Pays de la Loire), il me met : erreur 3075 - Erreur de syntaxe (opérateur absent) dans l'expression "region=Pays de la Lire".

En espérant que tu puisses toujours m'aider.
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h26   #6
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Je pense que c'est ptet ça.

Citation:
Envoyé par paidge Voir le message
Si la colonne liée est un identifiant sous forme de nombre, c'est parfait. Si c'est une string, il faut rajouter des guillemets simples de part et d'autres de ta variable. Comme ceci :
Code :
Set oRst1 = oDB.OpenRecordset("SELECT stEmail FROM tblClient WHERE region='" & Me.monCombobox & "';")
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h38   #7
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
J'avais essayé avec les simples quotes mais ca ne marche pas non plus, voir message d'erreur en pièce jointe. Et bien sur, j'ai des valeurs qui correspondent dans le stemail... Je ne comprends pas
Images attachées
Type de fichier : png Sans-titre-4.png (17,8 Ko, 9 affichages)
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h55   #8
Invité régulier
 
Inscription : octobre 2003
Messages : 25
Détails du profil
Informations forums :
Inscription : octobre 2003
Messages : 25
Points : 6
Points : 6
Merci Paidge, ca marche en fait... Il fallait juste que j'actualise l'enregistrement pour que la valeur de la liste déroulante soit prise en compte.
Ouffff !! Merci encore, c'est heureux de trouver des personnes comme toi lorsque que l'on se sent seul dans une situation comme celle ci.
Vince26exe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 10h59   #9
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
De rien je suis passé par là aussi ^^ N'oublies pas de marquer ton sujet comme
paidge 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 23h17.


 
 
 
 
Partenaires

Hébergement Web