Problème d'automatisation de Recordset en Vba

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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)
 
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
 
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"
 
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"
 
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
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour