Problème d'automatisation de Recordset en Vba

  • Initiateur de la discussion Ludo-ly
  • Date de début
L

Ludo-ly

Guest
Bonjour à tous,

J'essaye d'automatiser au maximum un formulaire dont les Listbox (9 au total) sont remplies grâce à des requêtes Access.

La méthode fonctionne :
' Déclarations
Dim Db As Database
Dim Rs1, Rs2, Rs3, Rs4, Rs5, Rs6, Rs7, Rs8, Rs9 As Recordset
Dim Produit(), Fournisseurs(),...,Paiement() As Variant
'Ouverture d'une BD
Set Db = DBEngine.OpenDatabase("BD des ventes")
Set Rs1 = Db3.OpenRecordset("Req_Liste_Produits")
Set Rs2 = Db3.OpenRecordset("Req_Liste_Fournisseurs")
...
Set Rs9 = Db3.OpenRecordset("Req_Liste_Type_Paiement")
' Calcul du nombre d'enregistrements retourné par la requête SQL/Access
' reproduit 9 fois de Rs1 à Rs9
nb_enr(0) = Rs1.RecordCount
...
nb_enr(8) = Rs9.RecordCount
' remplissage des Listbox reproduit 9 fois de Rs1 à Rs9
j = 0
ReDim Produits(nb_enr(1), 2)
If Not Rs1.EOF Then
Rs1.MoveFirst
Do
Produits(j, 0) = (Rs1![Code Produits])
Produits(j, 1) = (Rs1![Libellé Produits])
Rs1.MoveNext
j = j + 1
Loop Until Rs1.EOF
End If
...

Maintenant, afin de raccourcir et d'automatiser mon code au maximum, j'aimerais utiliser des variables tableaux à la place des Rs1 à Rs9 et des noms de Listbox Produits à Payment

J'ai essayé ceci mais cela ne fonctionne pas au niveau recordset :
' Déclarations
Dim TableRs() as RecordSet
' Calcul du nombre d'enregistrements retourné par la requête SQL/Access
ReDim nb_enr(9)
ReDim TableRs(9)
For i = 0 To 9
TableRs(i) = "Rs" & i
Next i
For j = 1 To 9
TableRs(j).MoveLast
nb_enr(j) = TableRs(j).RecordCount
Next j


Quelqu'un aurit-il une solution pour utiliser une variable incrémentable comme nom de recordset plutôt que d'avoir à réécrire autant de fois que de recordset toutes les lignes contenant "Rs..." ?

Ludovic,
Merci.
 
M

Michel_M

Guest
Bonjour,

Ne connaissant pas le message d'erreur, il est difficile d'essayer de t'aider...

mais le i=0 me parait bizarre car tu crées ainsi Rs0 qui n'existe pas....

et le 9 (0 à 9) fait 10 "cases" au lieu de 9

Peut-être est ce cela?...

A+
Michel (au boulot)
 
L

Ludo-ly

Guest
Merci Michel pour ta réponse,

En fait, si j'ai bien compris le message d'erreur, c'est qu'une variable (dans mon cas TableRs(j)) n'a pas l'air d'être acceptée à a place du recordset Rs1, Rs2, ... même si son contenu est pourtant bien égal à Rs1, Rs2, ...

Voici le message d'erreur renvoyé :
. si TableRs() est déclaré en RecordSet : "Utilisation incorecte de la propriété" au niveau du code "TableRs(i) = "Rs" & i"
. si TableRs() est déclaré en RecordSet : "Erreur d'exécution 424 : Objet requis" au niveau du code "TableRs(j).MoveLast"

PS : je n'ai aucun problème avec i=0 qui crée Rs0, enfin je pense, car je ne l'utilise pas vu que j=1 à 9 donnant la valeur à TableRs(j)=Rs1 à Rs9

A+, Ludovic
 
L

Ludo-ly

Guest
Petite erreur dans ma réponse à Michel :

Voici le message d'erreur renvoyé :
. si TableRs() est déclaré en RecordSet : "Utilisation incorecte de la propriété" au niveau du code "TableRs(i) = "Rs" & i"
. si TableRs() est déclaré en String : "Erreur d'exécution 424 : Objet requis" au niveau du code "TableRs(j).MoveLast"
 
L

Ludo-ly

Guest
RE-petite Erreur dans ma réponse et complément de test :

Voici le message d'erreur renvoyé :
. si TableRs() est déclaré en RecordSet : "Utilisation incorecte de la propriété" au niveau du code "TableRs(i) = "Rs" & i"
. si TableRs() est déclaré en Variant : "Erreur d'exécution 424 : Objet requis" au niveau du code "TableRs(j).MoveLast"
. si TableRs() est déclaré en String : "Erreur de compilation : Qualificateur incorrect" au niveau du code "TableRs(j).MoveLast"
 
M

Michel_M

Guest
Re: Problème d'automatisation de Recordset en Vba (retour au forum)

Bonjour,

Je viens de jeter un oeil avant d'aller au chagrin et je ne vois pas (je reste septique et un peu sur mon 1° message mais...)

Vu ce qui m'attend au dit boulot, je ne sais pas si j'aurai beaucoup de temps...

Donc, retour au forum.

Désolé
Michel
 
L

Ludo-ly

Guest
Merci Michel pour ton jeté d'oeil,

En ce qui concerne ton 1° message, j'ai réalisé la modification suivante, mais cela ne change rien aux messages d'erreur :

For i = 1 To 9
TableRs(i) = "Rs" & i
Next i

Merci encore,
Ludovic
 

Statistiques des forums

Discussions
312 235
Messages
2 086 476
Membres
103 227
dernier inscrit
maloalek