Bonjour!

J'ai fait un petit outil, qui marche, mais qui n'est pas très propre vu que je débutais (et je ne maitrise pas vraiment, j'adapte, je teste, ça prend du temps donc!)

Pour faire plus propre, je veux essayer de rajouter des fonctions auxquelles je ferai appel.
Seulement en créant ces fonctions j'ai toujours des problèmes "Objet Requis" quand je cherche par exemple à avoir la valeur d'une liste box contenue dans mon Userform.

Pour illustrer tout ça :


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub Attachement_Aff_Click()
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
 
Cn.Open "dsn=" & BASE_IBI & "" ' ouverture de la connexion à la base
 
Rs.Open "Select * from affaires where afNumero = '" & Attachement_Aff.Value & "';", Cn
While Rs.EOF = False
'Label9.Caption = Rs.Fields(2).Value
Label9.Caption = Rs!afDescriptC.Value
Rs.MoveNext
Wend
Rs.Close ' Pour fermer le Recordset
Cn.Close ' \\  Pour ne pas fermer la connexion
Set Rs = Nothing ' Pour vider le RecordSet
Set Cn = Nothing ' \\ Pour ne pas vider la connexion
Label9.Visible = True
End Sub
Sauf que là j'ai beaucoup d'éléments récurrents, que j'utilise souvent (Set... Rs.close etc...)

Donc je crée la fonction suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub Connexion_Base()
 
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
 
Cn.Open "dsn=" & BASE_IBI & "" ' ouverture de la connexion à la base
 
Call Remp_Affaires
Rs.Close ' Pour fermer le Recordset
Cn.Close ' \\  Pour ne pas fermer la connexion
Set Rs = Nothing ' Pour vider le RecordSet
Set Cn = Nothing ' \\ Pour ne pas vider la connexion
 
End Sub
Qui me servirait de "tronc commun", et appellerait la fonction suivante (car déclarer en variables globales mes commandes sql etc... ça ne marchait pas en dehors d'une procédure)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Function Remp_Affaires()
Code_Connexion = "Rs.Open ""Select * from affaires where afNumero = '" & Attachement_Aff.Value & "';"", Cn"
Code_Connexion = Code_Connexion & "While Rs.EOF = False"
Code_Connexion = Code_Connexion & "Attachement_Label_Desc.Caption = Rs!afDescriptC.Value"
Code_Connexion = Code_Connexion & "Rs.MoveNext"
Code_Connexion = Code_Connexion & "Wend"
End Function
Attachement_Aff.Value est la valeur que je veux récupérer de la listbox sur laquelle je clique (et qui lance le code à ce moment là)
et Attachement_Label_Desc.Caption est un label que je remplis avec certaines infos récupérées avec la requête SQL.

Or justement, ce sont ces deux là qui bloquent et ne sont pas reconnus.

J'ai testé de déclarer Attachement_Aff.Value en variable, ça marche, mais je ne trouve pas ça optimal, je devrais pouvoir récupérer cette valeur sans avoir à déclarer une variable la récupérant non ?

Merci pour vos conseils.