Bonjour tout le monde,
L'informatique est, et restera, toujours un mystère pour moi.
Pour vous expliquer le contexte avant mon [nouveau] problème, je vous copie ci-dessous le message que j'avais publié dans un post antérieur:
***DEBUT MESSAGE***
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?
ET CE AFIN D'AVOIR LE TABLEAU SUIVANT:
SYSTEME SOUS-SYSTEME N-1 NBR DE X NBR DE Y NBR DE Z 1 1 2 1 0 1 2 1 1 0 2 1 2 0 0
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.
***FIN MESSAGE***
Suite à ce message, une solution avait été trouvée: celle-ci consistait à créer un module avec le code suivant:
Cela marche très bien (voir fichier test en copie).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub ResumeCreate() 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 End Sub
MON PROBLEME, maintenant, est le suivant:
=> je souhaiterai, à partir du même module, effectuer la même chose mais avec tous les critères soit X, Y et Z.
Je pense bien qu'il faut ajouter la fonction OU dans la première partie du code.
Mais je dois me mélanger les pinceaux ou mal structurer car je n'y arrive pas.
A défaut d'être un expert en VBA, j'essaie au moins de bien structurer mon message afin d'être compréhensible.
En vous remerciant pour tout aide que vous m'apporterez.
Sebastien
Partager