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

  • Votes
  • Date
  • Date décroissante
  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
    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,

        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