Bonjour le forum,
Je connais le principe des SQL.REQUEST, MS.QUERY, Données => Données Externes => Requêtes (etc ...) et autres, j'en ai déjà fait, pas de soucis.
Très bien quand il s'agit d'interroger un ersatz de base de données stockée dans un classeur excel autre que le classeur applicatif.
Une petite question cependant, quand il s'agit d'interroger une table stockée dans une feuille du classeur applicatif, faut-il également passer par Données => Données externes, ou existe-t-il une méthode pour travailler en interne ?
Je m'explique, j'ai, pour l'exemple, une feuille de données nommée "Personne" (nom VBA = sh_Personne), dans laquelle je référence un ID, un NOM, un PRENOM, un AGE, un SEXE (H/F), et une foreign key ID_VILLE (pour faire le lien sur la table Ville).
Une deuxième feuille, du même classeur, nommée "Ville" (nom VBA = sh_Ville) me sert à stocker les villes.
Une troisième feuille, toujours du même classeur, nommée "Resultats" (nom VBA = sh_Resultats) me sert à afficher mes résultats pour travailler dessus.
Hors, j'aimerais pouvoir filtrer ma table Personne pour ne garder que les enregistrements qui correspondent à mes critères, tout en gardant la jointure avec la table Ville (d'autres critères possibles à ce niveau).
Et pour faire ça, j'aimerais vraiment passer par SQL (le classeur fournit n'est qu'un exemple de test, pour que je m'essaie au SQL sur Excel, mon projet actuel est beaucoup beaucoup plus gros, mais le principe après reste identique).
En exemple de requête SQL, je pourrais dire quelque chose comme ça:
"SELECT
Personne.ID AS ID_P, Personne.Nom, Personne.Prenom, Personne.Age, Personne.Sexe, Personne.FK_ID_VILLE,
Ville.ID AS ID_V, Ville.Ville, Ville.CP
FROM
Personne
INNER JOIN Ville ON Personne.FK_ID_VILLE = Ville.ID
WHERE
Personne.Nom LIKE "*VI*"
AND Ville.Ville LIKE "*a*"
"
Ou, si la méthode INNER JOIN n'est pas faisable, à l'ancienne:
"SELECT
Personne.ID AS ID_P, Personne.Nom, Personne.Prenom, Personne.Age, Personne.Sexe, Personne.FK_ID_VILLE,
Ville.ID AS ID_V, Ville.Ville, Ville.CP
FROM
Personne, Ville
WHERE
Personne.FK_ID_VILLE = Ville.ID
AND Personne.Nom LIKE "*VI*"
AND Ville.Ville LIKE "*a*"
"
Pour les deux requêtes, les résultats retournés sont les suivants:
1 - LAVIRE - Thierry - 26 - H - 1 - 1 -Bordeaux - 33000
2 - LAVIRE - Marie - 22 - F - 2 - 2 - Talence - 33400
7 - LEVIEU - Caroline - 20 - F - 2 - 2 - Talence - 33400
Mon objectif est de pouvoir interroger mes tables en SQL pour générer une "vue", une table préformatée, qui est construite à partir d'une requête SQL, et sur laquelle je viens travailler avec VBA, de sorte de n'être jamais en direct sur mes données base.
Autre intérêt des requêtes SQL: ça m'éviterait les boucles et conditions de recherches et de filtres, ce qui serait un gain de temps très appréciable.
Le problème étant qu'à part MS.QUERY, je ne sais pas comment faire du SQL sur Excel, et MS.QUERY a le défaut de passer par une connexion ODBC (qui est très bien en soi, mais qui implique une connexion externe, alors que je cherche précisément à travailler en interne).
De fait, ne sachant pas vraiment pas où commencer cet aspect SQL, je n'ai pas produit de code VBA dans ce sens.
Désolé pour le pavé,
Merci à tous/toutes qui auront lu ce texte,
Merci d'avance à ceux et celles qui répondront,
Cordialement,
Orodreth
Je connais le principe des SQL.REQUEST, MS.QUERY, Données => Données Externes => Requêtes (etc ...) et autres, j'en ai déjà fait, pas de soucis.
Très bien quand il s'agit d'interroger un ersatz de base de données stockée dans un classeur excel autre que le classeur applicatif.
Une petite question cependant, quand il s'agit d'interroger une table stockée dans une feuille du classeur applicatif, faut-il également passer par Données => Données externes, ou existe-t-il une méthode pour travailler en interne ?
Je m'explique, j'ai, pour l'exemple, une feuille de données nommée "Personne" (nom VBA = sh_Personne), dans laquelle je référence un ID, un NOM, un PRENOM, un AGE, un SEXE (H/F), et une foreign key ID_VILLE (pour faire le lien sur la table Ville).
Une deuxième feuille, du même classeur, nommée "Ville" (nom VBA = sh_Ville) me sert à stocker les villes.
Une troisième feuille, toujours du même classeur, nommée "Resultats" (nom VBA = sh_Resultats) me sert à afficher mes résultats pour travailler dessus.
Hors, j'aimerais pouvoir filtrer ma table Personne pour ne garder que les enregistrements qui correspondent à mes critères, tout en gardant la jointure avec la table Ville (d'autres critères possibles à ce niveau).
Et pour faire ça, j'aimerais vraiment passer par SQL (le classeur fournit n'est qu'un exemple de test, pour que je m'essaie au SQL sur Excel, mon projet actuel est beaucoup beaucoup plus gros, mais le principe après reste identique).
En exemple de requête SQL, je pourrais dire quelque chose comme ça:
"SELECT
Personne.ID AS ID_P, Personne.Nom, Personne.Prenom, Personne.Age, Personne.Sexe, Personne.FK_ID_VILLE,
Ville.ID AS ID_V, Ville.Ville, Ville.CP
FROM
Personne
INNER JOIN Ville ON Personne.FK_ID_VILLE = Ville.ID
WHERE
Personne.Nom LIKE "*VI*"
AND Ville.Ville LIKE "*a*"
"
Ou, si la méthode INNER JOIN n'est pas faisable, à l'ancienne:
"SELECT
Personne.ID AS ID_P, Personne.Nom, Personne.Prenom, Personne.Age, Personne.Sexe, Personne.FK_ID_VILLE,
Ville.ID AS ID_V, Ville.Ville, Ville.CP
FROM
Personne, Ville
WHERE
Personne.FK_ID_VILLE = Ville.ID
AND Personne.Nom LIKE "*VI*"
AND Ville.Ville LIKE "*a*"
"
Pour les deux requêtes, les résultats retournés sont les suivants:
1 - LAVIRE - Thierry - 26 - H - 1 - 1 -Bordeaux - 33000
2 - LAVIRE - Marie - 22 - F - 2 - 2 - Talence - 33400
7 - LEVIEU - Caroline - 20 - F - 2 - 2 - Talence - 33400
Mon objectif est de pouvoir interroger mes tables en SQL pour générer une "vue", une table préformatée, qui est construite à partir d'une requête SQL, et sur laquelle je viens travailler avec VBA, de sorte de n'être jamais en direct sur mes données base.
Autre intérêt des requêtes SQL: ça m'éviterait les boucles et conditions de recherches et de filtres, ce qui serait un gain de temps très appréciable.
Le problème étant qu'à part MS.QUERY, je ne sais pas comment faire du SQL sur Excel, et MS.QUERY a le défaut de passer par une connexion ODBC (qui est très bien en soi, mais qui implique une connexion externe, alors que je cherche précisément à travailler en interne).
De fait, ne sachant pas vraiment pas où commencer cet aspect SQL, je n'ai pas produit de code VBA dans ce sens.
Désolé pour le pavé,
Merci à tous/toutes qui auront lu ce texte,
Merci d'avance à ceux et celles qui répondront,
Cordialement,
Orodreth
Pièces jointes
Dernière édition: