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

Requêtes et SQL. Discussion :

Récupération variable VBA pour requête SQL [AC-2007]


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut Récupération variable VBA pour requête SQL
    Bonjour à tous,

    Je rencontre un problème quant à l'utilisation d'une variable VBA dans une requête SQL :

    - j'ai une table nommée "T_Page_1" dont tous les champs sont en format texte,

    - j'ai créé un formulaire avec 3 combobox nommées cbocommunes, cbotitre et cbostatut. Leurs valeurs ont été entrées dans la propriété "contenu" et "liste de valeurs" a donc été activé. cbocommunes comporte 34 choix possibles, cbotitre : 5 choix et cbostatut : 9 choix possibles. Le choix fait dans chaque combobox est mémorisé dans une variable string portant le nom de sa combobox respective puis est transformé en nombre, mais toujours au format texte,

    - cbostatut comporte un événement sur clic exécutant une requête SQL SELECT en fonction des choix faits dans les 3 combobox,

    - la requête se nomme "R_Page_1",

    - j'ai également inseré des MsgBox afin de vérifier la valeur des variables après leur transformation,


    Le problème est que j'obtiens 5 champs vides après exécution de la requête SQL, je n'arrive pas apparemment à récupérer les 3 variables en question dans celle-ci.

    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
    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
     
    Option Compare Database
     
    Private Sub cbocommunes_BeforeUpdate(Cancel As Integer)
     
     Dim cbocommunes As String
     
      MsgBox Me.cbocommunes
     
       If Me.cbocommunes = "-- Toutes --" Then cbocommunes = "00" Else
       If Me.cbocommunes = "01. Bélep" Then cbocommunes = "01" Else
       If Me.cbocommunes = "02. Boulouparis" Then cbocommunes = "02" Else
       If Me.cbocommunes = "03. Bourail" Then cbocommunes = "03" Else
       If Me.cbocommunes = "04. Canala" Then cbocommunes = "04" Else
       If Me.cbocommunes = "05. Dumbéa" Then cbocommunes = "05" Else
       If Me.cbocommunes = "06. Farino" Then cbocommunes = "06" Else
       If Me.cbocommunes = "07. Hienghène" Then cbocommunes = "07" Else
       If Me.cbocommunes = "08. Houaïlou" Then cbocommunes = "08" Else
       If Me.cbocommunes = "09. Ile des Pins" Then cbocommunes = "09" Else
       If Me.cbocommunes = "10. Kaala Gomen" Then cbocommunes = "10" Else
       If Me.cbocommunes = "11. Koné" Then cbocommunes = "11" Else
       If Me.cbocommunes = "12. Koumac" Then cbocommunes = "12" Else
       If Me.cbocommunes = "13. La Foa" Then cbocommunes = "13" Else
       If Me.cbocommunes = "14. Lifou" Then cbocommunes = "14" Else
       If Me.cbocommunes = "15. Maré" Then cbocommunes = "15" Else
       If Me.cbocommunes = "16. Moindou" Then cbocommunes = "16" Else
       If Me.cbocommunes = "17. Mont Dore" Then cbocommunes = "17" Else
       If Me.cbocommunes = "18. Nouméa" Then cbocommunes = "18" Else
       If Me.cbocommunes = "19. Ouégoa" Then cbocommunes = "19" Else
       If Me.cbocommunes = "20. Ouvéa" Then cbocommunes = "20" Else
       If Me.cbocommunes = "21. Païta" Then cbocommunes = "21" Else
       If Me.cbocommunes = "22. Poindimié" Then cbocommunes = "22" Else
       If Me.cbocommunes = "23. Ponérihouen" Then cbocommunes = "23" Else
       If Me.cbocommunes = "24. Pouébo" Then cbocommunes = "24" Else
       If Me.cbocommunes = "25. Pouembout" Then cbocommunes = "25" Else
       If Me.cbocommunes = "26. Poum" Then cbocommunes = "26" Else
       If Me.cbocommunes = "27. Poya" Then cbocommunes = "27" Else
       If Me.cbocommunes = "28. Sarraméa" Then cbocommunes = "28" Else
       If Me.cbocommunes = "29. Thio" Then cbocommunes = "29" Else
       If Me.cbocommunes = "30. Touho" Then cbocommunes = "30" Else
       If Me.cbocommunes = "31. Voh" Then cbocommunes = "31" Else
       If Me.cbocommunes = "32. Yaté" Then cbocommunes = "32" Else
       If Me.cbocommunes = "33. Kouaoua" Then cbocommunes = "33"
     
     
      MsgBox cbocommunes
     
    End Sub
     
    Private Sub cbostatut_BeforeUpdate(Cancel As Integer)
     
     Dim cbostatut As String
     
      MsgBox Me.cbostatut
     
       If Me.cbostatut = "-- Tous --" Then cbostatut = "0" Else
       If Me.cbostatut = "Compte propre" Then cbostatut = "1" Else
       If Me.cbostatut = "GIE" Then cbostatut = "2" Else
       If Me.cbostatut = "Groupement de fait" Then cbostatut = "3" Else
       If Me.cbostatut = "SCEA, SCEC, SA..." Then cbostatut = "4" Else
       If Me.cbostatut = "Autre personne morale" Then cbostatut = "5" Else
       If Me.cbostatut = "Autre personne physique" Then cbostatut = "6" Else
       If Me.cbostatut = "Pas de réponse" Then cbostatut = "" Else
       If Me.cbostatut = "Trop de réponses" Then cbostatut = "9" Else
     
      MsgBox cbostatut
     
    End Sub
     
    Private Sub cbostatut_Click()
     
     DoCmd.OpenQuery ("R_Page_1")
     
    End Sub
     
    Private Sub cbotitre_BeforeUpdate(Cancel As Integer)
     
     Dim cbotitre As String
     
      MsgBox Me.cbotitre
     
       If Me.cbotitre = "-- Tous --" Then cbotitre = "0" Else
       If Me.cbotitre = "Superficie > 1,7 ha" Then cbotitre = "1" Else
       If Me.cbotitre = "Seuil de 350 points" Then cbotitre = "2" Else
       If Me.cbotitre = "Pas de réponse" Then cbotitre = "" Else
       If Me.cbotitre = "Trop de réponses" Then cbotitre = "9" Else
     
      MsgBox cbotitre
     
    End Sub
    Et celui de la requête "R_Page_1" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Page_1.COM, Page_1.TITRE, Page_1.STATUT, Page_1.NOM, Page_1.PRENOM
    FROM Page_1
    WHERE (((Page_1.COM)='" & cbocommunes & "') AND ((Page_1.TITRE)='" & cbotitre & "') AND ((Page_1.STATUT)='" & cbostatut & "'));
    J'ai trouvé quelques réponses à ce sujet dans les FAQ mais je ne suis pas très doué car ça ne fonctionne toujours pas.

    Merci infiniment pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tes variables ont été déclarées dans les procédures, tu devrais les déclarer en entête de module.

    De plus, leur donner le même nom que les contrôles n'est pas une bonne idée, je pense que c'est la valeur du contrôle qui est prise en compte et non la variable (à voir).

    Fait une MsgBox pour avoir la chaine SQL, tu verras les valeurs qui y sont passées, et comment est lancée ta requête et où se trouve-t-elle ? Dans le module du formulaire ou un autre module (important pour la déclaration des variables)

    Philippe

  3. #3
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 430
    Billets dans le blog
    11
    Par défaut
    Salut,

    J'avais fait quelque chose sur les variables, cela peut convenir à ton besoin : Utilisation de variables

    @+.

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Bonjour Philippe et Zoom61,

    Tout d'abord, merci beaucoup de vous intéresser à mon cas.

    Sur vos conseils à tous les deux, j'ai donc :

    - déclaré les variables dans l'entête de module, donc tout en haut de la fenêtre si je comprends bien, sous la ligne "Option Compare Database".

    - changé les noms de variables : cbocommunes devient codecom, cbotitre devient codetitre et cbostatut devient codestatut.

    - inséré le code auquel Zoom61 fait référence, merci encore, et ai donc modifié la requête SQL en conséquence (la requête porte uniquement sur la valeur de la première combobox pour l'essai) mais ça ne fonctionne pas : au lancement de la requête j'ai le message d'erreur "Erreur d'éxecution '3085'", "Fonction "get_Valcodecom" non définie dans l'expression.

    En fait j'ai créé un nouveau module du nom de Valcodecom et y ai inséré la Public fonction Valdecom() As String. Est-ce correct ?

    Quant à la dernière remarque de Philippe : "Fait une MsgBox pour avoir la chaine SQL, tu verras les valeurs qui y sont passées, et comment est lancée ta requête et où se trouve-t-elle ? Dans le module du formulaire ou un autre module (important pour la déclaration des variables)." J'avoue ne pas savoir comment on fait cela.

    J'aimerais savoir également si les 3 lignes de séparation que j'ai indiquées dans le code par des ****** sont normales par rapport aux différentes déclarations de variables et de fonctions.

    Je vous joint le code entier ainsi que celui de la requête 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
    110
    111
    112
     
    Option Compare Database
     
    Option Explicit
     
    Dim codecom As String
    Dim codetitre As String
    Dim codestatut As String
    Dim SQL As String
    *******************************************************
    'Cette fonction permettra d'enregistrer une valeur dans une variable
    Public Function Set_Valcodecom(Valcodecom As String)
       codecom = Valcodecom
    End Function
    *******************************************************
    'Cette fonction permettra de récupérer la valeur d'une variable
    Public Function get_Valcodecom() As String
       get_Valcodecom = codecom
    End Function
    *******************************************************
     
     
    Private Sub cbocommunes_BeforeUpdate(Cancel As Integer)
     
    Dim cbocommunes As String
     
    MsgBox Me.cbocommunes
     
    If Me.cbocommunes = "-- Toutes --" Then codecom = "00" Else
    If Me.cbocommunes = "01. Bélep" Then codecom = "01" Else
    If Me.cbocommunes = "02. Boulouparis" Then codecom = "02" Else
    If Me.cbocommunes = "03. Bourail" Then codecom = "03" Else
    If Me.cbocommunes = "04. Canala" Then codecom = "04" Else
    If Me.cbocommunes = "05. Dumbéa" Then codecom = "05" Else
    If Me.cbocommunes = "06. Farino" Then codecom = "06" Else
    If Me.cbocommunes = "07. Hienghène" Then codecom = "07" Else
    If Me.cbocommunes = "08. Houaïlou" Then codecom = "08" Else
    If Me.cbocommunes = "09. Ile des Pins" Then codecom = "09" Else
    If Me.cbocommunes = "10. Kaala Gomen" Then codecom = "10" Else
    If Me.cbocommunes = "11. Koné" Then codecom = "11" Else
    If Me.cbocommunes = "12. Koumac" Then codecom = "12" Else
    If Me.cbocommunes = "13. La Foa" Then codecom = "13" Else
    If Me.cbocommunes = "14. Lifou" Then codecom = "14" Else
    If Me.cbocommunes = "15. Maré" Then codecom = "15" Else
    If Me.cbocommunes = "16. Moindou" Then codecom = "16" Else
    If Me.cbocommunes = "17. Mont Dore" Then codecom = "17" Else
    If Me.cbocommunes = "18. Nouméa" Then codecom = "18" Else
    If Me.cbocommunes = "19. Ouégoa" Then codecom = "19" Else
    If Me.cbocommunes = "20. Ouvéa" Then codecom = "20" Else
    If Me.cbocommunes = "21. Païta" Then codecom = "21" Else
    If Me.cbocommunes = "22. Poindimié" Then codecom = "22" Else
    If Me.cbocommunes = "23. Ponérihouen" Then codecom = "23" Else
    If Me.cbocommunes = "24. Pouébo" Then codecom = "24" Else
    If Me.cbocommunes = "25. Pouembout" Then codecom = "25" Else
    If Me.cbocommunes = "26. Poum" Then codecom = "26" Else
    If Me.cbocommunes = "27. Poya" Then codecom = "27" Else
    If Me.cbocommunes = "28. Sarraméa" Then codecom = "28" Else
    If Me.cbocommunes = "29. Thio" Then codecom = "29" Else
    If Me.cbocommunes = "30. Touho" Then codecom = "30" Else
    If Me.cbocommunes = "31. Voh" Then codecom = "31" Else
    If Me.cbocommunes = "32. Yaté" Then codecom = "32" Else
    If Me.cbocommunes = "33. Kouaoua" Then codecom = "33"
     
     
    MsgBox codecom
     
    End Sub
     
     
    Private Sub cbostatut_BeforeUpdate(Cancel As Integer)
     
    Dim cbostatut As String
     
    MsgBox Me.cbostatut
     
    If Me.cbostatut = "-- Tous --" Then codestatut = "0" Else
    If Me.cbostatut = "Compte propre" Then codestatut = "1" Else
    If Me.cbostatut = "GIE" Then codestatut = "2" Else
    If Me.cbostatut = "Groupement de fait" Then codestatut = "3" Else
    If Me.cbostatut = "SCEA, SCEC, SA..." Then codestatut = "4" Else
    If Me.cbostatut = "Autre personne morale" Then codestatut = "5" Else
    If Me.cbostatut = "Autre personne physique" Then codestatut = "6" Else
    If Me.cbostatut = "Pas de réponse" Then codestatut = "" Else
    If Me.cbostatut = "Trop de réponses" Then codestatut = "9" Else
     
    MsgBox codestatut
     
    End Sub
     
    Private Sub cbostatut_Click()
     
     
    DoCmd.OpenQuery ("R2_Page_1")
     
     
    End Sub
     
    Private Sub cbotitre_BeforeUpdate(Cancel As Integer)
     
    Dim cbotitre As String
     
    MsgBox Me.cbotitre
     
    If Me.cbotitre = "-- Tous --" Then codetitre = "0" Else
    If Me.cbotitre = "Superficie > 1,7 ha" Then codetitre = "1" Else
    If Me.cbotitre = "Seuil de 350 points" Then codetitre = "2" Else
    If Me.cbotitre = "Pas de réponse" Then codetitre = "" Else
    If Me.cbotitre = "Trop de réponses" Then codetitre = "9" Else
     
    MsgBox codetitre
     
    End Sub
    Et voici la requête SQL R2_Page_1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Page_1.COM, Page_1.TITRE, Page_1.STATUT, Page_1.NOM, Page_1.PRENOM
    FROM Page_1
    WHERE (((Page_1.COM)=get_Valcodecom()));

    Encore merci à vous, c'est assez difficile lorsqu'on apprend seul.

    A bientôt.

  5. #5
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 430
    Billets dans le blog
    11
    Par défaut
    Il faut rajouter la dernière ligne à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Me.cbocommunes = "32. Yaté" Then codecom = "32" Else
    If Me.cbocommunes = "33. Kouaoua" Then codecom = "33"
     
    i = Set_Valcodecom(codecom)

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2012
    Messages : 44
    Par défaut
    Alors j'ai ajouté les lignes :

    i = Set_Valcodecom(codecom)

    à la fin comme tu me l'as dit, et la ligne de déclaration en entête (je l'avais oubliée) :

    Dim i As String

    Mais j'obtiens encore le message d'erreur 3085 : Fonction "get_Valcodecom" non définie dans l'expression, et l'éditeur me surligne en jaune la ligne :

    DoCmd.OpenQuery ("R2_Page_1")

    Vois-tu autre chose à modifier ?

    Encore merci à toi.

  7. #7
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 430
    Billets dans le blog
    11
    Par défaut
    Salut,

    Essaie en mettant cela au début de la fonction :
    @+.

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

Discussions similaires

  1. variable vba dans requête sql
    Par pasb71 dans le forum Access
    Réponses: 4
    Dernier message: 16/05/2011, 17h58
  2. Réponses: 4
    Dernier message: 14/02/2008, 09h43
  3. Récupération de variables de menus déroulants pour requète SQL
    Par Thibaut_Dupont dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/07/2006, 14h24
  4. [MySQL] Problème récupération variable pour requête SQL !!
    Par mLk92 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 01/06/2006, 16h08
  5. Variable invisible pour requête SQL !?
    Par yopuke dans le forum Langage
    Réponses: 26
    Dernier message: 11/05/2006, 16h44

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