Probleme de variable vba avec where

Bonjour

j'essaye de coder une variable dans l instruction select table where champ = variable
si je mets where = le nom en dur c 'est ok il me liste,mais des que je mets une variable where = variable il me jette
je travaille sous vba acces merci

3 réponses

  1. Bonjour,

    Voici un exemple fonctionnel dans ma BD de vidéothèque :

    ' Ici je récupère la valeur que prendra ma variable "CassetteVidéo"
    CassetteVidéo = Forms![Formulaire Édition Liste Vidéo].[Liste Cassette]

    ' Ici, je commence la création de la requête SQL
    Chaine = "Select * from [Table Vidéo] where [Cassette] = "

    ' Ici je finis la création en ajoutant la variable dans la requête
    Critere = Chaine & """" & CassetteVidéo & """"

    ' Les 2 lignes précédente pourrait être codé sur une ligne :
    Chaine = "Select * from [Table Vidéo] where [Cassette] = " & """" & CassetteVidéo & """"

    ' Vous pouvez constater, que la variable est placé entre guillemets.

    Il vous suffit, d'adapter et voici comment modifier la requête
    par programmation :

    If (ChangeRequeteDef("Requête Liste Spécifique Cassette", Critere)) Then
    Me.Refresh
    End If

    '************************
    ' Fonction a placer dans un module VBA

    Public Function ChangeRequeteDef(ChaineRequete As String, ChaineSQL As String) As Boolean

    Dim Definition As Variant

    If ((ChaineRequete = "") Or (ChaineSQL = "")) Then
    ChangeRequeteDef = False
    Else
    Set Definition = CurrentDb.QueryDefs(ChaineRequete)
    Definition.SQL = ChaineSQL
    Definition.Close
    RefreshDatabaseWindow
    ChangeRequeteDef = True
    End If

    End Function

    '************************************

    Amicalement
    Lupin
    1. Bonjour et merci cela est un peu complique pour adapter ma proc a ton exemple
      merci de voir si tu as le temps la variable est anx

      Public Sub seek2()
      Set cnn = CurrentProject.Connection
      Set rst = New ADODB.Recordset
      Dim varxx1 As Long
      Dim varxx2 As Long
      Dim varxx3 As Long
      Dim datx As Date
      Dim datxx As String

      Dim anx As Long
      anx = 2004

      'open recordset ("SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004" , DbOpenDynaset, dbseechanges,dbPessimistic)

      rst.Open "SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004", _
      cnn, adOpenDynamic, adLockOptimistic, adCmdText

      varxx1 = rst("demande déblocage kg vin sur latte")
      varxx2 = rst("nouveau cumul")
      varxx3 = varxx2 - varxx1
      MsgBox "a1" & varxx1
      MsgBox "a2" & varxx2
      MsgBox "a3" & varxx3

      If rst.EOF Then
      MsgBox "Aucun1 bien ne répond aux critères !", vbExclamation

      Else
      rst("quota restant vin sur latte") = varxx3
      rst.Update

      Set rst = Nothing
      Set db = Nothing
      End If
      End Sub
      1. Bonjour,

        J'ai adapté votre code dans ma BD et voici ce que il en résulte :

        Public Sub seek2()

        ' Set cnn = CurrentProject.Connection
        ' Set rst = New ADODB.Recordset
        ' Ici, le compilateur me renvoie une erreur, variable non défini
        ' alors je comprends que tu veux te connecter sur la base en créant
        ' un "recordset", mais le nombre d'enregistrement est-il variable
        ' selon la requête spécifié?

        Dim Nombre As Integer
        Dim DBCourant As Database
        Dim Rst As Recordset

        Dim varxx1 As Long
        Dim varxx2 As Long
        Dim varxx3 As Long
        Dim datx As Date
        Dim datxx As String
        Dim Message, Requete As String
        Dim anx As Long
        Dim cnn as string

        Set DBCourant = CurrentDb()
        cnn = "V010"
        Requete = "SELECT [Table Vidéo].*, [Table Vidéo].Cassette FROM [Table Vidéo] WHERE (([Table Vidéo].Cassette)=" & """" & cnn & """" & ")"
        Set Rst = DBCourant.OpenRecordset(Requete)

        Nombre = Rst.RecordCount
        MsgBox ("Nombre d'enregistrements : " & Nombre)

        If (Nombre > 0) Then
        anx = 2004
        ' open recordset ("SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004" , _
        ' DbOpenDynaset, dbseechanges,dbPessimistic)

        ' rst.Open "SELECT * FROM [vin sur latte] WHERE [année récolte vin sur latte] = 2004", _
        ' cnn, adOpenDynamic, adLockOptimistic, adCmdText

        ' Requete = "SELECT [Table Vidéo].*, [Table Vidéo].Cassette FROM [Table Vidéo] WHERE (([Table Vidéo].Cassette)=" & """" & "v622" & """" & "))"
        ' varxx1 = rst("demande déblocage kg vin sur latte")
        ' varxx2 = rst("nouveau cumul")

        Rst.MoveLast
        Rst.MoveFirst

        varxx1 = Rst.Fields("Année")
        varxx2 = Year(Now)
        varxx3 = varxx2 - varxx1

        Message = "a1 = " & varxx1
        Message = Message & vbCrLf & "a2 = " & varxx2
        Message = Message & vbCrLf & "a3 = " & varxx3

        If Not Rst.EOF Then
        MsgBox Message
        Rst.Fields("Année") = varxx1
        Rst.Update
        Set Rst = Nothing
        Set DBCourant = Nothing
        End If
        Else
        MsgBox "Aucun bien ne répond aux critères !", vbExclamation
        End If

        End Sub
        '

        Maintenant, que voulez vous faire avec "cnn" ?

        Lupin