Base de données SQL

fc59

XLDnaute Nouveau
Bonjour à tous.
Depuis quelque temps je teste différents produits de reporting genre starquery, myreport, qlikview, ...
Je me suis appercu en finalité qu'excel offrait de nombreuses possibilités.
Je me connecte sans problème à ma base de données sql et créé un tableau croisé dynamique.
Le petit "hic" (peut etre un grand) est que dans une feuille je n'arrive à me connecter qu'à une table or j'ai besoin de me connecter à plusieurs tables et faire des liens.
Exemple : dans ma table "lignes vente" je recupere les champs "montant" "date" et "code client". Je ne dispose pas dans cette table du champ "pays" qui se trouve dans ma table "clients".
Avec les outils de reporting standard je fais une requete sql sur les 2 tables et un lien entre le code client (clé primaire) qui se trouve dans les 2 tables.
Je peux alors avoir un report du chiffre d'affaire par pays.
Comment faire dans excel 2007 pour faire des liens entre différentes tables :confused:,
P.S. J'ai réussi à faire cette manip avec un ad-on excel qui s'appelle sql excel toolbar, mais je ne peux à la fin que copier les données dans excel sous forme d'un tableau standard.
J'aurais aimé faire cela directement dans excel en agissant sur plusieurs tables.
Merci d'avance de vos réponses d'expert.:)
fc59
 

juju_69

XLDnaute Occasionnel
Re : Base de données SQL

Hello,

J'utilise aussi excel pour récupérer un certains nombre de résultat de requêtes SQL de bases de données et les requêtes sont bien des requêtes multi tables.

A noter que je passe en vba pour lancer les requêtes. As tu essayé ?

@ +

Juju
 

juju_69

XLDnaute Occasionnel
Re : Base de données SQL

Hello,

Voici le code que j'utilise :

Sub Dossiers()
requete = "select dos_nodossier as Dossiers,dos_libelle as libelle from dossier,dossappli where dap_nodossier=dos_nodossier and dap_nomexec=""CCS5.exe"" and dos_nodossier<>""000STD"" group by dos_nodossier,dos_libelle order by dos_nodossier"

database = "ODBC;DRIVER=SQL Server;SERVER=" & Srv & ";WSID=" & Srv & "P;DATABASE=DB000000;UID=" & USerSql & ";PWD=" & MdPSql & ";QuotedId=No"

With Sheets("Dossiers").QueryTables.Add(Connection:=database, Destination:=Range("C8"))
.CommandText = requete
.FieldNames = True
.BackgroundQuery = False
.RefreshStyle = False
.SaveData = True
.AdjustColumnWidth = False
.PreserveFormatting = True
.Refresh BackgroundQuery:=False
End With
End Sub


A noter que je déclare une fonction pour les paramètres car ils peuvent changer. Dans ton cas ce n'est peut être pas nécessaire :


Public Function Srv() As String 'nom du serveur
Srv = Sheets("Paramètres").Range("C5").Value
End Function

Public Function USerSql() As String 'user sql
USerSql = Sheets("Paramètres").Range("C8").Value
If Sheets("Paramètres").Range("C8").Value = "" Then USerSql = "ADMIN"
End Function

Public Function MdPSql() As String 'Mdp Sql
MdPSql = Sheets("Paramètres").Range("D8").Value
If Sheets("Paramètres").Range("D8").Value = "" Then MdPSql = "ADMIN"
End Function

J'espère que çà pourra t'aider
 

juju_69

XLDnaute Occasionnel
Re : Base de données SQL

Si tu le souhaites, transmets moi un fichier exemple avec les requêtes souhaitées, avec l'emplacement des résultats + les infos de connexion (serveur, usersql, mdpsql) je pourrai essayer d'adapter les requêtes à ton fichier

@ +
 

abelmasengu

XLDnaute Nouveau
Re : Base de données SQL

Bonjour,
ce que j'aimerais comprendre a quel moment tu copies les données récuperées de sql dans les différents champs de la feuille sql.

Pourrais tu me donner le code complet s'il te plait ?

Merci.












Hello,

Voici le code que j'utilise :

Sub Dossiers()
requete = "select dos_nodossier as Dossiers,dos_libelle as libelle from dossier,dossappli where dap_nodossier=dos_nodossier and dap_nomexec=""CCS5.exe"" and dos_nodossier<>""000STD"" group by dos_nodossier,dos_libelle order by dos_nodossier"

database = "ODBC;DRIVER=SQL Server;SERVER=" & Srv & ";WSID=" & Srv & "P;DATABASE=DB000000;UID=" & USerSql & ";PWD=" & MdPSql & ";QuotedId=No"

With Sheets("Dossiers").QueryTables.Add(Connection:=database, Destination:=Range("C8"))
.CommandText = requete
.FieldNames = True
.BackgroundQuery = False
.RefreshStyle = False
.SaveData = True
.AdjustColumnWidth = False
.PreserveFormatting = True
.Refresh BackgroundQuery:=False
End With
End Sub


A noter que je déclare une fonction pour les paramètres car ils peuvent changer. Dans ton cas ce n'est peut être pas nécessaire :


Public Function Srv() As String 'nom du serveur
Srv = Sheets("Paramètres").Range("C5").Value
End Function

Public Function USerSql() As String 'user sql
USerSql = Sheets("Paramètres").Range("C8").Value
If Sheets("Paramètres").Range("C8").Value = "" Then USerSql = "ADMIN"
End Function

Public Function MdPSql() As String 'Mdp Sql
MdPSql = Sheets("Paramètres").Range("D8").Value
If Sheets("Paramètres").Range("D8").Value = "" Then MdPSql = "ADMIN"
End Function

J'espère que çà pourra t'aider
 

David Aubert

XLDnaute Barbatruc
Administrateur
Modérateur
Re : Base de données SQL

Bonjour,

Est ce que tu as essayé d'enregistrer ta requêtes multi table dans MS QUERY et de l'appeler à partir d'Excel?

Sinon il y cet utilitaire dans la centrale de téléchargement qui peut aussi être intéressant :
Lien supprimé

Et puis si tu veux nous faire profiter de ton expérience sur "starquery, myreport, qlikview, ..." tu peux venir nous en parler dans le forum décisionnel :
Applications pour le décisionnel - Excel Downloads Forums

Je suis très intéressé par des retours d'expérience sur ces outils!

Bonne journée

David
 

abelmasengu

XLDnaute Nouveau
Re : Base de données SQL

Bonjour,

1. si je dois mettre mes résultats dans plusieurs colonnes excel, comment je fais ?
Ma requette devrait me renvoier le nom, l'organisation, l'adresse .
Dans excel, je voudrais que les données s'affichent dans chaque champs correspondant.

2. a quel moment tu fais appel a tes fonctions pour se connecter a la bd ?

3. que veulent dire ces instructions ?
.FieldNames = True
.BackgroundQuery = False
.RefreshStyle = False
.SaveData = True
.AdjustColumnWidth = False
.PreserveFormatting = True
.Refresh BackgroundQuery:=False


Merci de m'eclairer
 

juju_69

XLDnaute Occasionnel
Re : Base de données SQL

Au départ j'ai simplement fait de l'enregistreur de macro que j'ai adapté ensuite, donc je ne sais pas trop à quoi corespond chaque ligne. Sinon pour le résultat, il me l'affiche bien sur 2 colonnes (dos_nodossier as Dossiers,dos_libelle as libelle ) en C8 et D8 jusqu'à Cx et Dx
 

Discussions similaires

Réponses
27
Affichages
1 K
Réponses
15
Affichages
1 K
Réponses
0
Affichages
371

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 104
dernier inscrit
JEMADA