Activé la requet SQL avec du VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Mberaud
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 22 novembre 2018
Version d'Excel : 2016 FR

Message par Mberaud » 2 avril 2019, 16:37

Bonjour à tous :) ,

Je souhaiterai mettre une requet SQL (déjà faite et fonctionnelle )dans du VBA afin de pouvoir aller chercher ma base de données en automatique ?

Avez vous des pistes ...... :oops:

D'avance merci :D
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'097
Appréciations reçues : 182
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 2 avril 2019, 17:54

Bonjour,

Oui, on peux indiquer des pistes. Mais il faudrait d'abord connaitre le support de la base : Access?, Dbase? MySql? Sql-Server? Oracle?

Pierre
M
Mberaud
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 22 novembre 2018
Version d'Excel : 2016 FR

Message par Mberaud » 2 avril 2019, 18:06

Bonjour pierre ,

Merci de prendre le temps de me répondre :)

le support de base : MYSQL

ci dessous la requet en question

SELECT t.id as id_statut,a.id,t.libelle as statut,DATE_FORMAT(date_cloture,'%d-%m-%Y %H:%i') as DateCloture
,revendeur,u1.Prenom as Declenche_Prenom,u1.Nom as Declenche_Nom,u2.Prenom as Suivi_Prenom,u2.Nom as Suivi_Nom
,a.telephone,l.enseigne,code_orma,telephone_appel,code_orma_modif_clot,telephone_2
FROM att a,att_typecloture t,utilisateurs u1, utilisateurs u2,att_livraison l
WHERE t.id = a.statut
AND a.statut > -1
AND (
( t.id BETWEEN 5 AND 9 ) OR t.id = 12 OR t.id = 13
)
AND u1.UserId = a.declenche_par
AND u2.UserId = a.suivi_par
AND a.id = l.att_id
AND a.date_create BETWEEN '2019-01-01 00:00:00' AND '2019-01-31 23:59:59'
ORDER BY date_cloture DESC
Avatar du membre
pierrep56
Membre impliqué
Membre impliqué
Messages : 1'097
Appréciations reçues : 182
Inscrit le : 18 juin 2014
Version d'Excel : 2016

Message par pierrep56 » 2 avril 2019, 18:29

Ok,

Pour une base Mysql, d'abord un script de connexion et de déconnexion (en renseignant utilement les parties "perso" (adresse_serveur, nom_de_la_base, identifiant, mot_de_passe) :
Public Cnx As Object, Rst As Object

Sub Connect_MySql(Optional x As Byte)
Dim Db As String

    Set Cnx = CreateObject("ADODB.Connection")
    Cnx.Provider = "MSDASQL"
    With Sheets("config")
        Db = "DRIVER={MySQL ODBC 5.1 Driver};" & _
             "SERVER= adresse_serveur;" & _
             "DATABASE= nom_de_la_base;" & _
             "USER= identifiant;" & _
             "PASSWORD= mot_de_passe;" & _
             "Option=3"
    End With
    Cnx.Open Db
    Set Rst = CreateObject("ADODB.Recordset")
End Sub


Sub Close_Cnx(Optional x As Byte)
    On Error Resume Next
    If x > 0 Then Rst.Close
    Cnx.Close
    Set Cnx = Nothing
    Set Rst = Nothing
End Sub
Ensuite pour un SELECT (dont le résultat est ici collé en "Feuil1"), on écrit une procédure du genre :
Sub Lire()
Dim Req As String, T As Variant

    On Error GoTo errhdlr
    Connect_MySql
    
    Req = "SELECT t.id as id_statut,a.id,t.libelle as statut, " & _
          " DATE_FORMAT(date_cloture,'%d-%m-%Y %H:%i') as DateCloture, " & _
          " revendeur,u1.Prenom as Declenche_Prenom,u1.Nom as Declenche_Nom, " & _
          " u2.Prenom as Suivi_Prenom,u2.Nom as Suivi_Nom,a.telephone, " & _
          " l.enseigne,code_orma,telephone_appel,code_orma_modif_clot,telephone_2 " & _
          " FROM att a,att_typecloture t,utilisateurs u1, utilisateurs u2,att_livraison l " & _
          " WHERE T.ID = a.statut " & _
          " AND a.statut > -1 " & _
          " AND (( t.id BETWEEN 5 AND 9 ) OR t.id = 12 OR t.id = 13) " & _
          " AND u1.UserId = a.declenche_par " & _
          " AND u2.UserId = a.suivi_par " & _
          " AND a.id = l.att_id " & _
          " AND a.date_create BETWEEN '2019-01-01 00:00:00' AND '2019-01-31 23:59:59' " & _
          " ORDER BY date_cloture DESC "
          
    Rst.Open Req, Cnx
    If Not (Rst.EOF And Rst.BOF) Then
        Rst.MoveFirst
        T = Rst.GetRows
        With Sheets("Feuil1")
            .Range("A1").Resize(UBound(T, 2) + 1, UBound(T, 1) + 1) = Application.Transpose(T)
        End With
    End If
    Close_Cnx
    Exit Sub
    
errhdlr:
    Close_Cnx
    MsgBox "Lire - Erreur " & Err.Number & vbCrLf & Err.Description
End Sub
Pierre
1 membre du forum aime ce message.
M
Mberaud
Jeune membre
Jeune membre
Messages : 20
Inscrit le : 22 novembre 2018
Version d'Excel : 2016 FR

Message par Mberaud » 5 avril 2019, 10:41

Super

Merci pierre :mrgreen: :mrgreen:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message