[Resolu] Requete SQL - traitement entre 2 tables-lancement macro avec parametre ruban

ildrad

XLDnaute Nouveau
Bonjour,

Je suis totalement débutant avec excel et le VBA. C'est pourquoi j'ai quelques questions de débutant à poser :(

Après de longues heures à arpenter le net, je viens vers vous afin de trouver un peu d'aide sur des points qui me paraissent basiques mais quauelss je ne trouve pas de reponses...

Première interrogation : J'ai un serveur SQL distant dans lequel sont présentes plusieurs grosses tables. Pour le moment je charge en mode bourrin (via le ruban : data/from others sources/from SQL server) les 2 tables dont j'ai besoin et je travaille dessus.
Dans la premiere table j'ai une colonne avec des numeros et d'autres colonnes contenant des données. Dans la seconde un colonne avec les meme numeros et d'autres colonnes contenant des données (differentes de celles du premier tableau bien sûr).
J'aimerai donc savoir s'il serait possible, à la place de charger l'ensemble des deux tableaux dans deux sheets différentes, de charger seulement les colonnes contenant les données m'interessant dans une seule table. Ayant fait un soupcon de SQL auparavant, il me semble qu'une requete SQL bien précise pourrait m'etre utile (j'aimerai ne selectionner que certaines colonnes de chacune des tables et certaines lignes en fonction dela valeur de certaines colonnes)

Typiquement avec deux tableaux comme ceci :

divers.PNG

Je suis quasi certain que c'est largement faisable avec des requetes SQL (qui ont l'avantage d'être effectués sur le serveur distant) mais je n'arrive pas à trouver l'endroit où les écrire dans excel ...



Seconde Interrogation : J'aimerai savoir si vous connaissez un moyen de lancer une macro avec un paramètre via le ruban. L'idée étant de créer plusieurs bouton sur le ruban et que chacun lance la meme macro mais avec un parametre d'entrée différent.

Et enfin, question bonus, savez-vous s'il est possible de modifier le ruban juste pour un fichier ? Ou les changements ne sont que personnels au ruban office de l'utilisateur qui va ouvrir le fichier.

Voilam je vous remercie deja beaucoup pour l'aide que vous avez pu m'apporter via les autres topics que j'ai pu lire sur ce forum. Et j'espère avoir été clair dans mes explications.

En espérant que vous pourrew m'aider.

Cordialement,
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Bonjour ildrad,

Bienvenue sur XLD

Si en haut à gauche de ton image ta table Table1 et en haut à droite ta table Table2, la requête SQL devrait être quelque chose du genre

select Table1.num, Table1.nom, Table1.data1, Table2.data4
from Table1
inner join Table2 on Table1.num = Table2.num
where Table2.data4 like 'r%'
 

ildrad

XLDnaute Nouveau
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Merci pour la réponse,

Mais en temps que débutant extrême, je ne sais pas comment lancer une requête dans excel (ou dans un code VBA). C'est là ma plus grnade question.

Cordialement,
 

tototiti2008

XLDnaute Barbatruc
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Re,

Avant de le faire en VBA, on va déjà voir pour le faire dans Excel
Il faut utiliser MS Query pour injecter du SQL vers une base de données externe
Au choix, soit tu as un DSN configuré sur ton poste, soit tu en crées un avec l'assistant MS Query
Va voir le tutoriel de ce côté là pour l'utilisation de Query, potentiellement ça permet de se connecter à SQL Server aussi

Excel Downloads - Accder des donnes externes

reviens si tu as des questions
 

ildrad

XLDnaute Nouveau
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Merci pour le pdf, j'ai eu la reponse à ma grande question, il me manquais le fichier .dsn, je n'avais qu'un .odc avec excel, j'ai donc du le créer grace au lien fourni dans le pdf, ca m'a grandement aidé !

Maintenant il faut que je trouve le moyen d'exécuter la requete SQL dans une macro (qui fait 3km maintenant vu qu'elle a été générée et que j'ai abusé des filtres à cause de l'interface graphique :) ).

Je repasse demain dans l'aprem si je me retrouve bloqué de nouveau, mais je pense avoir une piste grâce à un forum qui a l'air pas mal !

Mine de rien je passe d'un while sur 24000 lignes à un while sur 1600 lignes grace aux filtres mis dans la requete SQL, c'est agréable 8 et ca m'aurait économiser quelque chose comme 3-4 jours de code aussi :D, enfin j'aurai appris plein de chose au final)

Encore merci à toi pour l'aide apportée
 

ildrad

XLDnaute Nouveau
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Au final, je suis arrivé au bout de mes peines, voici le bout de code permettant de me connecter à la base SQL et de copier les données extraites dans une sheet :

"temp" est une feuille au préalablement créée, de plus les variable de connexion à la base ont été au préalablement créées et remplies

'Connexion to file
Set source = CreateObject("ADODB.Connection")
source.Open "Provider=SQLOLEDB;Data Source=" & SQL_server & "; Initial Catalog=" & SQL_catalog & "; User ID=" & SQL_login & "; Password=" & SQL_password

'SQL Request
texte_SQL = "SELECT what you yant FROM your base inner join an other base if you want a cross between bases WHERE" & _
"(variable='une valeur')" & _
"AND (variable Not Like 'chaine_de_caractères%')" & _
"ORDER BY a variable, an other variable if needed"
Set requete = CreateObject("ADODB.Recordset")
Set requete = source.Execute(texte_SQL)

'Paste data
Sheets("temp").Cells(2, 1).CopyFromRecordset requete

'Closing connexion
Set requete = Nothing
Set source = Nothing

Et la version dans les balises code :
Code:
     'Connexion to file
     Set source = CreateObject("ADODB.Connection")
     source.Open "Provider=SQLOLEDB;Data Source=" & SQL_server & "; Initial Catalog=" & SQL_catalog & "; User ID=" & SQL_login & "; Password=" & SQL_password
     
    'SQL Request
    texte_SQL = "SELECT what you yant FROM your base inner join an other base if you want a cross between bases WHERE" & _
        "(variable='une valeur')" & _
        "AND (variable Not Like 'chaine_de_caractères%')" & _
        "ORDER BY a variable, an other variable if needed"
    Set requete = CreateObject("ADODB.Recordset")
    Set requete = source.Execute(texte_SQL)
    
    'Paste data
    Sheets("temp").Cells(2, 1).CopyFromRecordset requete
     
    'Closing connexion
    Set requete = Nothing
    Set source = Nothing

A noter que la chaine "& _" permet d'aller à la ligne dans une requete SQL afin de la rendre plus claire à la relecture (et accessoirement de pouvoir faire une requete plus longue que (il me semble) 256 caratères car excel bloque les lignes plus longues que cela.

Au niveau des arguments transmis par un bouton du ruban, j'ai laissé tombé et j'ai utilisé des boutons classiques.

Encore merci pour votre aide précieuse.
 
Dernière édition:

tototiti2008

XLDnaute Barbatruc
Re : Requete SQL - traitement entre 2 tables - lancement macro avec parametre ruban

Bonjour,

Merci d'avoir posté ta solution
Pour les arguments transmis par le bouton du ruban, il faudrait expliquer ce que tu veux en détail, mais comme je n'ai pas Excel 2010 il m'étonnerais que je puisse y répondre, mais d'autres passeront par là :)
 

Discussions similaires

Statistiques des forums

Discussions
312 166
Messages
2 085 889
Membres
103 019
dernier inscrit
Eliot_1