Message erreur: "Le moteur de base de données Microsoft Access ne reconnait pas "
Bonjour tout le monde,
Nouveau inscrit sur le site (car pas la première fois que je viens faire un tour dessus) et novice en connaissance Access (d'où mes différents aller-retour sur ce même site), j'espère pouvoir trouver une solution à mon problème grâce à vous... si solution existe.
CONTEXTE:
Actuellement en stage dans une entreprise, il m'est demandé de créer une base de données comprenant les "exigences client" d'un projet et, par la suite, de créer un outil de "reporting" qui permettra le suivi et la gestion de ces exigences.
Pour ce faire, j'utilise les logiciels Access 2013 (pour la partie BD et exploitation/synthétisation des données) et Power B.I. Desktop (pour la partie affichage graphique des données).
1ERE ÉTAPE:
Pour commencer, j'ai créé une base de données structurée tel que suite (je vous donne une version [très] simplifiée):
ORIGINE |
IDENTIFIANT |
SYSTEME |
SOUS-SYSTEME N-1 |
FONCTION TRANSVERSALE 1 |
ABC |
001 |
1 |
1 |
X |
ABC |
002 |
1 |
1 |
X |
ABC |
003 |
1 |
1 |
Y |
ABC |
004 |
1 |
2 |
X |
ABC |
005 |
1 |
2 |
Y |
ABC |
006 |
2 |
1 |
X |
ABC |
007 |
2 |
1 |
X |
Sachant que le(s) critère(s):
- Fonction Transversale 1 peut avoir comme solution un des choix suivant: X ou Y ou Z (choix à effectuer dans une liste déroulante);
- Système & Sous-Système N-1 composent l’arborescence de l'exigence.
2EME ÉTAPE:
Ensuite, j'utilise une requête (Tableau croisé dynamique - utilisation de l'Assistant Requête) afin de comptabiliser le nombre de X, Y ou Z en fonction de l'arborescence. Et ce dans le but d'avoir une synthétisation des données tel que suit:
SYSTEME |
SOUS-SYSTEME N-1 |
NBR DE X |
NBR DE Y |
1 |
1 |
2 |
1 |
1 |
2 |
1 |
1 |
2 |
1 |
2 |
0 |
Jusque-là, pas de problème.
3EME ÉTAPE:
J'ai créé une seconde requête "Création de table" qui va chercher les données se trouvant dans la feuille de données de la 1ère requête (expliquée précédemment) afin de les faire figurer dans une nouvelle table.
Le pourquoi de la chose? Car à partir de Power B.I. Desktop, il est uniquement possible de charger les données se trouvant dans un format table dans Access. Sinon, cela aurait été trop facile.
PROBLÉMATIQUE:
Comme expliqué plus haut, le critère Fonction Transversale 1 a plusieurs choix possibles (X, Y ou Z).
Hors, à ce stade du projet, nous n'avons pas encore la nécessité de rentrer le choix Z.
Du coup, si dans ma deuxième requête, je l'utilise comme champ de référence, le message d'erreur suivant s'affiche:
"Le moteur de la base de données Microsoft ne reconnait pas "...." en tant que nom de champ ou expression correcte.".
Je sais que cela est normal car la 1ère requête n'a identifié aucun Z dans la base de données.
Ma question est donc la suivante:
Existe-t-il une solution [ou une autre - je ne suis pas jaloux] afin de remonter, pour Z, la valeur 0 dans le tableau de synthétisation?
Si oui, cela se fait-il dès la 1ère requête?
Le but de cette manœuvre serait d'éviter de venir changer les paramètres de mes différentes requêtes dans le futur lorsque le choix Z sera enfin rentré dans la base de données.
Car, comme expliqué plus haut, chaque exigence a d'autres critères que celui de Fonction Transversale 1, et le même problème aura lieu pour plusieurs d'entre eux.
En espérant avoir été assez clair.
Sinon, n'hésitez pas à demander amples informations que je me ferai une joie de vous fournir dans les plus bref délais.
Je remercie toute personne qui pourra m'aider, et aussi car il sera allé jusqu'au bout de mon texte.
Vous souhaitant une bonne journée/soirée.
Sébastien
"Le moteur de base de données Microsoft Access ne reconnait pas "
Salut !
Je ne connais pas Power Bi, mais si tu as accès au SQL des requêtes, tu peux te débrouiller comme çà:
Dans la requête du type "SELECT maTable.x, maTable.y, maTable.z FROM maTable ..."
change par:
"SELECT maTable.x, maTable.y, 0 AS z FROM maTable..."
Peut-être que çà t'aidera...
Message erreur: "Le moteur de base de données Microsoft Access ne reconnait pas "
Salut,
Moi je ferais çà dans la seconde requête: ajouter un alias Z sur la troisième colonne, çà donnerait quelque chose comme:
Code:
1 2 3
| SELECT Requete_FonctionTransversale1_Exigences.Système, Requete_FonctionTransversale1_Exigences.[Sous-Système N-1], Requete_FonctionTransversale1_Exigences.[Sous-Système N-2], Requete_FonctionTransversale1_Exigences_X, Requete_v_Exigences.Y, 0 AS Z INTO Table_Resume_FonctionTransversale1
FROM Requete_FonctionTransversale1_Exigences
ORDER BY Requete_FonctionTransversale1_Exigences.Système, Requete_FonctionTransversale1_Exigences.[Sous-Système N-1], Requete_FonctionTransversale1_Exigences.[Sous-Système N-2]; |
Et si on en demandait encore plus
Cela fonctionne en effet. :ccool:
Par contre, imaginons qu'aujourd'hui je rentre la solution "Z" dans une cellule de la colonne "Fonction Transversale 1", la première requête la détectera bien automatiquement et l'affichera sur sa feuille de données.
Mais la deuxième requête non.
Il me faudra modifier de nouveau le code SQL pour enlever la partie code que tu m'as fourni afin de le remplacer par
Code:
Requete_FonctionTransversale1_Exigences_Z
Du coup penses-tu qu'il possible dans le code SQL de mettre une condition IF/SI du genre:
- Si Z est existant dans la colonne Fonction Transversale alors on applique le code
Code:
Requete_FonctionTransversale1_Exigences_Z
- Si Z est non existant dans la colonne Fonction Transversale, alors on applique le code
?
Mais merci encore.
Message erreur: "Le moteur de base de données Microsoft Access ne reconnait pas "
Si si, c'est possible
Avec la fonction IIF(Condition; Output si Condition vraie; Output si Condition fausse)
Du coup, j'utiliserais aussi la fonction NZ(Champ; Valeur si Null), ce qui donnerait:
Code:
SQL="SELECT Bla bla bla..., nz(Requete_FonctionTransversale1_Exigences_Z; 0) AS Z FROM Requete_FonctionTransversale1_Exigences..."
1 pièce(s) jointe(s)
Message erreur: "Le moteur de base de données Microsoft Access ne reconnait pas "
OK, je n'avais tout à fait compris ton problème.
Peux-tu insérer du VBA dans Power B.I. Desktop?
Si oui, dans la 3ème étape, tu testes d'abord l'existence de la valeur "Z" dans la colonne "Fonction Transversale 1" de la table Database_Exigences, puis tu lances conditionnellement l'une des 2 requêtes suivantes:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
Dim strSQL as String
if nz(dCount("[Fonction Transversale 1]", "Database_Exigences", "[Fonction Transversale 1]='Z'"), 0)=0 then
strSQL = "SELECT Requete_FonctTransv_Exigences.Système, Requete_FonctTransv_Exigences.[Sous-Système N-1], Requete_FonctTransv_Exigences.X, " & _
"Requete_FonctTransv_Exigences.Y INTO Table_Resume_FonctTransv " & _
"FROM Requete_FonctTransv_Exigences " & _
"ORDER BY Requete_FonctTransv_Exigences.Système, Requete_FonctTransv_Exigences.[Sous-Système N-1];"
Else
strSQL = "SELECT Requete_FonctTransv_Exigences.Système, Requete_FonctTransv_Exigences.[Sous-Système N-1], Requete_FonctTransv_Exigences.X, " & _
"Requete_FonctTransv_Exigences.Y, nz([Requete_FonctTransv_Exigences].[Z],0) AS Z INTO Table_Resume_FonctTransv " & _
"FROM Requete_FonctTransv_Exigences " & _
"ORDER BY Requete_FonctTransv_Exigences.Système, Requete_FonctTransv_Exigences.[Sous-Système N-1];"
End IF
Docmd.SetWarnings False
Docmd.RunSQL (strSQL)
Docmd.SetWarnings True |
...Ou appeler la petite fonction VBA que j'ai inséré dans ta base: ... ;)
Pièce jointe 399555
PS: Renseignements pris, il semblerait que malgré la demande VBA ne soit PAS intégré à Power BI https://ideas.powerbi.com/forums/265...wer-bi-desktop
Message erreur: "Le moteur de base de données Microsoft Access ne reconnait pas "
De nada! ;)
"Mode Papa", quelle que soit la version, c'est important !