A voir également:
- Probleme de variable vba avec where
- Vba range avec variable ✓ - Forum VB / VBA
- Impossible de créer le fichier de travail. vérifiez la variable d'environnement temp ✓ - Forum Word
- Msgbox vba variable ✓ - Forum VB / VBA
- Find vba - Astuces et Solutions
3 réponses
Utilisateur anonyme
4 août 2004 à 15:59
4 août 2004 à 15:59
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
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
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
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
Utilisateur anonyme
7 août 2004 à 22:10
7 août 2004 à 22:10
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
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