Excel et base de données SQL server [Résolu/Fermé]

Signaler
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
-
 gipet -
Bonjour,

Je souhaiterai apprendre à programmer en VBA depuis Excel pour aller en lecture/écriture dans une base de donnée SQL Serveur.

Existe-t-il un tutorial, un site ou un livre qui me permettrait de me former. Je suis autodidacte en informatique...

Si possible en français.

Merci d'avance.

ppil

11 réponses

Après encor quelques heures de recherche j'ai finalement trouvé ce que je voulais.

Il suffit d'aller dans le menu d'Excel, Données ,Données Externes.

Il y a plusieur technique , la premiere asssez basique qui ne permet pas faire vraiment de tri. ( Importer des donées)

Et l'autre que j'ai choisis qui est créer une requête. Avant de choisir cette technique, il faut créer un lien ODBC.
Je vous rassure j'y suis arrivé et je n'y avas jamais touché.

Je vais donc décrir la technique que j'ai choisis :

1- Créer un lien ODBC : Aller dans démarer->Paneau de configuration ->Outils d'admoinistration ->Sources de données (ODBC).Pour mon cas ma bdd etait sur un serveur distant et ma base de bdd est en sql donc cliquer sur l'onglet: Sources de données System puis Ajouter.
Une liste s'affiche aller tout en bas pour choisir SQL Server, cliquer sur terminer.
suivez l'assistant et tout devrait bien se passer.


2-Sous Excel aller dans le menu, Données ,Données Externes,créer une requête. (Important le composant MSQUERY doit etre installé,il ne l'est pas forcement par defaut, il va falloir retrouver le cd qui doit trainer sous la pouciere ^^)
-Choisir votre lien ODBC.
-Choisir votre table et vos champ.

Après je vous laisse découvrir les jois d'SQL.

dans mon cas ma bdd était assez grosse et pour eviter d'importer des information en doublons dans la requete SQL je vous conseil d'utiliser la fonction DISTINCT exemple :

SELECT DISTINCT (MATABLE.MATABLE_MONCHANP1)

Bonne chance a tous.
28
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60511 internautes nous ont dit merci ce mois-ci

c'est simple et efficace, c'est exactement ce que je cherchais
Messages postés
2
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
4 janvier 2008
11
Il ya un moyen mais je ne sais si c'est suffisant, sachant que ça ne fait que de la lecture simple:
- Créer un fichier Excel (2003).
- Aller dans Outils > Macro > Visual Basic Editor.
- Ajouter les références suivantes : Microsoft DAO 3.6 Object Library et Microsoft ActiveX Data Objects 2.8 Library.
- Dans la fenêtre VB qui s'ouvre créer un nouveau module depuis l'onglet de gauche et y insérer ce code :
Public cN As ADODB.Connection
Public rs As ADODB.Recordset
Public Sub conNect()
    Set cN = New ADODB.Connection
    dbPath = paTh
    cN.ConnectionString = "Provider=SQLOLEDB;Data Source=Nom_Du_Serveur;Initial Catalog=Nom_de_La_Base; User ID=Votre_Login;Password=Votre_Password;"
    cN.Open
End Sub

- Double-cliquer sur ThisWorkBook (dans l'explorateur d'objects) et insérer ce code:
Private Sub Workbook_Open()
Module1.conNect
Set rs = New ADODB.Recordset
rs.Open ("select * from Ma_Table"), cN
i = 1
While Not rs.EOF
        For j = 1 To rs.Fields.Count - 1
            Feuil1.Cells(i, j) = rs(j - 1)
        Next
i = i + 1
rs.MoveNext
Wend
End Sub

- Sauvegarder le tout.
- Fermer et ouvrir le fichier XLS créé.
Les données de la table se chargent dans la Feuille Feuill1
nous sommes en 2013 et cette solution m'a bien servie. BIZZ
merci, ça marche très bien
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
12
Bonjour,

Pour ceux que ça intéressent, j'ai trouvé un livre qui répond à ma question.

Voici le lien:
https://www.pearson.ch/Informatik/PearsonFrance/EAN/9782744019890/Gestion-avancee-des-donnees-sous-Excel-Ed-CD

Je viens de le recevoir, il ne me reste plus qu'à ...

Salutations,

ppil
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
12
Merci Brolino,

Mais mon but est d'apprendre.

Je souhaiterai comprendre pourquoi et comment on doit utiliser telle ou telle instruction.

Je me débrouille en VBA de base, mais concernant les instructions pour SQL serveur je nage.

Donc je suis à la recherche de document qui me permettrait d'apprendre.

Brolino où as-tu appris pour arriver à écrire ce code?

merci d'avance
ppil
Messages postés
2
Date d'inscription
jeudi 25 octobre 2007
Statut
Membre
Dernière intervention
4 janvier 2008
11
Bonjour ppil,

D'abord, pour accéder à une source de données, SQL Server en l'occurence, il faut :
1 - Se connecter à cette source de données :
1 - 1 - Ajouter les références requises, pour pouvoir déclarer l'objet de connection.
1 - 2 - Déclarer l'objet de connection :
Public cN As ADODB.Connection

1 - 3 - Instancier l'objet de connection :
Set cN = New ADODB.Connection

1 - 4 - Définir une connection string (chaine de connection) et l'affecter à la connection.Cette chaine doit renseigner sur :
- Le Provider (fournisseur de BDD ou SGBD)
- Le nom de la BDD.
- Les paramètres de login et mot de passe (optionnels).
cN.ConnectionString = "Provider=SQLOLEDB;Data Source=Nom_Du_Serveur;Initial Catalog=Nom_de_La_Base; User ID=Votre_Login;Password=Votre_Password;"

1 - 5 - Ouvrir la connection en utilisant l'object de connection instancié (1-3) et la connection string (1-4) :
cN.Open

ignore la ligne (
dbPath = paTh
)

2 - Utiliser un recordset pour accéder aux données:
Le recordset est un objet qui parcourt une le résultat d'une requête SQL.
2 - 1 - Déclarer le recordset:
Public rs As ADODB.Recordset

2 - 2 - Instancier l'objet de connection :
Set rs = New ADODB.Recordset

2 - 3 - Exécuter la requête SQL en utilisant le recordset et la connection instanciés:
rs.Open ("select * from Ma_Table"), cN

"cN" étant le nom de la connection utilisée.
Le recordset "rs" est ainsi une sorte de table virtuelle dont le contenu reflète la requête SQL utilisée comme paramètre.
Ce recordset peut être parcouru, ou utlisé pour faire une mise à jour ou une suppression par exemple.
rs(0) => le contenu de la première colonne
rs("Nom") => le contenu de la colonne "Nom"
rs.movenext => le recordset navigue vers l'enregistrement suivant.

Il y a plein d'autres choses possibles, mais je te laisse les découvrir vu que l'interface de VBA facilite l'apprentissage.

Quand à ta question par rapport à mes sources d'apprentissage, j'ai quelques bases (minimes) du temps de mes études, mais le tout est de télécharger des projets ou des codes source déjà prêts, et d'essayer de les comprendre et de trouver une logique à tout ça.
Les documentations peuvent aussi beaucoup t'aider, je te conseille d'aller voir sur www.developpez.com.
Peut être que pour un débutant ce serait préférable de créer un lien ODBC depuis access vers sql server et apprendre le VBA via access! ;-)
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
12
Merci Brolino,

C'est vrai, "petit à petit l'oiseau fait son nid".

Je trouve dommage qu'il n'a pas d'ouvrage sur le sujet.

On trouve beaucoup de livres ou de tutoriaux pour débutant, mais dès que l'on veut faire un pas suivant, il ne reste que la débrouillardise.

Enfin, j'ai déjà un bout de ma réponse. Pour le reste ... j'irais voir sur www.developpez.com


ppil
Bonjour à vous,

Après quelques recherche sur notre amis à tous... Google pour trouver un moyen d'extraire des infos d'une base de donées SQL sur un fichier Excel, j'ai trouvé ce post.

Ne connaisant pas grand chose... pour ne pas dire rien au VBA j'ai donc essayé l'exemple de brolino mais sans succes :-(

Je n'ai pas de message d'erreur , mais mes feuilles1,2 et 3 sont vides.

Dois-je créer un lien ODBC ? Comment ?
Bonjour tt le monde
J'ai un p'tit problème depuis un certain moment à propos de l'utilisation de la création de requête, paramétrer etc.. j'ai déja msquery qui est installé sur mon ordi, mais j'aimerai bien trouver la leçon qui explique "comment on fait pour créer une requête etc.... et puis des exemples d'exos qui va avec.
Merci d'avance
Tomawak
Messages postés
2
Date d'inscription
mardi 24 juin 2008
Statut
Membre
Dernière intervention
24 juin 2008

Bonjour tout le monde,

SVP les amis, puis-je vous demandez votre aides pour résolu un problème ?

le problème c'est que : j'ai un tableau dans la base de donnée Tab1 et Tab2 et j'ai les données dans un fichier Excel, je voudrais savoir comment importer les données de ce ficher F1.xls ?

mais il y a un truc c'est que : dans la Tab1 il y a (code,ID) et la Tab2 il y a (Num,Code,Dat,Km,Qte) et dans le fichier Excel il y a (ID,Dat,Km,Qte), alors je voudrais importer les données de ce fichier ver la Tab2,mais il n y a pas le code,alors il faut mettre une Requête de jointure.

SVP s'il y a qlq1 qui peut m'aidais a résoudre ce problème .
Messages postés
33
Date d'inscription
lundi 1 octobre 2007
Statut
Membre
Dernière intervention
8 octobre 2009
12
Merci bnb,

Mais je ne souhaite pas passer/transiter par Access, pour divers raison ;-(
hbh,bjh,j,