XL 2013 Function--> récupérer recordset

  • Initiateur de la discussion Initiateur de la discussion hctad1
  • 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 !

hctad1

XLDnaute Junior
Bonjour,
comme j'ai (très) souvent cette requête à faire pour récupérer l'id_produit dans ma base:
select products_id from products where products_model="ma_ref";

Je souhaite me créer une petite function de ce type dans personal.xlsm
=model_to_id(la_cellule) ou ma_ref est dans "la_cellule"

Je bute sur la méthode pour récupérer le recordset (qui sera toujours unique) et le mettre en résultat.

Une idée.
VB:
Function model_to_id(la_cellule1)


   Dim Password As String
    Dim SQLStr As String
    Dim Server_Name As String
    Dim User_ID As String
    Dim Database_Name As String
    Dim table_name As String
  
  
    Set Rs = CreateObject("ADODB.Recordset")
    Server_Name = "mon_serveur"
    Database_Name = "ma_base"
    User_ID = "mon_utilisateur"
    Password = "monmotdepasse"
      Set cn = CreateObject("ADODB.Connection")
    cn.Open "Driver={MySQL ODBC 3.51 Driver};Server=" & _
            Server_Name & ";Database=" & Database_Name & _
            ";Uid=" & User_ID & ";Pwd=" & Password & ";"
    
    SQLStr = "select products_id from products where products_model='" & la_cellule1 & "'"
    Rs.Open SQLStr, cn, adOpenStatic

    'je colle le resultat   dans la bonne cellule
model_to_id = ????
End Function
 
Re,

Je viens de tester sur un de mes fichiers et
model_to_id = cn.Execute("select id from [journal$] where id=" & la_cellule1.Text & "")(0)
Et ça fonctionne comme attendu
Quant au with c'est une bonne idée, l'essentiel étant que les objets soient détruits correctement que ce soit comme ça ou autrement.

Cordialement
 
Oui car ta requête ne retourne pas Eof !

En revanche tu peux faire un getstring sans problème

Dans ce genre de fonction je n'utilise pas de variable , sauf peut être SQL,que des with.

Les informations de connexion peuvent être des constantes public dans un module standard

VB:
Public Const Password = "monmotdepasse", Server_Name = "mon_serveur", User_ID = "mon_utilisateur", Database_Name = "ma_base"
Public Const  connexion= "Driver={MySQL ODBC 3.51 Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & Password & ";"
Function model_to_id(la_cellule1)
With CreateObject("ADODB.Connection")
    .Open connexion
        With .execute("select products_id from products where products_model='" & la_cellule1 & "'")
            If Not .EOF Then model_to_id = .Fields(0)
            .Close
        End With
    .Close
End With
End Function
 
Dernière édition:
Hum, j'ai bien un résultat à ma requête quand je controle par ailleurs.

Pour autant quelle que soit la méthode: copyfromrecordset, rs(0), cn.execute(... etc.
ça me renvoit #VALEUR!

Au mieux, je récupère un 0 avec
rs("products_id")(0)

La meme chose dans une sub() fonctionne.

Je sèche.
 
🤔 oui je sèche.
en modifiant mon code:
soit j'arrive à 0 en résultat,
soit #valeur!,
soit la capture ci-desssous.

C'est aussi ce que j'obtiens avec ton code copié/collé sans édition aucune.

c'est forcément sous mon nez mais je ne trouve pas.
Capture.JPG
 
Dernière édition:
si products_id est integer
Code:
Public Const PassWord = "monmotdepasse", Server_Name = "mon_serveur", User_ID = "mon_utilisateur", Database_Name = "ma_base"
Public Const Connexion= "Driver={MySQL ODBC 3.51 Driver};Server=" & Server_Name & ";Database=" & Database_Name & ";Uid=" & User_ID & ";Pwd=" & PassWord & ";"
Function model_to_id(la_cellule1 As String) As interger
With CreateObject("ADODB.Recordset")
    .Open "select products_id from products where products_model='" & la_cellule1 & "'", Connexion, 1, 3
    If Not .EOF Then model_to_id = .Fields(0)
    .Close
End With
End Function
 
Dernière édition:
- 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

Discussions similaires

Réponses
33
Affichages
4 K
Réponses
8
Affichages
11 K
Retour