Académique Documents
Professionnel Documents
Culture Documents
DUT Informatique
2è année
Rapport de stage
AJOUT DE FONCTIONNALITES
DANS UNE APPLICATION
(ACCESS, ORACLE)
Etablissement LEGRAND
1
RÉSUMÉ
Lors de mon stage, j’ai été convié à modifier une application déjà existante.
L’objectif qui m’était donné consistait à ajouter des fonctionnalités définies au début de mon
stage. Ainsi, j’ai donc géré des utilisateurs, affecté des sous-familles aux acheteurs leaders, géré
des variations de prix et mis en place une sécurisation.
J’ai toujours essayé de coder de la manière la plus compréhensible et j’ai toujours analysé
ce qu’il fallait faire avant de me lancer directement dans la réalisation de ma tâche.
A la fin de chaque tâche, je demandais une confirmation concernant la justesse de celle-
ci.
J’ai essayé d’analyser et d’expliquer tous les choix qui ont été faits.
2
TABLE DES MATIÈRES
INTRODUCTION PAGE 4
CONCLUSION PAGE 36
GLOSSAIRE
SOURCES DOCUMENTAIRES
3
INTRODUCTION
L’entreprise Legrand m’a accueilli pour réaliser mon stage de fin de DUT Informatique.
C’est une entreprise dynamique ouverte au monde. En effet, l’entreprise est toujours
désireuse d’innover, elle a toujours le désir d’attirer les clients vers elle.
Elle essaie d’élargir de plus en plus son marché et de s’installer dans de plus en plus de pays.
Elle souhaite conquérir de nombreux marchés : c’est une entreprise d’avenir en constante
évolution.
La direction dans laquelle j’effectue mon stage, la direction Achats Groupe, veut mettre à
disposition des utilisateurs concernés, une application qui est en développement depuis 3 ans.
Cette application a pour but de gérer des données concernant le budget, le chiffre
d’affaires de l’entreprise, etc.
L’entreprise m’a demandé d’ajouter des fonctionnalités importantes à cette application.
4
5
I ] PRÉSENTATION DE L’ENTREPRISE
Le groupe Legrand a été créé en 1860. A l’origine, l’entreprise était un petit atelier de
porcelaine de table limougeaud. En 1904, M. Legrand, associé à M. Betoule, devient propriétaire
de la société et lui donne son nom. L’appareillage électrique est introduit en 1919 et cohabite
alors avec la porcelaine.
En 1944, M. Jean Verspieren et M. Edouard Decoster prennent la direction de Legrand et
5 ans plus tard la production de porcelaine est abandonnée au profit de l’appareillage électrique,
plus prometteur.
Voici quelques dates clés :
6
Aujourd’hui, Legrand est le N°1 mondial de l’appareillage électrique et du cheminement
de câbles. Le groupe est implanté dans plus de 60 pays et distribué dans plus de 160 pays : en
Amérique (Brésil, États-Unis), en Europe (Grèce), en Afrique (Egypte) et enfin en Asie (Arabie-
Saoudite, Hong-Kong, Taïwan, Iran …).
Il dispose d’un maillage territorial dense qui lui permet de s’adapter aux besoins locaux et
d’accompagner ses clients dans leurs projets internationaux à travers une trentaine de marques
dont trois de renommée planétaire : Legrand, Bticino et Ortronics. En 2006, la société employait
31000 personnes dont 73% à l’étranger.
Legrand possède 20 marques mondiales ou locales leaders sur le marché.
Son marché est compris entre 50 et 60 milliards d’euros pour les installations électriques
et réseaux d’information.
Legrand a une croissance régulière sur des marchés historiques et un potentiel énorme
dans les pays émergents.
L’optimisation régulière de son offre de produits et de fonctions, de son dispositif
industriel et commercial ainsi que de sa couverture géographique permet à Legrand de renforcer
dans la durée sa position concurrentielle et donc de dégager les ressources financières
additionnelles nécessaires à son développement futur.
Voici les données annuelles de l’entreprise Legrand :
Pour 2007, Legrand est confiant dans sa capacité à faire progresser son chiffre d’affaires
total.
D’une façon générale, la vocation de Legrand est d’offrir aux installateurs électriciens du
monde entier, via la distribution grossiste, tous les produits nécessaires à la réalisation d’une
installation électrique basse tension (< 500 V) et courants faibles (<50 A) dans le logement, le
tertiaire et l’industrie. Ceci dans les meilleures conditions de coût, de qualité et de délai.
7
Voici les 6 domaines d’activités stratégiques (DAS) de l’entreprise Legrand :
Pour son avenir, Legrand a une double ambition, d’une part devenir sur tous les marchés
le leader des produits et systèmes pour installations électriques et réseaux d’informations,
sachant qu’aujourd’hui Legrand représente 6% de part de marché dans le monde, et d’autre part
devenir l’acteur de référence de l’intelligence électrique avec des solutions et des services
innovants.
Afin d’atteindre ces objectifs, le groupe compte s’appuyer sur un choix de la
spécialisation, caractérisé par une démarche de leadership technologique ; une offre unique de
produits et systèmes et une dimension mondiale.
8
II ] PRÉSENTATION DU PROJET
1. Sujet du stage
L’objectif de mon stage est d’ajouter des fonctionnalités dans une application déjà
existante.
L’entreprise travaille sur cette application depuis 3 ans et veut que les modifications soit
opérationnelles cette année. Certaines fonctionnalités manquent à cette application pour :
faciliter son utilisation par les futurs usagers.
la rendre plus sûre.
2. Situation existante
Voici la page d’accueil de l’application au début de mon stage :
Le deuxième onglet « Réalisé » regroupe les calculs de prix et donc les suivis au niveau
de la sous-famille-locale, de l’année, de la catégorie, de l’unité…
Ces suivis sont représentés par des graphiques : ce sont les prix de l’année en cours.
Dans cet onglet nous pouvons également observer les indices de prix sous différents
niveaux : article, société…
Ces indices représentent le rapport du prix au mois de décembre de l’année N-1 sur le
prix du mois de janvier de l’année N. Ainsi nous pouvons remarquer les variations de prix avec
le mois de décembre de l’année N-1.
9
Le troisième onglet « Budget » permet comme son nom l’indique de gérer des données
budgétées, c'est-à-dire des données prévues et non réalisées. Ce sont des données qui sont
prévues pour l’année N+1.
Dans cet onglet nous pourrons visualiser des analyses sur l’évolution future des prix. Ces
analyses se font sur un niveau au choix : le fournisseur, l’article…
10
Dans les onglets « Réalisé » et « Budget », trois diagrammes représentent le Chiffre
d’Affaires extrapolé, réalisé et budgété de l’année N.
Dans l’onglet « Budget » il y a un quatrième diagramme présentant le Chiffre d’Affaires
budgété de l’année N+1.
3. Analyse du besoin
L’entreprise désire des nouvelles fonctionnalités pour son application afin de rendre
encore plus complète la version déjà existante. C’est à moi que revient cette tâche.
Cette application sera utilisée dans toute la France par la plupart des Entreprises Legrand
et par de nombreuses personnes (acheteurs locaux, acheteurs leaders, administrateurs ou des
contrôleurs de gestion).
Mon stage ne se déroulait pas dans un service informatique donc il n’y avait pas de cahier
des charges à proprement parlé : les demandes sont faîtes de manière non conventionnelle.
Il faut savoir que l’entreprise a le désir de ne pas décevoir le client et donc l’utilisateur
final. C’est pourquoi les applications sont réalisées avec la ferme intention d’apporter une valeur
ajoutée au travail de l’utilisateur. Il faut donc qu’elles soient le plus compréhensible et le plus
intuitive possible.
Ainsi nous retrouvons des noms ou des images simples et efficaces sur les boutons.
Il fallait également utiliser des zones de liste et non des listes déroulantes car avec les
zones de liste, les données sont plus lisibles car il est possible de visualiser plusieurs données de
la liste directement.
Il devait y avoir un titre simple et efficace en haut de la liste afin de bien comprendre ce
qu’il y avait à l’intérieur.
11
Voici un exemple de liste :
Pour éviter toute confusion, il fallait ajouter une bulle d’information concernant les icônes qui
avaient un risque de ne pas être comprises parfaitement.
Voici un exemple :
Bouton accompagné d’une bulle d’information qui explique qu’il sert à Modifier des critères de
sélection.
Il était également préférable de ne pas surcharger les formulaires afin d’assurer la bonne
compréhension de ceux-ci. Ainsi, les formulaires ne comportent pas beaucoup de données à
compléter.
Il était important que les formulaires soient cohérents entre eux. C'est-à-dire qu’il ne
fallait pas avoir des formulaires liés entre eux qui ne soient pas construits de la même façon.
Tout ceci rend plus agréable et plus compréhensible l’application.
Dans la conception de l’application et donc des fonctionnalités que je devais ajouter il
fallait impérativement utiliser des triggers :
Un trigger (déclencheur en français) est un élément de code qui se déclenche sur un
événement précis, se rapportant à un objet de la base de données.
Un trigger se définit uniquement sur les objets de type TABLE et déclenche les
événements suivants : INSERT, UPDATE, DELETE. Il peut être déclenché BEFORE (c'est à dire
avant survenance de l'événement) ou AFTER (c'est à dire après survenance de l'événement). Il est
attaché à une table.
Il est préférable d’utiliser un trigger lorsque l’on veut effectuer un formatage des données
ou que l’on veut supprimer en cascade.
Ces triggers vont me permettre de modifier les données des tables que je veux modifier.
Pour afficher les données dans le formulaire, il fallait créer des vues qui permettent de
réaliser certains calculs et tests concernant ces données.
Il était préférable également d’utiliser des noms cohérents concernant toutes les données
de la base. Par exemple, la table qui comprend les utilisateurs se nomme UTILISATEUR. Il
fallait faire ceci dans un souci de maintenance pour les années futures.
12
vues ou les triggers était codé de la même manière que le code réalisé. J’ai donc construit mes
formulaires en fonction de ceux déjà créés.
J’ai également créé les vues avec la même idée que pour les premières.
J’ai donc réalisé tout un travail d’analyse et de compréhension de ce qui avait déjà été
fait.
13
III ] MOYENS MATÉRIELS ET LOGICIELS UTILISÉS
Lors de mon arrivée dans l’entreprise, on m’a installé un ordinateur et des logiciels
comme Microsoft Office ou Power AMC.
Cela m’a permis de travailler dans de bonnes conditions dès le début de mon stage.
J’ai débuté ce stage par une familiarisation avec la base de données et tous les calculs de
prix.
J’ai réalisé une analyse MERISE que j’évoquerai plus précisément plus loin dans ce
rapport. J’ai travaillé avec le logiciel « POWER AMC » que nous avons utilisé en Première
année de DUT Informatique.
Puis j’ai commencé la réalisation des nouvelles fonctionnalités, en utilisant « SCRIPT
EDIT » pour le code, MICROSOFT ACCESS pour l’application en elle-même avec de la
programmation en VB ACCESS et enfin avec « Oracle Tool » et SQL Plus pour le code SQL et
enfin j’ai utilisé « MS PROJECT » pour la gestion de projet afin de m’organiser au mieux dans
les différents tâches à réaliser.
14
IV ] ORGANISATION DU PROJET
Durant mon stage j’ai eu l’occasion de participer à quelques réunions.
Ma première réunion a été effectuée le mercredi 4 avril. Mon maître de stage en était
l’organisateur et M.ROSTAN était également invité. Lors de cette réunion nous avons discuté
sur le contenu de mon stage. Ainsi nous avons pu définir les différentes fonctionnalités que
j’avais à réaliser lors de mon stage.
J’ai participé à une autre réunion le 17 avril organisée par M.ROSTAN. Lors de cette
réunion il a expliqué aux futurs utilisateurs de l’application son fonctionnement et comment sont
réalisés les différents calculs de l’application.
Enfin, pour le mardi 22 mai, j’ai moi-même organisé une réunion avec mon maître de
stage afin de réaliser la mise en production de la base de test comme le montre la copie d’écran
ci dessous.
Ainsi, j’ai invité mon maître de stage à une réunion le mardi 22 mai de 9h00 à 12h00.
Le planificateur permet de connaître les disponibilités de la personne que l’on invite.
Mon maître de stage et moi nous retrouvions à peu près tous les deux jours pour des
problèmes à résoudre ou pour faire un point sur ce qui a été réalisé. Cette fréquence de relation
m’a permis de ne pas aller dans une direction différente de celle qui m’était donnée.
15
Lorsque j’avais terminé la réalisation une tâche, nous nous rencontrions afin qu’il me
donne un nouveau travail à réaliser.
Afin de bien m’organiser dans mon travail, j’ai décidé de réaliser un diagramme de Gant
à l’aide du logiciel de gestion de projet « MS Project ».
Ainsi ce logiciel m’a permis de planifier les tâches à effectuer durant le stage et par
conséquent cela m’a évité de me « perdre » et de me disperser.
Tâches
Nº Nom de la tâche Durée Début Fin % achevé
1 Analyse MERISE 14 jours Mar 27/03/07 Jeu 12/04/07 100%
2 Fonctionnalité 1 : Gérer les utilisateurs 8 jours Ven 13/04/07 Lun 23/04/07 100%
Fonctionnalité 2 : Gérer les variations
3 10 jours Mar 24/04/07 Mer 09/05/07 100%
globales du prix
Fonctionnalité 3 : Ajouter une sécurité à
4 2 jours Jeu 10/05/07 Ven 11/05/07 100%
l'application
Fonctionnalité 4 : Ajouter la notion
5 8 jours Lun 14/05/07 Jeu 24/05/07 100%
d'acheteur leader
6 Mise en base de production de l'application 5 jours Ven 25/05/07 Ven 01/06/07 0%
7 Réalisation du rapport final 43 jours Lun 26/03/07 Mer 23/05/07 100%
J’ai nommé mes tâches en fonction des fonctionnalités que j’avais à réaliser. Ainsi, une
tâche correspond à une fonctionnalité à ajouter. Bien sûr j’ai ajouté l’analyse qui ne faisait pas
partie du cœur du projet. Enfin j’ai inclus la réalisation du rapport final que j’effectuai chez moi.
La tâche « Mise en base de production de l'application » est présente car lors de mon
stage j’ai travaillé sur une base de test qui était une copie de la base qui sera utilisée. Ainsi, pour
effectuer cette tâche il fallait faire appel au secteur informatique (DSI) qui effectuera lui-même
la mise en production de la base.
16
Voici le diagramme de Gant de mon projet correspondant au tableau précédent :
Grâce à ce diagramme nous observons que la tâche la plus longue à développer sans tenir
compte de la réalisation du rapport de stage a été l’analyse. C’est une partie complexe et très
importante dans la compréhension de la base de données.
J’ai pris un peu de retard (1 jour) sur la réalisation de la deuxième fonctionnalité car il
fallait modifier beaucoup de vues.
Pour distinguer cette tâche je l’ai coloré en rouge. Ce fut une tâche très fastidieuse.
Pour les autres tâches, les quelques problèmes n’ont pas retardé le projet. La mise en
place d’une sécurisation à même été plus rapide que prévu : 2 jours au lieu de 5.
Au moment de la clôture de mon rapport de stage, je n’avais pas encore réalisé la tâche
de mise en production de la base de test. J’ai évalué la durée de cette tâche à 5 jours.
17
18
I ] ANALYSE DU SUJET
Concernant la partie Analyse de mon sujet et donc de cette base de données, qui est très
importante puisqu’elle conditionne la bonne compréhension de la base, j’ai réalisé un modèle
Merise (Modèle Conceptuel de Données et Modèle Physique de Données), à l’aide du logiciel
« Power AMC », comme je l’ai évoqué auparavant.
Le modèle Conceptuel de Données que j’ai réalisé à partir de la base de données déjà
existante est présent sur la page suivante.
Elles vont permettre de calculer les Chiffres d’Affaires, les indices, à partir des
informations présentes dans ces entités.
Comme beaucoup de données, dans cette base, sont réalisées en fonction d’une année
donnée, la présence d’une table « Année » s’imposait. Cette table est reliée à presque toutes les
autres tables de la base de données.
La table TABLEAU_ARTICLE permet de définir un article et de visualiser les années où
il est présent, elle permet de définir également une sous-famille-locale qui est le « niveau » au
dessus de l’article.
La table UTILISATEUR permet de connaitre les utilisateurs de l’application. Un
utilisateur possède un identifiant. De plus il va pouvoir sélectionner un site qui sera spécialisé
dans une division (Protection, Appareillage,…).
Il existe différentes sous-familles-locales (vues auparavant) qui, elles-mêmes,
appartiennent à une famille d’une catégorie. C’est donc la principale hiérarchie du modèle.
Il y a également la présence de hausses représentées par les tables HAUSSES
FOURNISSEURS et HAUSSES SOUS-FAMILLES. Ces deux tables présentent les hausses de
prix d’un fournisseur ou des prix d’une sous-famille : c’est pour cela que l’une est reliée avec la
table FOURNISSEURS et l’autre avec la table SOUS-FAMILLE
19
20
Après avoir réalisé le modèle de la base existante, je me suis attelé à la réalisation du modèle
comprenant les modifications que je devais apporter à l’application durant ce stage (MCD page
suivante).
Pour la gestion des utilisateurs, j’ai supprimé le lien de la table PUTILISATEURS avec
une autre base afin de rendre la table UTILISATEUR. J’ai supprimé les informations qui ne
serviraient plus à l’application comme le téléphone, la fonction, l’e-mail de l’utilisateur. J’ai
donc crée la table UTILISATEUR qui ne contient que l’IDUTILISATEUR, le NOM et le
PRENOM de l’utilisateur.
Ensuite, afin de mettre en place un mécanisme de sécurisation, il fallait avoir une
information qui renseignerait le profil de l’utilisateur différent de l’information FONCTION de
la table PUTILISATEURS. J’ai donc ajouté l’information PROFIL dans la table
UTILISATEUR. J’ai choisi de ne pas créer de table contenant seulement le profil car je n’en
voyais pas l’utilité.
Ensuite, concernant la variation de pourcentage à affecter à tous les prix des articles, j’ai
créé une table VARIATION_POURC qui comprendra la valeur du pourcentage, un commentaire
et l’année de la variation (il ne peut y avoir qu’une seule variation par article et par année).
Cette table est donc reliée à la table ANNEE mais aussi à la table TABLEAU_REALISE
qui contient les prix de l’article.
J’ai crée cette table car il était impératif d’avoir une table permettant de connaître le
pourcentage de variation affecté à un article pour une année donnée afin de pouvoir effectuer les
calculs de prix et de budget. La dernière modification que j’ai effectuée sur ce modèle, a été de
créer une table LEADER et une association SELECT_LEADER qui deviendra une table dans
l’application. En effet, je devais ajouter la notion de Leader dans l’application. J’ai donc choisi
de créer une table qui répertorie les acheteurs leaders de la base. Un acheteur leader s’occupe
d’une sous-famille-groupe qui appartient à une famille, qui appartient à une catégorie. De plus
un utilisateur sélectionne les acheteurs leaders auxquels il veut voir les données.
La table SELECT_LEADER comprend tous les acheteurs leaders que l’utilisateur a
sélectionnés.
Il était impératif de réaliser ces modèles de données car je pense que c’est un moyen de
bien comprendre comment la base fonctionne. J’ai utilisé Merise car, selon moi, cette méthode
est plus facile à comprendre par rapport à une analyse UML concernant une base de données.
21
22
II ] RÉALISATION DES DIFFÉRENTES FONCTIONNALITÉS
SELECT BUDACHU_UTILISATEUR.IDUTILISATEUR,
BUDACHU_UTILISATEUR.NOM, BUDACHU_UTILISATEUR.PRENOM FROM
BUDACHU_UTILISATEUR UNION SELECT " New", "<Nouveau>","" FROM
BUDACHU_UTILISATEUR ORDER BY BUDACHU_UTILISATEUR.NOM;
La liste est verrouillée pour que l’utilisateur ne puisse pas affecter un profil différent de
ceux qui sont dans la base de données. La zone qui concerne le login de l’utilisateur permet
d’ajouter le login de l’utilisateur que l’on ajoute.
Cette dernière zone sera cachée si l’on veut modifier ou supprimer l’utilisateur car on ne
doit pas changer le login d’un utilisateur déjà présent dans la base.
Sur le formulaire de l’accueil, j’ai ajouté un bouton « Gérer utilisateur » qui permet d’ouvrir le
formulaire évoqué au dessus.
23
Voici le code VB correspondant :
Set rs = Me.Recordset.Clone
rs.FindFirst "[IDUTILISATEUR] = '" & Me![Liste21] & "'"
If Not rs.EOF Then
If Me.Liste21 = " New" Then
Texte11.Visible = True
DoCmd.GoToRecord , , acNewRec
Else
Texte11.Visible = False
Me.Bookmark = rs.Bookmark
End If
End If
Le problème auquel j’ai été confronté reposait sur la zone de texte du nom et la zone de
texte du prénom. En effet je ne savais pas comment faire apparaître les données au clic de
l’utilisateur dans la liste.
24
De plus, je découvrais les liens entre Access et les requêtes SQL pour utiliser les différentes
tables de la base de données ACCESS
25
Voici le code du bouton de sauvegarde de la modification.
Set db = CurrentDb
Liste13.Requery
Exit_CmdOk_Click:
Exit Sub
Err_CmdOk_Click:
MsgBox Err.Description
Resume Exit_CmdOk_Click
End Sub
J’ai inséré une boîte de message demandant à l’utilisateur une confirmation concernant
l’ajout d’une variation. Cette confirmation est très importante car la variation modifiera
beaucoup de graphiques présents dans l’application.
Si la réponse au message est oui alors on peut exécuter la requête de mise à jour de la table. On
met à jour la table VARIATION_POURC à l’aide de la commande UPDATE et on insère dans
cette table la valeur du pourcentage, l’année et le commentaire concernant cette variation.
Enfin on met à jour la liste de gauche à l’aide de Requery.
Ce deuxième travail a été plus difficile que les autres car il fallait modifier certains
tableaux et graphes.
En effet, les prix standards changent avec la variation de pourcentage.
Il fallait donc modifier les prix standard de l’année du budget.
J’ai donc transformé la vue V_CAL_IND_FG qui permet de calculer les indices de prix des
familles groupe de la base.
26
Voici une partie intéressante de cette vue :
Art 1 Qy-1 Py-1 Py N1 = Py * Qy-1 D1 = Py-1 * Qy-1 Indice = (N1 / D1) * 100
Art 2 Null Null Py N2=0 D2=0 N/A
Art 3 Qy-1 Py-1 Null N3=0 D3=0 N/A
Art
…
Art N ….. ….. ….. ….. …..
Total Sous Famille, Unité,… Numérateur N Dénominateur D Indice (N / D) * 100
Somme Ni Somme Di
Avec :
27
Il faut savoir que les numérateurs et dénominateurs sont calculés dans un trigger nommé
TABLEAU_BUDGET_AFTER : en voici un exemple de calcul :
DENUM_IAN3 = NVL(ROUND(DECODE(ART.INDICE,0,0,VNM1DEC_QTE_CUM *
NVL(VNM1DEC_R,0)) * (DECODE(VNMAR,NULL,0,0,0,1)),2),0)
Ainsi, on calcule le produit du nombre d’article A, présents durant l’année NM1 par le prix réel
de l’article A.
La ligne de code : * (DECODE(VNMAR,NULL,0,0,0,1)),2),0) permet de vérifier si le
numérateur est NULL, égal à 0 ou égal à une valeur quelconque. Si le numérateur est NULL alors
on multiplie par 0 le dénominateur, sinon on le multiplie par 1. Cela permet donc de conserver
un même périmètre. Dès que le numérateur n’est pas une valeur quelconque on ne prend pas en
compte le dénominateur. On fait de même pour le dénominateur par rapport au numérateur.
La vue V_CAL_IND_FG fait la somme des numérateurs des articles de la famille groupe
concerné et la divise par la somme des dénominateurs des articles de la famille groupe
concernée.
Pour pouvoir mettre en place la gestion de pourcentage, il a fallu que je multiplie le
dénominateur par la valeur du pourcentage.
Pour cette fonctionnalité, j’ai également dû modifier un formulaire présent dans
l’application au départ.
Ainsi, j’ai dû modifier le formulaire «Calendrier» qui permet de consulter, ou modifier les
différents prix et leurs différentes variations.
Voici le formulaire :
J’ai ajouté une zone de texte qui correspond à la variation du prix dû au pourcentage de
variation. Cette donnée n’est pas exprimée en pourcentage.
28
J’ai également ajouté une zone qui représente le nouveau prix standard calculé en
multipliant l’ancien prix standard par la variation de prix en valeur.
Ensuite, j’ai dû ajouter une colonne dans le tableau présentant le PMPM ; je l’ai nommée
PMPM Final. Ce PMPM prend en compte le nouveau prix standard.
Enfin, il fallait modifier les sources de chaque donnée du graphique en bas du formulaire.
Le problème que j’ai rencontré lors de la réalisation de cette tâche a été la modification
des triggers. En effet il fallait que je comprenne d’abord pourquoi utiliser un trigger et sa
signification.
J’ai également rencontré un problème de temps de réponse. En effet, le temps de réponse de
l’application était beaucoup trop long.
Nous avons donc décidé, avec mon maître de stage, de découper la vue en deux vues distinctes.
La première réalise les sommes et nomme le résultat.
La seconde permet de vérifier les résultats des calculs. Cette nouvelle manière de faire a permis
de gagner un temps d’exécution considérable.
Il fallait également assimiler tous les calculs afin de pouvoir modifier ceux-ci en ajoutant la
notion de pourcentage de variation.
29
Puis si le profil est ADMIN alors on ne verrouille pas l’onglet paramètre, sinon on le
verrouille ainsi les acheteurs et autres utilisateurs ne pourront pas appuyer sur les boutons de
l’onglet paramètre.
30
4. Gestion des acheteurs leaders
Formulaire d’accueil comprenant la liste des acheteurs leaders sélectionnés par l’utilisateur.
Lorsque l’utilisateur double-clique sur la liste un nouveau formulaire apparaît qui permet
de sélectionner ou désélectionner un acheteur leader. Il y a 5 boutons différents :
SELECT BUDACHU_UTILISATEUR.IDUTILISATEUR,
BUDACHU_UTILISATEUR.NOM, BUDACHU_UTILISATEUR.PRENOM,
[SELECT_LEADER Connecté].IDUTILISATEUR FROM [SELECT_LEADER
Connecté], BUDACHU_UTILISATEUR WHERE [SELECT_LEADER
Connecté].SELLEADER=BUDACHU_UTILISATEUR.IDUTILISATEUR ORDER BY
BUDACHU_UTILISATEUR.NOM, BUDACHU_UTILISATEUR.PRENOM,
BUDACHU_UTILISATEUR.IDUTILISATEUR;
31
La requête ci-dessus permet d’afficher la liste des acheteurs leader sélectionnés, ainsi on
différencie les différents acheteurs leaders sélectionnés par leur IDUTILISATEUR.
Set db = CurrentDb
Set rq = db.OpenRecordset("BUDACHU_SELECT_LEADER")
Next
Me.LstSelLeader.Requery
Me.LstLeader.Requery
End Sub
32
Ce code correspond au bouton qui permet d’ajouter un acheteur leader dans la
sélection de l’utilisateur connecté.
On utilise la table SELECT_LEADER qui contient tous les acheteurs leaders sélectionnés par
l’utilisateur, puis, dans cette table nous utilisons les informations SELLEADER et
IDUTILISATEUR qui vont permettre de faire le lien entre les données de la table et celles de la
liste. Ainsi, lorsque l’on clique sur le bouton d’ajout, on ajoute le leader sélectionné par
l’utilisateur dans la table SELECT_LEADER.
La ligne de code : rq.Update va mettre à jour la table SELECT_LEADER. Ainsi l’opération
d’ajout effectuée par l’utilisateur va être prise en compte à l’intérieur même de la table
SELECT_LEADER.
La ligne de code Me.LstSelLeader.Requery va permettre de mettre à jour la liste des leaders
sélectionnés et la ligne en dessous permettra de mettre à jour la liste des leaders (la liste de
gauche sur l’image ci-dessus).
Les autres boutons sont codés de la même manière à la différence que les requêtes sont
différentes de celle de l’ajout simple. En effet pour la suppression nous allons utiliser le code
rq.Delete qui va permettre de supprimer de la sélection l’acheteur leader que l’utilisateur avait
déjà sélectionné.
Comme je l’ai évoqué auparavant un grand nombre de vues sont utilisées afin de pouvoir
visualiser les calculs dans des graphes ou des tableaux. Or cette fonctionnalité en utilise
beaucoup. Il a du falloir introduire la notion d’acheteur leader dans les vues déjà existante car
sinon tout ce que l’on avait fait auparavant n’aurait servi à rien.
WHERE
CHOIX_GRP.UTILISATEUR = UNITES.UTILISATEUR AND
CHOIX_GRP.CHOIX <> VUE.FOURNISSEUR_GROUPE AND
CHOIX_GRP.UTILISATEUR = ANBUD.UTILISATEUR AND
VUE.SOCIETE = ACHT.SOCIETE AND
VUE.SOUS_FAMILLE_LOCALE = ACHT.SOUS_FAMILLE_LOCALE AND
VUE.SOCIETE = UNITES.CODE AND
SSD.UTILISATEUR = UNITES.UTILISATEUR AND
SSD.NUMSEL = VUE.SIT_DIVISION AND
SSD.UTILISATEUR = ANBUD.UTILISATEUR AND
SU.UTILISATEUR = UNITES.UTILISATEUR AND
SU.SELUSER = ACHT.ACHETEUR AND
SU.UTILISATEUR = ANBUD.UTILISATEUR AND
VUE.SOCIETE = UNITES.CODE AND
UNITES.VISU = -1 AND
UNITES.UTILISATEUR = ANBUD.UTILISATEUR AND
ANBUD.ANNEE_N = VUE.ANNEE AND
VUE.ANNEE = TO_CHAR(TO_NUMBER(VP.ANNEE_POURC) +1) AND
SL.IDUTILISATEUR = UNITES.UTILISATEUR AND
SL.SELLEADER = L.IDUTILISATEUR AND
SL.IDUTILISATEUR = ANBUD.UTILISATEUR
GROUP BY
VUE.CATEGORIE,
VUE.ANNEE,
VUE.BUDGET,
UNITES.UTILISATEUR
33
J’ai choisi de vous présenter cette partie de vue car c’est ici que sont exposées les
conditions du calcul. En effet, c’est dans la clause WHERE que l’on va faire les liens entre les
tables. Ainsi, nous pouvons dire qu’un calcul correspond à une année, une société, un acheteur,
un acheteur leader, un utilisateur et une unité.
Nous pouvons alors garantir qu’il n’y aura pas de doublons au niveau des utilisateurs.
Pour éviter à l’utilisateur de fermer son formulaire s’il veut changer ses critères de
sélection au niveau des acheteurs leaders, il fallait ajouter la sélection évoqué précédemment
dans le formulaire « Sélection Critères » qui est accessible lors de l’aperçu des tableaux de
données ou des graphiques.
La liste des acheteurs leaders sélectionnés est construite exactement de la même manière
que la liste construite précédemment.
Pour terminer cette fonctionnalité, il fallait pouvoir affecter un acheteur leader à sa sous-
famille-groupe.
J’ai donc réalisé un nouveau formulaire qui permettra de visualiser les sous-familles-groupe et
leur acheteur leader.
J’ai créé une liste qui permettra de visualiser la liste de toutes les sous-familles-groupe et leur
acheteur affectés. Si la sous-famille-groupe n’a pas d’acheteur leader, je laisse la case
correspondant au nom de l’acheteur vide. Sinon, j’indique dans la colonne correspondante au
nom de l’acheteur leader qui s’occupe de la sous-famille-groupe.
En dessous de la liste, j’indique la sous-famille-groupe sélectionnée ainsi que son acheteur dans
la liste déroulante située à coté.
J’utilise trois boutons :
Le premier permet de sauvegarder le nouvel acheteur-leader affecté à la sous-
famille-groupe correspondante,
le deuxième permet d’annuler le changement que l’utilisateur vient d’effectuer
le troisième permet de quitter le formulaire.
J’ai ajouté une zone de texte qui permet de faire une recherche par sous-famille-groupe.
Enfin, j’ai ajouté une case à cocher qui permettra de ne visualiser que les sous-familles-
groupe qui ne sont pas affectées à un acheteur leader.
34
Voici le formulaire correspondant :
Le problème auquel j’ai été confronté reposait sur la façon de modifier les vues car il
fallait examiner et comprendre les vues qui étaient déjà présentes dans la base.
Ainsi il fallait modifier la plupart des vues car elles avaient un lien avec la notion d’acheteur
leader que je devais instaurer.
35
CONCLUSION
Ce stage aura donc consisté en l’ajout de nouvelles fonctionnalités dans l’application
« Budget » déjà existante.
Il a donc fallu effectuer une analyse complète de la base de données afin de comprendre
son fonctionnement.
Ces fonctionnalités étaient différentes les unes des autres avec par exemple, la mise en
place de sécurisation ou la gestion de pourcentages avec le calcul de divers prix.
C’est pourquoi, j’ai pu approfondir mes connaissances dans le domaine des bases de
données et donc du langage SQL.
J’ai également approfondi mes connaissances dans le domaine de la gestion de projet.
De plus, ce stage m’a permis de découvrir plus en détails le langage VB que nous n’étudions pas
à l’IUT dans le cadre de cours magistraux.
Enfin, je me suis familiarisé avec l’aspect commercial. En effet, dans cette application, j’ai pu
rencontrer tous les différents calculs de prix, les budgets ainsi que les notions d’acheteurs
leaders.
L’application que j’ai complétée sera utilisée après mon stage, dans la plupart des
entreprises Legrand de France (Antibes, Strasbourg, Isère, Pantin, Sillé, Limoges, Guise,
Fontaine, Montville, Malaunay, Senlis, Pau…).
Les fonctionnalités que j’ai ajoutées seront donc utiles à la bonne utilisation de l’application.
Bien sûr, cette application évoluera puisque la demande évolue continuellement mais ces
fonctionnalités devraient se pérenniser.
Pendant toute la durée de mon stage, j’ai pu participer à des réunions, ce qui m’a fait
découvrir le travail en équipe dans l’entreprise.
J’ai trouvé ce stage très intéressant car il m’a permis de me familiariser avec le monde de
l’entreprise. Cela m’a permis de découvrir l’obligation de résultats dans l’entreprise et les
contraintes de temps.
Pour conclure, ce stage m’a vraiment apporté, au niveau technique comme au niveau
relationnel. Ce fut une expérience très enrichissante, un apport personnel dans le cadre de mes
études. J’ai trouvé ce stage complètement différent des périodes de cours et je l’ai vécu
pleinement.
36
GLOSSAIRE
Méthode de codification des champs :
MMM = prix mensuel réel (de Janvier à Aout), prix mensuel extrapolé (de Septembre à
décembre)
Prix du mois = prix du mois M-1 * Variation à la référence * Variation à la Sous Famille Locale
* Variation au fournisseur
Nota : le calcul se porte sur tous les prix de la période future sauf si un prix a été forcé
Exemple :
37
partir de Mrs Budget jusqu'à
Juin Budget
Avril Budget 11 11.55
Mai Budget 11 11.55
Juin Budget 11 Oui 10 Le prix est forcé, on ne prend en
compte que les % futurs
Juillet Budget 11 10
Aout Budget 11 10
Septembre Budget 11 10% 11
Octobre Budget 11 11
Novembre Budget 11 11
Décembre Budget 11 11
PMPM = Prix moyen pondéré mensuel (calculé à la référence) PMPM = Chiffre d’affaire du
mois / Quantité acheté du mois
PMPA = Prix moyen pondéré Annuel YTD (calculé à la référence= Chiffre d’affaire YTD /
Quantité Cumulé YTD
PMPA_N (PMPA_M) = Prix Moyen Pondéré Annuel moyen moyenne arithmétique des
PMPM de Janvier à Aout + PMPM Extrapolé de Septembre à Décembre
STD_N = Prix Standard de l’année (calculé l’année précédente). Ce prix est rechargé à partir des
bases de production afin de prendre en compte les nouvelles références non prévues au budget ou
encore les modifications de dernière minute
STD_NP1 = Prix standard du budget (Année N+1) Moyennes des prix NP1 du budget
38
CA = Chiffre d’affaire mensuel à la référence
SOUS_FAMILLE_LOCALE = Code sous famille achat géré localement dans les unités
INDICE = top prise en compte de l’article dans les indices (0 ou Null = Prix en compte, 1 =
exclu)
Effet Volume = Valeur de l’augmentation des quantités entre deux Chiffres d’affaire (type de
CA : Réel / Budget, Période Janvier / Février)
Art 1 Qte N-1 PMPA N-1 Qté N PMPA N PMPA N-1 * (Qté N – Qté N-1)
Art 2 Null Null Qté N PMPA N PMPA * Qté N
Art 3 Qté N-1 PMPA N-1 Null Null - (PMPA N-1 * Qté N-1)
Art …
Art N ….. ….. ….. …..
Total Sous Famille, Unité,… Somme des résultats
39
Effet Prix = Valeur de l’augmentation des prix entre deux Chiffres d’affaires (type de CA : Réel
/ Budget, Période Janvier / Février)
Art 1 Qy-1 Py-1 Py N1 = Py * Qy-1 D1 = Py-1 * Qy-1 Indice = (N1 / D1) * 100
Art 2 Null Null Py N2=0 D2=0 N/A
Art 3 Qy-1 Py-1 Null N3=0 D3=0 N/A
Art
…
Art N ….. ….. ….. ….. …..
Total Sous Famille, Unité,… Numérateur N Dénominateur D Indice (N / D) * 100
Somme Ni Somme Di
Art 1 Qy-1 Py-1 Py N1 = Py * Qy-1 D1 = Py-1 * Qy-1 Indice = (N1 / D1) * 100
Art 2 Null Null Py N2=0 D2=0 N/A
Art 3 Qy-1 Py-1 Null N3=0 D3=0 N/A
Art
…
Art N ….. ….. ….. ….. …..
Total Sous Famille, Unité,… Numérateur N Dénominateur D Indice (N / D) * 100
Somme Ni Somme Di
Py = PMPA N
Art 1 Qy-1 Py-1 Py N1 = Py * Qy-1 D1 = Py-1 * Qy-1 Indice = (N1 / D1) * 100
Art 2 Null Null Py N2=0 D2=0 N/A
Art 3 Qy-1 Py-1 Null N3=0 D3=0 N/A
Art
…
Art N ….. ….. ….. ….. …..
Total Sous Famille, Unité,… Numérateur N Dénominateur D Indice (N / D) * 100
Somme Ni Somme Di
40
Py-1 = PMPA N-1
Py = STD_N
Art 1 Qy-1 Py-1 Py N1 = Py * Qy-1 D1 = Py-1 * Qy-1 Indice = (N1 / D1) * 100
Art 2 Null Null Py N2=0 D2=0 N/A
Art 3 Qy-1 Py-1 Null N3=0 D3=0 N/A
Art
…
Art N ….. ….. ….. ….. …..
Total Sous Famille, Unité,… Numérateur N Dénominateur D Indice (N / D) * 100
Somme Ni Somme Di
Py-1 = PMPM
Py = PMPM Budget
PMPM et PMPM Budget sur période identique (ex : Janvier / Janvier, Juin / Juin, …)
La gestion des données sous la forme numérateur et dénominateur permet de calculer les indices
a des regroupement de niveau supérieur ( Sous Famille, Famille, Unité,…)
41
SOURCES DOCUMENTAIRES
http://support.microsoft.com/
http://www.developpez.net/
http://www.vbfrance.com
http://forum.hardware.fr
http://sqlpro.developpez.com/
http://oracle.developpez.com/
http://dev.mysql.com/
http://labo-oracle.com/
42