gestion production

57
1 Ville de Liège Ecole de Commerce et d'Informatique Enseignement de Promotion sociale Rue Hazinelle 2 - 4000 LIEGE Matricule : 6.188.038 04/221 37 86 Gestion de la production de la société « Gascoigne Melotte » Travail de fin d'études présenté par Vitali UDALOV en vue de l'obtention du diplôme de Gradué en Informatique Année académique 2004-2005

Upload: reda-eci

Post on 18-Dec-2014

214 views

Category:

Software


3 download

DESCRIPTION

La gestion d'une production de la informatique a la logique de la programamtion

TRANSCRIPT

Page 1: gestion production

1

Ville de Liège Ecole de Commerce et d'Informatique

Enseignement de Promotion sociale Rue Hazinelle 2 - 4000 LIEGE

Matricule : 6.188.038 04/221 37 86

Gestion de la production

de la société « Gascoigne Melotte »

Travail de fin d'études présenté par Vitali UDALOV

en vue de l'obtention du diplôme de Gradué en Informatique

Année académique 2004-2005

Page 2: gestion production

2

REMERCIEMENTS

Je tiens à remercier tout d’abord monsieur Jan DERLUYN pour m’avoir permis de réaliser ce stage au sein de sa société , monsieur Jean-Claude LAHAYE, mon parrain entreprise, pour le temps et les conseils.

Je tiens également à remercier monsieur Alain BAWIN, mon parrain école, pour sa

disponibilité et son aide de la rédaction de ce travail. Je remercie aussi tous mes professeurs pour ces trois années de mes études, ainsi pour

m’avoir permis de réaliser avec succès les études dont je rêvais.

Page 3: gestion production

3

TABLE DE MATIERE

INTRODUCTION………………………………………………………………...………...p.5 Etude préalable……………………………………………………………………………...p.6 1. Domaine et objectif de l’étude…………………………………………………..………p.6 1.1. Champ de l’étude……………………………………………………………....……..p.6 1.1.1 Contexte du projet…………………………………………………..…………..p.6 1.1.2 Domaine du projet ………………………………………………….…………..p.9 1.1.3 Description du projet……………………………………………..…………….p.10 1.2 Contraintes organiques……………………………………………………………….p.10 1.3 Modalité de déroulement…………………………………………………….……….p.12 1.3.1 Ressources humaines………………………………………………..………….p.12 1.3.2 Contraintes de planning………………………………………………………...p.12 1.3.3 Contraintes de budget…………………………………………………………..p.12 1.3.4 Contrôle et suivi…………………………………………………………..…….p.12 2. Rapport sur l’existant…………………………………………………………………...p.13 2.1 Analyse de flux d’information………………………………………………………...p.13 2.2 Modèle conceptuel des traitements……………………………………………………p.15 2.3 Modèles de données actuelles…………………………………………………………p.16 2.4 Rapport critique de la situation actuelle………………………………………………p.17 Etude détaillée……………………………………………………………………………....p.18 3. Solution proposée………………………………………………………………………...p.18 3.1 Orientations du futur système d’information………………………………………….p.18 3.2 Modèle conceptuel des données………………………………..……………………..p.18 3.2.1 Sous modèle de fabrication…………………………………………………….p.18 3.2.2 Sous modèle des travaux divers………………………………………………..p.19 3.2.3 Sous modèle des travaux divers autres………………………………….……..p.20 3.3 Modèle organisationnel des traitements…………………………………………..…..p.21 3.3.1 Postes de travail………………………………………………………………..p.21 3.3.2 Examen des tâches……………………………………………………………..p.22 3.4 Modèle organisationnel des données………………………………………………….p.22 3.4.1 Choix des données à mémoriser…………………………………………….…p.22 3.4.2 Répartition des données…………………………………………………….….p.22 3.4.3 Sécurité………………………………………………………………………...p.22 3.5 Modèle logique des données…………………………………………………………..p.23 3.5.1 Base de données………………………………………………………………..p.24 3.5.2 Description des tables………………………………………………………….p.24 3.6 Modèle orienté objet……………………………………………………….………….p.29 3.6.1 Diagrammes de cas d’utilisation……………………………………………….p.29 3.6.2 Diagrammes de séquence……………………………………………………...p.31

Page 4: gestion production

4

4. Fonctionnalités du logiciel……………………………………………………………….p.32 4.1 Fenêtre principale « Suivi de production » ………………………………………..…p.32 4.2 Ecran « Gestion des opérateurs » …………………………………………………….p.34 4.3 Ecran « Gestion des postes de charge » ……………………………...………………p.35 4.4 Ecran « Contrôle de Production » ……………………………………………………p.36 4.5 Ecran « Contrôle de Montage » ……………………………………………………...p.37 4.6 Ecran « Contrôle des travaux divers » ……………………………………………….p.38 4.7 Barre de navigation…………………………………………………………………...p.39 Liste des applications utilisées……………………………………….……...……………..p.39 CONCLUSIONS…………………………………………………………..……………..…p.40 BIBLIOGRAPHIE……..……………………………………………………………….….p.41 ANNEXE ………………..…………………………………………………………….……p.42

Page 5: gestion production

5

INTRODUCTION

Ce travail de mémoire de gradué en informatique a pour but de fournir une application

permettant d’améliorer de la gestion de la production. La gestion de la production repose essentiellement sur l'utilisation de l'information à

toutes les étapes de la fabrication : prévision, décision, l’exécution et du contrôle. Cette information est élaborée, traitée, diffusée et stockée au sein du système d’information et de son infrastructure, le système informatique. Les systèmes d'information occupent aujourd’hui une place centrale dans la gestion de la production.

Ce projet a comme objectif premier de développer les outils du contrôle qui donnent la

flexibilité quotidienne nécessaire pour réagir aux demandes requis d’atelier de Melotte SA. Il s’agit de réaliser un programme qui permet de connaître en détail le pointage d’une journée complète de chaque opérateur pour toutes les opérations.

Cette application doit être développée à l’aide du langage de programmation C#. De plus cette application doit de se connecter à une base de données MS Access et à en extraire les données et de les afficher dans un format que l’application peut traiter.

Bonne lecture et merci pour l’attention que vous avez accordé à mon mémoire.

Page 6: gestion production

6

ETUDE PREALABLE

1. Domaine et objectif de l’étude 1.1. Champ de l’étude 1.1.1 Contexte du projet

Groupe Gascoigne Melotte

Gascoigne Melotte est un groupe international moderne, avec une forte capacité d’innovation, un réseau de distribution mondial et une expérience de plus d’un siècle.

Il propose des solutions complètes à des problèmes compliqués dans l’agriculture et dans l’industrie. Les problèmes sont de nature technique, économique et opérationnelle.

Gascoigne Melotte est le leader en ce qui concerne la conception et le développement des machines à traire, et dispose d'installations dans plus de 60 pays du monde entier.

A l'origine du développement de Gascoigne Melotte, on trouve deux entreprises familiales : La "Maison Melotte" d'origine, fondée en 1852, s'est engagée dans l'industrie laitière en

1888, après l'invention de l'écrémeuse Melotte par Jules Melotte, le fils du fondateur de la compagnie. L'accueil enthousiaste que ce produit reçut dans le monde entier assura le futur de Melotte dans l'industrie laitière.

La société Gascoigne fut fondée à Reading, en Angleterre, en 1927, par George H. Gascoigne, et obtint rapidement une bonne réputation dans le domaine de l'équipement de traite pratique et de qualité. . Quand Gascoigne et Melotte fusionnèrent, il résulta de l'étendue de l'expérience et des capacités d'innovation des deux compagnies une ligne de produits sans rivale. . Aujourd'hui, au début du 21ème siècle, Gascoigne Melotte est toujours en tête, en développant des méthodes pratiques utilisant la technologie des microprocesseurs pour la ferme, y compris le système de traite robotisé Zenith entièrement automatisé. . Avec des usines de fabrication en Belgique et en Allemagne, et des sociétés de distribution en Hollande, en France, en Belgique, en Allemagne, en Irlande et au Royaume-Uni, Gascoigne Melotte est le fournisseur idéal d'équipement de traite dans le monde entier. . Et ceci concerne non seulement les zones traditionnelles d'élevage laitier en Europe, mais aussi l'Afrique, le Moyen-Orient et l'Extrême-Orient. Gascoigne Melotte participe aux projets de production alimentaire dans des zones qui, jusqu'à une époque récente, étaient des déserts arides. L'équipement produit par Gascoigne Melotte permet de traire des vaches, des brebis, des chèvres et des chameaux. . Les systèmes de traite Gascoigne Melotte conviennent à toutes les fermes, que le troupeau soit constitué de deux, ou de deux mille animaux. Les sociétés associées peuvent fournir tout autre équipement de ferme, des pompes à purin aux citernes, des convoyeurs d'alimentation aux racloirs.

Page 7: gestion production

7

Diagramme des activités

Groupe GM

Agriculture Industrie

Productionlaitière

Electronique

Manutentionlourde

Soustraitance

ConseilAgro

alimentaire

Projetclé en main

Froidindustriel

Production laitière :

- équipements traite - des tanks à lait - des pièces détachées - silos ;

Electronique : - gestion du troupeau - identification automatique - alimentation - enregistrement de la production laitière

Conseil : - étude de projet - conduite de projet - planning, service ;

Projet clé en main : - projets agricoles - infrastructure et développement rural ;

Manutention lourde : - bandes transporteuses sur coussins d’ai- bandes transporteuses traditionnelles

Agro-alimentaire : - tunnels de cuisson - industries laitières

Froid industriel : - systèmes de refroidissement à eau glacé

Page 8: gestion production

8

Les différents services opérationnels

Direction de laproduction

Direction ducommerce

Directionadminist rative et

financière

Directeurgénéral

Achats etapprovisionnem

ent

Gestion deproduction

Fabrication

Comptabilité

Secrétariatgénéral

Personnel

Service clientèlecommande

Ventes etcommerciaux

Magasin etexpédition

OrdonnancementLancement

Montage ettransport

Outillage Electricité etélectronique STR

Bureau d' étudesdes méthodes

Président-Directeur général

Direction del'ingénierie

Direction régionaledu commerce

extérieur

Equipements enaciers inoxydables

Fig. 1.1.1- Organigramme de Gascoigne Melotte

Page 9: gestion production

9

Le siège du Groupe GM est situé à Remicourt à Belgique. GM est divisée en cinq départements supervisés par le directeur général :

- Ingénierie ; - Commerce extérieur ; - Administrative et Finances ; - Production ; - Commerce. Les différents services opérationnels sont en organigramme (Fig.1.1.1).

1.1.2 Domaine du projet

Le domaine du projet concerne le Service de production. Il s’occupe de : Planification

- gestion de la production horaire des opérateurs, génération d’ordres de fabrication, lancement des ordres de fabrication (vérification de la disponibilité des composants), analyse des charges par poste et par des ordres de fabrication.

Ordonnancement - ordonnancement par règles de priorité des ordres de fabrication.

Suivi de production - sortie des composants, enregistrement des quantités fabriquées (pièces bonnes et rebutées)

et des temps passés, clôture des ordres. Valorisations

- calcul du coût réel des ordres de fabrication terminés. Le domaine présente en diagramme (fig.1.1.2).

Mat.prem. ProduitsRes.humaines

Equipements

Production

Gestion de fabrication Information

Planification, ordonnancement, suivi de production

Fig. 1.1.2-Diagramme du domaine du projet

Page 10: gestion production

10

La gestion de production – c’est la recherche d’une organisation efficace de la production par la gestion des ressources :

Ressources humaines; - des opérateurs

Informations - données statistiques

Équipements - postes de travail

Matières - Matières premières, Composants, Stocks

1.1.3 Description du projet Il faut écrire un programme qui compose de plusieurs outils :

- Outil de contrôle de la production horaire de chaque opérateur pour toutes les opérations réalisées dans l’atelier afin de comparer leur production à la production théorique. Ceci permettra de prévenir les dérives et de faire les corrections nécessaires aussi de mettre en évidence les problèmes d’outillage et donc d’y remédier;

- Outil permettent de connaître en détail le pointage d’une journée complète d’un opérateur afin de contrôler l’utilisation des différents codes à barres à leur disposition. (Temps pour le rangement, pour aller chercher le matériel, pour la réalisation des travaux divers etc.) ;

- Outil de lancement des commandes atelier par ajout d’un point de réapprovisionnement et ce uniquement pour les pièces du premier niveau (Transformation de la matière première en pièce) afin d’éviter les ruptures de stock pour ces pièces mais aussi de commander au bon moment les matières nécessaires. (Si on a ces pièces en stock, les assemblages peuvent être effectué rapidement et il n’est donc pas nécessaire de stocker des sous-ensembles.) ;

- Outil de gestion « Charge machine ». Ce permet de connaître les commandes à réaliser pour chaque poste de travail (ou machine). Ceci indispensable pour une bonne gestion des commandes atelier. Des informations supplémentaires sont nécessaires : Ajouter le mois pour lequel doit être fabriquer l’article afin d’éviter de produire une article qui n’est pas nécessaire tout de suite.

1.2 Contraintes organiques

Actuellement l’environnement de Groupe GM relie deux réseaux Novell et Windows NT. Ils sont utilisés dans six sites principaux. L’entreprise dispose d’un parc de 176 ordinateurs personnels et 5 serveurs (Fig.1.2.1).

Page 11: gestion production

11

AT&T

INTERNET

Denmark Sweden

Germany

Swiss

Ireland

Belgium

Belgium

Netherlands

Netherlands

France

United Kingdom

FIREWALL

Router

Router

Router

Router

Router

Router

Fig.1.2.1 Environnement de Groupe GM

Dans le cas de ce projet, il faut de tenir compte un site – l’atelier de Remicourt (Fig.1.2.2). L’atelier utilise :

- 6 terminaux de traitement de code barres, - 17 ordinateurs personnels sous Windows 2000 ; Applications de bureautique (Word,

Excel, Access) ; - 1 serveur AS/400 sous OS/400 ; Base de données DB/2 ; - 1 serveur sous Windows 2000 Server; Base de données Access. Les PC et les terminaux fonctionnent en réseau Ethernet TCP/IP. Le programme doit être installer au PC du responsable d’atelier, sur plateforme

Windows 2000, Service Pack 4, Framework 1.1.4. Il doit utiliser comme base de données MS Access 2000.

Page 12: gestion production

12

1.3 Modalité de déroulement 1.3.1 Ressources humaines

Le programme a été commandé par la direction de la société « Gascoigne Melotte ». Comité directeur : Mr. J.DERLUYN, présidant de GM ; Mr. J.BEAUFORT,

informaticien de GM et Mr. V.UDALOV, étudiant en informatique et responsable de l'étude et du développement du projet.

Comité utilisateurs : Mr. J-C.LAHAYE, responsable d’atelier, Mr. G.FERON, ingénieur. Groupe du projet : Mr. V.UDALOV, pour l'analyse et la programmation. 1.3.2 Contraintes de planning

- Remise de l'étude préalable : 26 février 2005 - Remise de l'étude détaillée : 15 avril 2005 - Remise de l’étude technique : 30 avril 2005 - Approbation finale du projet : 01 juin 2005 - Version bêta et essais par les utilisateurs : 08 juin 2005 - Remise du mémoire : 15 juin 2005 - Livraison du programme : 22 juin 2005.

1.3.3 Contraintes de budget

Il n'y a aucune contrainte de budget car cette étude est le résultat d’un mémoire et donc ne peut être subsidié par des personnes ou des entreprises. 1.3.4 Contrôle et suivi

Le projet est réalisé sous la guidance de deux parrains : interne - Mr. A.BAWIN et externe -Mr. J-C.LAHAYE.

Page 13: gestion production

13

2. Rapport sur l’existant 2.1 Analyse de flux d’information

Le domaine entre en relation avec les autres. Les relations entre les domaines présenter en diagramme (Fig.2.1.1). Dans le diagramme, on a ajouté quelques flux, qui ne concernent pas directement le domaine du projet, mais permettent de comprendre la structure du système de production et de gestion. Direction Sa rôle est détermination des charges sur les ressources globales par

d’information statistique. Plan de Production Programme de production à moyen terme (6 – 12 mois) qui fixe les

quantités qui devraient être produites. Le plan inclut des moyens de production, des ressources et des périodes de fabrication.

Poste de travail Les moyens de production de l'entreprise. Un poste de travail peut

représenter : - Machine particulière - Ligne de fabrication - Groupe de machines On distingue deux types de postes de charge : - Postes de charge qui se compose d'une ou plusieurs machines pour lesquels le calcul du temps presté peux effectuer - Postes de charge pour lesquels le calcul du temps presté ne peux pas effectuer et doit être calculé manuellement.

Ordonnancement Opération qui consiste à définir la priorité des ordres de fabrication ou

des commandes sur les différents postes de travail d'un atelier. Ordre Document donnant instruction à la fabrication de produire. Fabrication Processus de fabrication des articles, c'est-à-dire la succession des

opérations ou phases à réaliser pour fabriquer un article. Une phase se déroule sur un poste de charge. Ils incluent des cycles de fabrication. Le cycle, c’est l'intervalle de temps nécessaire entre la date de lancement et la date d'entrée en stock de produits finis ou la date de livraison. C'est la somme des temps de préparation et réglage, des temps opératoires, des temps d'attente etc.

Article Terme générique qui permet de définir tous les éléments achetés (matière,

fourniture,…), transformés (semi-ouvré, sous-ensemble, produit fini), vendus (produit fini, négoce,…).

Vérification Il doit se faire en cohérence avec l'ordonnancement et après s'être assuré

que les matières, composants et outillages sont disponibles.

Page 14: gestion production

14

Direction

Atelier

Ordre

File Opérateur

Vérification des stocks

Rapportst atist ique

Plan deproduct ion

Stock

Emission

Fabrication

Sortie

Article

Vérificat iondes composants

Ent rée

Ordonnancement

Poste detravail

Charger

Fig.2.1.1 Diagramme des flux

Page 15: gestion production

15

2.2 Modèle conceptuel des traitements

Au début d’une période de travail (Exemple : une semaine), un responsable d’atelier reçoit des ordres de fabrication (Mode opératoire de fabrication). Les dates limites des périodes sont entrées dans un plan de production (Rôle de direction).

Le service de Commerce vérifie les statuts de composants (Exemple : DISP -disponible, REFA - réservé à la fabrication, ENC - en cours de fabrication). La vérification permet d’éviter les ruptures de stock par l’ordonnancement des opérations de fabrication qui doivent permettre de satisfaire les ventes. Une fois que les ordres sont ordonnancés, il est possible de passer à la phase de lancement de certains ordres en fabrication (à condition que les matières et composants nécessaires soient disponibles).

Apres la vérification (à condition – positive, si négatif – passer OF à la file d'attente) le responsable donne un ordre de fabrication au opérateur. L’opérateur doit pointer le début de travail.

Le responsable d’atelier doit contrôler de la production de chaque opérateur pour toutes les opérations (Fabrication). A la fin d’une période de travail, le responsable d’atelier doit envoyer un rapport à la direction (OF lancé/clôturé, quantité, productivité). OF – Ordre de fabrication

A et B

Composants disponibles Composants indisponible

Verification

PasserFile

LancerOF

EmisisonOF

Direction

D et C

OK Rebut

Fabrication

PointeDebut

D C

ClôrureOF Retouche

A B

Atelier

Service Commerce

Service Commerce

Ordonnancer

Fig.2.2 MCT

Page 16: gestion production

16

2.3 Modèles de données actuelles

Une base de données existante compose de deux tables. Ces tables sont récupérées de l’AS/400 et injectées dans MS Access via ODBC.

Cette base est placée sur le PC du responsable d’atelier. Le traitement sur le PC se limite

essentiellement à la validation les informations.

Page 17: gestion production

17

2.4 Rapport critique de la situation actuelle La gestion de la production se déroule sur quatre horizons :

- Horizon à long terme, c'est un horizon de 12 à 18 mois. A ce niveau, on détermine les grands équilibres de charge. - Horizon à moyen terme, de quelques mois, sur lequel on effectue le calcul des besoins pour passer les commandes aux fournisseurs ; on vérifie également que la charge est compatible avec la capacité. - Horizon de court terme, de quelques semaines, sur lequel on effectue un planning précis des fabrications prévues ; on peut encore ajuster la capacité main-d'oeuvre. - Horizon de très court terme, une semaine en général, sur lequel on lance les fabrications

Deux derniers horizons, ce sont les décisions opérationnelles pour des ordres de fabrication, l’activité opérateurs et l’état de stock.

Actuellement, la direction détermine un programme de production à moyen terme (6 –

12 mois). Ce programme inclut des moyens de production, des ressources et des périodes de fabrication. Mais, il n’y a pas les outils qui donnent la flexibilité quotidienne nécessaire pour réagir aux demandes : pannes, absence, urgence, problèmes d’outillage, réalisation des travaux divers etc.

La situation actuelle ne permet pas de connaître l'état de l'ordre de fabrication lancé à tout moment.

De manière évidente, la création d’un programme de contrôle de production permettrait

le responsable d’atelier de faire les corrections nécessaires, reprenant les dernières données connues.

Page 18: gestion production

18

ETUDE DETAILLEE 3. Solution proposée 3.1 Orientations du futur système d’information Le projet va tenter de résoudre des problèmes dans la gestion de production quotidienne :

- gestion des opérateurs - gestion des postes de charge - contrôle l’utilisation des différents codes à barres - contrôle de la production horaire et la correction nécessaire - gestion des ordres de fabrication de court terme (quelques semaines) et de très court

terme (une semaine en général) 3.2 Modèle conceptuel des données

Le modèle de production étant relativement complexe, je présente les entités et les associations utilisées dans des sous modèles Il y a trois différents situations :

- fabriquer des articles (Production, Montage) - réaliser des travaux divers - faire des travaux divers autres

3.2.1 Sous modèle de fabrication Commande - Document donnant instruction à la fabrication de produire dans un délai fixé,

une quantité donnée d'un article (Mode opératoire de fabrication). Ordre - Opération de la production ou de la réglage de la machine. Opérateur - Personne qui doit faire des travaux. Pour suivre l'activité de la main-d'oeuvre,

on doit indiquer le code de l'opérateur dans les déclarations de production. Retouche - Lorsque l'on déclare des pièces rebutées lors des déclarations de production, on

doit indiquer un code de cause de rebut. Cela permet d'établir des statistiques de causes de rebut.

Article - Produits finis, ClassPrior - Le code classe ABC permet de classer les commandes par leur priorité (Définir

dans le plan production) Client - Promoteur de la commande Comporter - Commande porte sur une ou plusieurs opérations. Fabriquer - C'est l'intervalle de temps d’occupation pour chaque opération (temps de

préparation et réglage - Setup ou temps opératoires - Production).

Page 19: gestion production

19

Un code Setup/Production doit être indiqué pour toutes les déclarations de production.

Ordre

NoOrdDescrProHorTpMontQntAprod

Commande

NoCmdDateEms

Opérateur

NoMatrNomStat ut

EffectuerDateTR

ComporterNbrOper

FabriquerDébut

Fin Temps

SetProdClôtQnt

1,N

1,N

1,N 1,1

1,1

1,N

Article

NoArtLibelléLgLaHtPBrutPNet

ComposerQunté

0,N

1,N

Client

IdClientLibellé

Appartenir1,N

1,1

Retouche

IdRetLibellé

FaireDébutFinTemps

0,N

0,1

ClassPrior

IdPriorLibellé

Lier 1,N1,1

Fig.3.2.1 MCD - fabrication 3.2.2 Sous modèle des travaux divers TravDiv - Travaux divers, on peut dire les ordres de travail non ordonnancés. Réaliser - Temps de la réalisation de travail Responsable - Le gestionnaire est la personne responsable de la gestion des travaux divers.

A chaque opération de travail divers est associé un code Responsable qui doit figurer dans cette table.

Page 20: gestion production

20

TravDiv

NoTDDescr

Opérateur

NoMat rNomStatut

Réalis erDebut

Fin Temps

Responsable

IdResNom

Article

NoArtLibelléLgLaHtPBrutPNet

ProduireQunté

D emander

0,N

0,1

1,N

1,1

1,N

1,1

Fig.3.2.2 MCD - travaux divers

3.2.3 Sous modèle des travaux divers autres TDA - Travaux divers autres (balayer, réparation, essai etc.). Il y a deux parties : Entretiens

et Pannes. Inclure - Pour calculer de temps de travail.

Commande

NoCmdDateEms

Opérateur

NoMat rNomStatut

EffectuerDateTR

1,N 1,1

TDA

IdRetLibellé

Incl ureDébutFinTemps

0,1

0,N

Fig.3.2.3 MCD – travaux divers autres

Page 21: gestion production

21

3.3 Modèle Organisationnel des Traitements

Période Direction Service Commerce Atelier Type

Manuel

Manuel

A et B

Dispon Indispon

Verification

Emission OF

Passer Fille

Lancer OF

D et C

OK Rebut

Fabrication

Pointer Debut

Clôture OF

Retouche

Ordonnancer

Fig.3.2.3 MOT 3.3.1 Postes de travail

Il existe un seul poste de travail situé dans le bureau d’un responsable d’atelier, ce poste permettra de réaliser toutes les tâches.

Page 22: gestion production

22

3.3.2 Examen des tâches

La tâche est connaître en détail le pointage d’une journée complète pour chaque opérateur.

On peut diviser cette tâche globale par : 1. Contrôle de Production 2. Contrôle de Montage 3. Contrôle des travaux divers

3.4 Modèle Organisationnel des Données 3.4.1 Choix des données à mémoriser

Le MCD présente toutes les entités nécessaires et aucune d’elles ne semble susceptible de devoir être écartée. 3.4.2 Répartition des données

Car que le programme sera installé sur une seule machine, il n'y aura pas de répartition des données sur d'autres machines. 3.4.3 Sécurité

Car le programme sera installé sur le PC du responsable d’atelier, il est la seule personne qui a l'accès à la gestion de production. Afin de manipuler des données l’utilisateur doit autoriser.

Page 23: gestion production

23

3.5 Modèle logique des données

ORDRE_COMMANDE

ORDRE_FABRIQUE

FABRIQUE_MATRICUL

COMMANDE_EFFECTUE

EFFECTUE_MATRICUL

REALISER_MATRICUL

TRAVDIV_REALISER

COMMANDE_INCLURE

INCLURE_TDA

ORDRE_POSTETRA

COMPOSER_ARTICLE

COMMANDE_COMPOSER

ARTICLE_MODELE

UTILISER_OUTILLAG

ORDRE_UTILISER

RESPONSA_TRAVDIV

RETOUCHE_FAIRE

FAIRE_COMMANDE

Commande

NoCmdDateEms

INTDATE

<pk>

Ordre

NoOrdNoCmdNoMachMutatNuSerLibelléPodHorTpMontQntAprod

INTINTTEXTTEXTINTTEXTDOUBLEDOUBLEDOUBLE

<pk><fk1><fk2>

Matricule

NoMatricNomStatut

INTTEXTTEXT

<pk>

Fabriquer

NoOrdNoMatricDebutFinTempsQuntéSPClot

INTINTDATETIMEDATETIMEDOUBLEINTTEXTTEXT

<fk1><fk2>

Effectuer

NoCmdNoMatricDateTrv

INTINTDATE

<fk1><fk2>

Realiser

NoMatricNoTDDebutFinTemps

INTINTDATETIMEDATETIMEDOUBLE

TravDiv

NoTDIdResLibellé

INTTEXTTEXT

<pk><fk>

Inclure

NoCmdNoTDADebutFinT

INTINTDATETIMEDATETIMEDOUBLE

TDA

NoTDALibellé

INTTEXT

<pk>PosteTrav

NoMachLibelléSection

TEXTTEXTTEXT

<pk>

Composer

NoArtNoCmdQuanté

TEXTINTDOUBLE

<fk1><fk2>

Article

NoArtNoModLibelléLGLAHTPBrutPNet

TEXTINTTEXTDOUBLEDOUBLEDOUBLEDOUBLEDOUBLE

<pk><fk>

Modele

NoModLibellé

INTTEXT

<pk>

Outil lage

NoOutlsLibellé

TEXTTEXT

<pk>

Util iser

NoOutlsNoOrd

TEXTINT

<fk1><fk2>

Retouche

NoRetLibellé

INTTEXT

<pk>

Faire

NoRetNoCmdDebutFinTemps

INTINTDATETIMEDATETIMEDOUBLE

<fk1><fk2>

Responsable

IdResNom

TEXTTEXT

<pk>

Page 24: gestion production

24

3.5.1 Base de données Pour créer la base de données j’ai utilisé le script VBA (Voir Annexe).

Fig.7.1 Base de données

3.9.2. Description des tables La base des données a créée en Microsoft Access 2000. Table : Matricule Elle regroupe les données des opérateurs qui travaillent dans l’atelier

Champ Donnée Clé Type Taille NOMATR Numéro de badge Primary Numérique NOM Nom et prénom Texte 30 STATUT Type de contrat Texte 16

Page 25: gestion production

25

Table : Commande Elle regroupe les informations des commandes de fabrication. La référence client est reprise ici comme clé étrangère.

Champ Donnée Clé Type Taille NOCMD N° de commande Primary Numérique IDCLIENT Identif. du client Foreign Numérique IDPRIOR Priorité Foreign Texte 1 DATEEMISS Date document Date Table : Jobordre Qui regroupe les caractéristiques de l’opération

Champ Donnée Clé Type Taille NORDRE N° opération Primary Numérique NOCMD N° commande Foreign Numérique NOMACH N° machine Foreign Texte 6 MUTAT Mutation machines Texte 6 NUSER Nbr opérations Numérique DESCROPER Description Texte 30 PROHOR Production horaire Numérique TPMONT Temps montage Numérique QNTEAPROD Quantité à produire Numérique Table : Article Qui regroupe les informations sur les articles.

Champ Donnée Clé Type Taille NOART N° d’article Primary Texte 7 IDSITE N° de place Foreign Texte 8 IDMOD N° de modèle Foreign Numérique LIBELLE Description Texte 30 LG Long Numérique LA Large Numérique HT Haut Numérique PBRUT Poids brut Numérique PNET Poids net Numérique Table : PosteCharge Qui regroupe les informations sur les machines. Touts les postes rattachés à la même section auront donc les mêmes taux horaires.

Champ Donnée Clé Type Taille NOMACH N° de machine Primary Texte 6 LIBELLE Description Texte 30 SECTION Nom section Texte 16 Table : TDA Qui regroupe les informations sur les travaux divers autres

Champ Donnée Clé Type Taille NOTDA N° opération Primary Numérique DESCR Description Texte 30

Page 26: gestion production

26

Table : TravDiv Qui regroupe les caractéristiques des ordres de travail non ordonnancés

Champ Donnée Clé Type Taille NOTD N° opération Primary Numérique IDRES Responsable Foreign Texte 3 DESCR Description Texte 30 Table : Retouche Elle regroupe les informations sur les retouches

Champ Donnée Clé Type Taille CODERET Code retouche Primary Numérique DESCR Description Texte 30 Table : Responsable Table des gestionnaires qui sont des responsables de la gestion des travaux divers.

Champ Donnée Clé Type Taille IDRES Texte 3 NOM Texte 30 Table : Pointage Qui regroupe les informations sur Entrée/Sortie pour chaque opérateur

Champ Donnée Clé Type Taille NOMATRIC N° badge Foreign Numérique DEBUT Entrée Date/Heure FIN Sortie Date/Heure TEMPS Temps total, avec

les pauses Numérique

Table : Client

Champ Donnée Clé Type Taille IDCLIENT Identif. promoteur Primary Numérique LIBELLE Nom Texte 30 Table : ClassPrior Les informations sur la priorité de commande

Champ Donnée Clé Type Taille IDPRIOR Identif. priorité Primary Texte 1 LIBELLE Description Texte 20 Table : Modele Elle regroupe les informations sur les modèles (Ensemble des articles).

Champ Donnée Clé Type Taille IDMOD Identif. modèle Primary Numérique DESIGN Description Texte 30

Page 27: gestion production

27

Table : Outillage Elle regroupe les caractéristiques d’outil

Champ Donnée Clé Type Taille IDOUTIL Identif. outil Primary Texte 6 LIBELLE Description Texte 30 Table : Radar Lieu de stockage d’article

Champ Donnée Clé Type Taille IDSITE Id place Primary Texte 8 LIBELLE Description Texte 30 Table : Composer Qui permet de faire le lien entre la commande et les articles à produire

Champ Donnée Clé Type Taille NOART N° article Foreign Texte 7 NOCMD N° commande Foreign Numérique QNTE Quantité à produire Numérique Table : Effectuer Qui permet de faire le lien entre l’opérateur et les commandes de production

Champ Donnée Clé Type Taille NOCMD N° commande Foreign Numérique NOMATRIC N° badge Foreign Numérique DATETR Date travail Date Table : Fabriquer Qui permet de faire le lien entre l’opérateur et les ordres de fabrication. Savoir le temps chaque opération et la quantité a produire. Indiquer l’opération de production ou de réglage aussi clôturer l’ordre de fabrication.

Champ Donnée Clé Type Taille NOMATRIC N° badge Foreign Numérique NORDRE N° ordre Foreign Numérique DEBUT Début opération Date/Heure FIN Fin opération Date/Heure TEMPS Durée opération Numérique QNTPROD Quantité produite Numérique CODESP Setup/Production Texte 1 CODECLOT Clôture Texte 1

Page 28: gestion production

28

Table : Faire Qui permet de faire le lien entre la commande et la retouche.

Champ Donnée Clé Type Taille CODERET Code retouche Foreign Numérique NOCMD N° commande Foreign Numérique DEBUT Début retouche Date/Heure FIN Fin retouche Date/Heure TEMPS Durée retouche Numérique Table : Inclure Qui permet de faire le lien entre la commande et les travaux divers spécieux. Calculer la durée de travail.

Champ Donnée Clé Type Taille NOTDA N° opération Foreign Numérique NOCMD N° commande Foreign Numérique DEBUT Début opération Date/Heure FIN Fin opération Date/Heure TEMPS Temps presté Numérique Table : Produire Qui permet de faire le lien entre l’opération et la quantité produite chaque article

Champ Donnée Clé Type Taille NOART N° article Foreign Texte 7 NOTD N° opération Foreign Numérique QNTE Quantité produite Numérique Table : Realiser Qui permet de faire le lien entre l’opération de travail divers et l’opérateur et savoir le temps de travail

Champ Donnée Clé Type Taille NOTD N° opération Foreign Numérique NOMATRIC N° badge Foreign Numérique DEBUT Début opération Date/Heure FIN Fin opération Date/Heure TEMPS Temps presté Numérique Table : Utiliser Qui permet de faire le lien entre l’ordre de fabrication et les outils de travail

Champ Donnée Clé Type Taille NORDRE N° opération Foreign Numérique IDOUTIL Id outil Foreign Texte 6

Page 29: gestion production

29

3.6 Modèle orienté objet 3.6.1 Diagrammes de cas d’utilisation

Responsable

Ajouter opérateur

Modifier opérateur

Supprimer opérateur

Verifier matricule

Fig.3.6.1 Use case – Gestion des opérateurs

L’utilisateur veut ajouter, modifier ou supprimer des données de l’opérateur. Il doit choisir le nom de l’opérateur.

Responsable

Modifier charge machine

Calculer charge

Verifier numéro

Donner période

Fig.3.6.2 Use case – Gestion des postes de travail

Si l’utilisateur veut modifier ou fichier Charge machine, il doit choisir le numéro d’une machine. Il peut de calculer le temps de travail pour chaque machine.

Page 30: gestion production

30

Responsable

Contrôler production

Contrôler montage

Contrôler TD

Calculer temps presté

Calculer productivité

Répartir temps

Classer par numéro

Fig.3.6.3 Use case – Suivi de production

L’utilisateur peut connaître toutes les opérations de production et de montage lancé dans

l’atelier, comparer la productivité réelle par la productivité théorique, savoir le temps pour réalisation des travaux divers.

Page 31: gestion production

31

3.6.2 Diagrammes de séquence

Lancer programme

Demande données

Envoi données

Afficher renseignements

Traiter données

Demande l iste opérateurs

Ajouter données

Sauvegarder données

Enregistrer données

Quitter

Demande l iste opérateurs

Affiche liste opérateurs

Verification données requisAffiche message

Suivi production

Util isateur

Base Données Gestion opérateur

Fig.3.6.2 Consulter le pointage global et ajouter des opérateurs

L’utilisateur lance le programme, le programme envoie des requêtes vers la base de

données et après la réception les informations, on les traite et affiche le résultat dans l’écran. Si l’utilisateur veut ajouter des données d’un opérateur, il demande une liste des

opérateurs, il ajoute des données, il valide l’enregistrement. Le programme doit vérifier des données introduites et l’affiche un message (ok ou erreur) et après la confirmation d’utilisateur, on envoie ces données vers la base de données.

Page 32: gestion production

32

4. Fonctionnalités du logiciel 4.1 Fenêtre principale « Suivi de production »

Suivi de production, il s’agit de contrôle quotidien :

- Calculer le temps total pour toute l’atelier - Calculer le temps total et le pourcentage pour toutes les opérations de production - Calculer le temps total et le pourcentage pour toutes les opérations de montage - Calculer le temps total et le pourcentage pour touts les travaux divers - Répartir le temps des travaux divers par : TDS (Travaux divers spécieux), TDA

(Travaux divers autres), Retouche - Trier ces données par la date de travail

Problèmes : 1. Les données sont envoyées vers le serveur par les différents types de transaction:

- Temps presté sans le décompte des pauses - Temps presté avec décompte des pauses Il faut calculer le temps total sans pauses.

2. Il y a les situations : Job multiple et Montage commun, quand l’opérateur utilise deux machine au même temps. On doit de faire la répartition du temps, si un des jobs

Page 33: gestion production

33

multiples n'est pas complet (temps presté=0), aucun calcul de répartition n'est pas possible

3. Pour plusieurs postes de charge, le temps presté est calculé sur base de la quantité introduite multipliée par la production horaire. C'est-à-dire il y a des situations quand l’opérateur n'a pas été pointé le début du travail.

Pour éliminer les temps des pauses et gérer des erreurs d’enregistrements, j’ai fait deux fonctions en Visual Basic (contrôle dans une base de données) : Option Compare Database '================================================================== ' Fonction permettant éliminer des temps de pause ' Author Vitali UDALOV '================================================================== Public Function EliminerPauses(DEBUT As Variant, FIN As Variant, Temp As Double) As Double Dim TimeVar As Double Const Debut1Pause = #9:00:00 AM# Const Fin1Pause = #9:12:00 AM# Const Debut2Pause = #12:00:00 PM# Const Fin2Pause = #12:30:00 PM# Const p1 = 0.2 Const p2 = 0.5 If IsNull(FIN) Then EliminerPauses = 0 Exit Function End If If IsEmpty(FIN) Then EliminerPauses = 0 Exit Function End If If (Format(DEBUT, "hh\:nn\:ss") < Debut1Pause And Format(FIN, "hh\:nn\:ss") > Fin2Pause) Then TimeVar = Temp - p1 - p2 ElseIf ((Format(DEBUT, "hh\:nn\:ss") < Debut1Pause) And (Format(FIN, "hh\:nn\:ss") > Fin1Pause And _ Format(FIN, "hh\:nn\:ss") < Debut2Pause)) Then TimeVar = Temp - p1 ElseIf ((Format(DEBUT, "hh\:nn\:ss") > Debut1Pause And Format(DEBUT, "hh\:nn\:ss") < Debut2Pause) And _ Format(FIN, "hh\:nn\:ss") > Fin2Pause) Then TimeVar = Temp - p2 Else TimeVar = Temp End If EliminerPauses = TimeVar End Function

Page 34: gestion production

34

Requête pour avoir le temps total de production : SELECT Sum(Fabriquer.TEMPS) AS SommeDeTEMPS FROM (Commande INNER JOIN Jobordre ON Commande.NOCMD = Jobordre.NOCMD) INNER JOIN Fabriquer ON Jobordre.NORDRE = Fabriquer.NORDRE WHERE (((Fabriquer.DEBUT)>Date()-1 AND (Fabriquer.DEBUT)<Date()) AND ((Fabriquer.FIN) Is Not Null) AND ((Fabriquer.CODESP)<>"S") AND ((Commande.NOCMD)<>95007000)); Requête pour avoir le temps total de montage : SELECT Sum(Fabriquer.TEMPS) AS SommeDeTEMPS FROM (Commande INNER JOIN Jobordre ON Commande.NOCMD = Jobordre.NOCMD) INNER JOIN Fabriquer ON Jobordre.NORDRE = Fabriquer.NORDRE WHERE (((Fabriquer.DEBUT)>Date()-1 AND (Fabriquer.DEBUT)<Date()) AND ((Fabriquer.FIN) Is Not Null) AND ((Fabriquer.CODESP)<>"P") AND ((Commande.NOCMD)<>95007000)); Requête pour avoir le temps total des travaux divers : SELECT Sum(Realiser.TEMPS) AS TempsDeTD FROM Realiser WHERE (((Realiser.DEBUT)>Date()-1 AND (Realiser.DEBUT)<Date()) AND ((Realiser.FIN) Is Not Null)); Requête pour avoir le temps total des travaux divers autres: SELECT Sum(Inclure.TEMPS) AS TempsDeTDA FROM Inclure WHERE (((Inclure.DEBUT)>Date()-1 AND (Inclure.DEBUT)<Date()) AND ((Inclure.FIN) Is Not Null)); Requête pour avoir le temps total des travaux divers spécieux: SELECT Sum(Fabriquer.TEMPS) AS TempsDeTDS FROM (Commande INNER JOIN Jobordre ON Commande.NOCMD = Jobordre.NOCMD) INNER JOIN (Matricule INNER JOIN Fabriquer ON Matricule.NOMATRIC = Fabriquer.NOMATRIC) ON Jobordre.NORDRE = Fabriquer.NORDRE WHERE (((Fabriquer.DEBUT)>Date()-1 AND (Fabriquer.DEBUT)<Date()) AND ((Fabriquer.FIN)<> Is Not Null) AND ((Commande.NOCMD) = 95007000)); 4.2 Ecran « Gestion des opérateurs »

Tous les champs d’éditions ont été remplis par des données de l’opérateur reprises de la base de données. Certains champs peuvent être vides. Gestion des opérateurs

- ajouter, modifier et supprimer l’opérateur, la validation n’est faite que si les champs Matricule et Nom ont été remplis.

Page 35: gestion production

35

4.3 Ecran « Gestion des postes de charge »

Page 36: gestion production

36

Gestion des machines

- ajouter, modifier et supprimer la poste de travail, la validation n’est faite que si le champ Code Poste a été rempli

- calculer les frais pour chaque poste de travail, il faut choisir la période de travail, et les enregistre dans un fichier.

4.4 Ecran « Contrôle de Production »

Contrôle de production, suivi des ordres de fabrication lancés

- Calculer la durée de l’opération - Si l’ordre de fabrication clôturé, calculer le pourcentage - Si la quantité n'a pas été pointée, corriger la quantité en consultant le fichier résultat de

travail - Trier par la date

Problèmes : 1. La durée d’une opération est varié de ‘minute’ à ‘mois’. Il faut chercher les données :

temps et quantité, pour une même opération 2. Il faut éliminer le temps des pauses

Page 37: gestion production

37

Requête pour afficher des opérations de production: SELECT Matricule.NOMATRIC, Matricule.NOM, Commande.NOCMD, Jobordre.NORDRE, Jobordre.DESCROPER, Article.NOART, Article.LIBELLE, Fabriquer.DEBUT, Fabriquer.FIN, Fabriquer.TEMPS, Jobordre.PROHOR, Jobordre.QNTEAPROD, Fabriquer.QNTPROD, Fabriquer.CODECLOT FROM Article INNER JOIN (((Commande INNER JOIN Jobordre ON Commande.NOCMD = Jobordre.NOCMD) INNER JOIN (Matricule INNER JOIN Fabriquer ON Matricule.NOMATRIC = Fabriquer.NOMATRIC) ON Jobordre.NORDRE = Fabriquer.NORDRE) INNER JOIN Composer ON Commande.NOCMD = Composer.NOCMD) ON Article.NOART = Composer.NOART WHERE (((Commande.NOCMD)<>95007000) AND ((Fabriquer.CODESP)<>"S") AND ((Fabriquer.CODECLOT)="C")) ORDER BY Matricule.NOM, Fabriquer.DEBUT DESC; 4.4 Ecran « Contrôle de Montage »

Contrôle de montage, suivi des ordres de réglage machine lancés

- Calculer la durée de l’opération - Si l’ordre de fabrication clôturé, calculer le pourcentage - Trier par la date

Page 38: gestion production

38

Requête pour afficher des opérations de montage: SELECT Matricule.NOMATRIC, Matricule.NOM, Commande.NOCMD, Jobordre.NORDRE, Jobordre.DESCROPER, Article.NOART, Article.LIBELLE, Fabriquer.DEBUT, Fabriquer.FIN, Fabriquer.TEMPS, Jobordre.TPMONT, Fabriquer.CODECLOT FROM Article INNER JOIN (((Commande INNER JOIN Jobordre ON Commande.NOCMD = Jobordre.NOCMD) INNER JOIN (Matricule INNER JOIN Fabriquer ON Matricule.NOMATRIC = Fabriquer.NOMATRIC) ON Jobordre.NORDRE = Fabriquer.NORDRE) INNER JOIN Composer ON Commande.NOCMD = Composer.NOCMD) ON Article.NOART = Composer.NOART WHERE (((Commande.NOCMD)<>95007000) AND ((Fabriquer.CODESP)<>"P") AND ((Fabriquer.CODECLOT)="C")) ORDER BY Matricule.NOM, Fabriquer.DEBUT DESC; 4.5 Ecran « Contrôle des travaux divers »

Contrôle des travaux divers

- Calculer la durée de l’opération - Trier par la date

Requête pour afficher des informations des travaux divers: SELECT Matricule.NOMATRIC, Matricule.NOM, TravDiv.NOTD, TravDiv.DESCR, Realiser.DEBUT, Realiser.FIN, Realiser.TEMPS FROM TravDiv INNER JOIN (Matricule INNER JOIN Realiser ON Matricule.NOMATRIC = Realiser.NOMATRIC) ON TravDiv.NOTD = Realiser.NOTD WHERE (((Realiser.FIN) Is Not Null)) ORDER BY Matricule.NOM, Realiser.DEBUT DESC;

Page 39: gestion production

39

4.7 Barre de navigation

Il s’agit d’un composant utilisateur qui implémente l’ensemble des techniques de navigation. Il m’évitera de réécrire systématiquement les mêmes méthodes. Que fait ce composant :

- Il encapsule les problèmes de navigation et d’édition des données. - Il permet d’appeler automatiquement une fonction lors de l’ajout d’un enregistrement

ou du déplacement dans le jeu d’enregistrements - Il fournit un accès à l’enregistrement en cours - Il facilite la mise à jour de la base de données en fournissant une méthode statique - Il met en place la gestion des éventuelles erreurs lors de la modification des données.

Si on clique sur le premier bouton en partant de la gauche

- On se positionne sur le premier élément de la table Si on clique sur le deuxième bouton en partant de la gauche

- On se positionne sur l’élément précèdent de la table Si on clique sur le troisième bouton en partant de la gauche

- On se positionne sur l’élément suivant de la table Si on clique sur le quatrième bouton en partant de la gauche

- On se positionne sur l’élément dernier de la table Si on clique sur Valider :

- Vérification si les champs requis ont bien été remplis. Si non, un message d’erreur s’affiche - Si OK, le système vérifie que l’id n’existe pas encore. Si existe un message d’erreur

s’affiche, sinon il y a sauvegarde des données - On rafraîchit la table pour que le nouvel élément soit repris dans la liste

Si on clique sur Annuler :

- Annuler toutes les modifications Liste des applications utilisées - SmartDraw 7.01 - Logiciel graphique pour la création des diagrammes - PowerAMC 9.0 - Outil de modélisation graphique - CASE Studio 2 - Outil de modélisation de base de données - Microsoft Word 2000 – Editeur de texte - PDFEdit v7.1 - Editeur pdf - Microsoft Visual Studio .NET 2003 - Outils de développement - Dacris NetXP - Outil pour améliorer l'interface utilisateur de leurs applications - Microsoft Access 2000 - Gestionnaire de bases de données

Page 40: gestion production

40

CONCLUSIONS

L’objectif de ce travail a été atteint. Le programme de suivi de production embarqué fonctionne. Ça donne les avantages pour d’organiser la production efficace.

Il n’a pas encore été testé dans une situation réelle, ce qui demanderait probablement quelques modifications mineures spécifiques au type d’utilisation.

Ce programme est un module d’ensemble d’outils de gestion de l’entreprise. Mais elle peut être utilisé de façon individuelle et de plus pourrait être intégré, sans trop de problèmes, dans un logiciel GPAO. Lors de cette étude, de nombreux problèmes, de ce domaine, n’ont pas étudiés, il s’agit de :

- gestion des stocks, réservation dans les stocks les composants du produit à fabriquer - gestion de calendrier d’activité opérateurs - ordonnancement de production par la capacité de machine

L’analyse de ces problèmes, c’est le travail de long temps. La planification future? Développer un programme qui permet de réaliser la gestion pour toutes les étapes de la prévision, de la décision, de l’exécution et du contrôle. Ce travail de fin d’études m’a, évidemment, permis d’appliquer toutes les connaissances acquises lors de ces années d’études. Je me suis rendu compte de la difficulté de mettre en pratique les matières vues dans les différents cours théoriques. Mais j’ai cependant appris à gérer les contraintes humaines, mes choix et mon temps de travail… Toutes choses que l’on ne trouve pas dans les manuels scolaires mais qui sont pourtant, fondamentales dans le monde professionnel. De plus ce travail m’a donné la connaissance d’avantage d’utilisation le système informatique dans le domaine de la gestion des entreprises et j’envisage des formations ou des études dans cette direction.

Page 41: gestion production

41

BIBLIOGRAPHIE

Ouvrages

- Joseph Gabay Merise et UML pour la modélisation des systèmes d'information Edition Dunod – ISBN: 2-10-005575-5

- Martin Fowler Le tout en poche UML

Edition CampusPress - ISBN: 2-7440-1336-6 - Jay Hilyard, Stephen Teilhet C# Cookbook

Edition O'Reilly – ISBN: 0-596-00339-0 - Simon Robinson, K. Scott Allen C# Professionnel

Edition Wiley – ISBN: 0-7645-5759-9 - Brian Johnson, Craig Skibo Inside Microsoft Visual Studio.NET 2003

Edition Microsoft Press – ISBN: 0-7356-1874-7 - Alain Courtois, Maurice Pillet, Chantal Martin-Bonnefous Gestion de production

Edition Organisation Eds D' – ISBN: 2-7081-2986-4 Support électronique http://www.developpez.com/ http://www.csharpfr.com/ http://www.csharphelp.com/ www.codeproject.com/ www.uml.org http://uml.free.fr/ http://www.sybase.fr http://www.commentcamarche.net FAQ Merise http://uml.developpez.com/faq/merise/ FAQ UML http://uml.developpez.com/faq/

Page 42: gestion production

42

ANNEXE

Fichier de création de la base de données sous format MS Access : ' Created 25/01/2005 ' Modified 04/03/2005 ' Project Suivi de production ' Company Melotte SA ' Author Vitali UDALOV ' Version 1.0.3 ' Database Access 2000 '======================================================= '=== MS Access 2000 database '=== '=== 1. Create a new database in the MS Access 2000 '=== 2. Create a new module '=== 3. Copy the SQL script into the new MS Access 2000 module '=== 4. Select from main menu "Tools" item "References..." and check the "Microsoft DAO '=== 3.6 Object Library." '=== 5. Place your mouse cursor somewhere in the main procedure Main() '=== 6. Run the module code (Click the "Run Sub/UserForm" button or press F5) '======================================================= Public dbs As DAO.Database Public tdf As DAO.TableDef Public idx As DAO.Index Public rel As DAO.Relation Sub Main() Set dbs = CurrentDb() On Error GoTo ErrorHandler Call CreateTables Call CreatePrimaryKeys Call CreateIndexes MsgBox "Script successfully processed.", vbInformation Exit Sub ErrorHandler: Select Case Err.Number Case 3010 MsgBox "Table " & tdf.Name & " allready exist!", vbInformation Err.Clear Case 3284 MsgBox "Index " & idx.Name & " for table " & tdf.Name & " allready exist!", vbInformation Err.Clear Case Else MsgBox Err.Description, vbCritical End Select

Page 43: gestion production

43

End Sub ' Create tables '=============== Sub CreateTables() Call CreateTable1 'Commande Call CreateTable2 'Article Call CreateTable3 'Composer Call CreateTable4 'Jobordre Call CreateTable5 'Matricule Call CreateTable6 'Fabriquer Call CreateTable7 'TravDiv Call CreateTable8 'Realiser Call CreateTable9 'Pointage Call CreateTable10 'Retouche Call CreateTable11 'TDA Call CreateTable12 'PosteCharge Call CreateTable13 'Outillage Call CreateTable14 'Utiliser Call CreateTable15 'Client Call CreateTable16 'Radar Call CreateTable18 'ClassPrior Call CreateTable20 'Modele Call CreateTable21 'Resposable Call CreateTable22 'Produir Call CreateTable23 'Faire Call CreateTable24 'Inclure Call CreateTable26 'Effectuer End Sub '=== Create table Commande ====== Sub CreateTable1() Set tdf = dbs.CreateTableDef( "Commande" ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("IDCLIENT", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("IDPRIOR", dbText, 1, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DATEEMISS", dbDate, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Article ====== Sub CreateTable2()

Page 44: gestion production

44

Set tdf = dbs.CreateTableDef( "Article" ) Call AddFieldToTable("NOART", dbText, 7, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("IDSITE", dbText, 8, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 30, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("LG", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("LA", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("HT", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("PBRUT", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("PNET", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("IDMOD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Composer ====== Sub CreateTable3() Set tdf = dbs.CreateTableDef( "Composer" ) Call AddFieldToTable("NOART", dbText, 7, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("Qnte", dbLong, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Jobordre ====== Sub CreateTable4() Set tdf = dbs.CreateTableDef( "Jobordre" ) Call AddFieldToTable("NORDRE", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOMACH", dbText, 6, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("MUTAT", dbText, 6, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("NUSER", dbInteger, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("DESCROPER", dbText, 30, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("PROHOR", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TPMONT", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("QNTEAPROD", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub

Page 45: gestion production

45

'=== Create table Matricule ====== Sub CreateTable5() Set tdf = dbs.CreateTableDef( "Matricule" ) Call AddFieldToTable("NOMATRIC", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOM", dbText, 30, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("STATUT", dbText, 16, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Fabriquer ====== Sub CreateTable6() Set tdf = dbs.CreateTableDef( "Fabriquer" ) Call AddFieldToTable("NORDRE", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOMATRIC", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPS", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("QNTPROD", dbLong, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("CODESP", dbText, 1, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("CODECLOT", dbText, 1, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table TravDiv ====== Sub CreateTable7() Set tdf = dbs.CreateTableDef( "TravDiv" ) Call AddFieldToTable("NOTD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("IDRES", dbText, 3, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DESCR", dbText, 30, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPSTD", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub

Page 46: gestion production

46

'=== Create table Realiser ====== Sub CreateTable8() Set tdf = dbs.CreateTableDef( "Realiser" ) Call AddFieldToTable("NOTD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOMATRIC", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPS", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Pointage ====== Sub CreateTable9() Set tdf = dbs.CreateTableDef( "Pointage" ) Call AddFieldToTable("NOMATRIC", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPS", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Retouche ====== Sub CreateTable10() Set tdf = dbs.CreateTableDef( "Retouche" ) Call AddFieldToTable("CODERET", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DESCR", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table TDA ====== Sub CreateTable11() Set tdf = dbs.CreateTableDef( "TDA" )

Page 47: gestion production

47

Call AddFieldToTable("NOTDS", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DESCR", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table PosteCharge ====== Sub CreateTable12() Set tdf = dbs.CreateTableDef( "PosteCharge" ) Call AddFieldToTable("NOMACH", dbText, 6, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 30, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("SECTION", dbText, 16, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Outillage ====== Sub CreateTable13() Set tdf = dbs.CreateTableDef( "Outillage" ) Call AddFieldToTable("IDOUTIL", dbText, 6, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Utiliser ====== Sub CreateTable14() Set tdf = dbs.CreateTableDef( "Utiliser" ) Call AddFieldToTable("NORDRE", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("IDOUTIL", dbText, 6, 0, "", "", "", TRUE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Client ====== Sub CreateTable15()

Page 48: gestion production

48

Set tdf = dbs.CreateTableDef( "Client" ) Call AddFieldToTable("IDCLIENT", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Radar ====== Sub CreateTable16() Set tdf = dbs.CreateTableDef( "Radar" ) Call AddFieldToTable("IDSITE", dbText, 8, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table ClassPrior ====== Sub CreateTable18() Set tdf = dbs.CreateTableDef( "ClassPrior" ) Call AddFieldToTable("IDPRIOR", dbText, 1, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("LIBELLE", dbText, 20, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Modele ====== Sub CreateTable20() Set tdf = dbs.CreateTableDef( "Modele" ) Call AddFieldToTable("IDMOD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DESIGN", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Resposable ======

Page 49: gestion production

49

Sub CreateTable21() Set tdf = dbs.CreateTableDef( "Resposable" ) Call AddFieldToTable("IDRES", dbText, 3, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOM", dbText, 30, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Produir ====== Sub CreateTable22() Set tdf = dbs.CreateTableDef( "Produir" ) Call AddFieldToTable("NOART", dbText, 7, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOTD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("QNTE", dbLong, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Faire ====== Sub CreateTable23() Set tdf = dbs.CreateTableDef( "Faire" ) Call AddFieldToTable("CODERET", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPS", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Inclure ====== Sub CreateTable24() Set tdf = dbs.CreateTableDef( "Inclure" ) Call AddFieldToTable("NOTDS", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE )

Page 50: gestion production

50

Call AddFieldToTable("DEBUT", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("FIN", dbDate, 0, 0, "", "", "", FALSE, FALSE ) Call AddFieldToTable("TEMPS", dbDouble, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub '=== Create table Effectuer ====== Sub CreateTable26() Set tdf = dbs.CreateTableDef( "Effectuer" ) Call AddFieldToTable("NOCMD", dbLong, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("NOMATRIC", dbInteger, 0, 0, "", "", "", TRUE, FALSE ) Call AddFieldToTable("DATETR", dbDate, 0, 0, "", "", "", FALSE, FALSE ) dbs.TableDefs.Append tdf End Sub ' Create primary keys '===================== Sub CreatePrimaryKeys() '=== Create primary key for table Commande ====== Set tdf = dbs.TableDefs( "Commande" ) Set idx = tdf.CreateIndex( "pk_Commande" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOCMD", False ) tdf.Indexes.Append idx '=== Create primary key for table Article ====== Set tdf = dbs.TableDefs( "Article" ) Set idx = tdf.CreateIndex( "pk_Article" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False

Page 51: gestion production

51

Call AddFieldToIndex( "NOART", False ) tdf.Indexes.Append idx '=== Create primary key for table Composer ====== Set tdf = dbs.TableDefs( "Composer" ) Set idx = tdf.CreateIndex( "pk_Composer" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOART", False ) Call AddFieldToIndex( "NOCMD", False ) tdf.Indexes.Append idx '=== Create primary key for table Jobordre ====== Set tdf = dbs.TableDefs( "Jobordre" ) Set idx = tdf.CreateIndex( "pk_Jobordre" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NORDRE", False ) tdf.Indexes.Append idx '=== Create primary key for table Matricule ====== Set tdf = dbs.TableDefs( "Matricule" ) Set idx = tdf.CreateIndex( "pk_Matricule" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOMATRIC", False ) tdf.Indexes.Append idx '=== Create primary key for table Fabriquer ====== Set tdf = dbs.TableDefs( "Fabriquer" ) Set idx = tdf.CreateIndex( "pk_Fabriquer" )

Page 52: gestion production

52

idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NORDRE", False ) Call AddFieldToIndex( "NOMATRIC", False ) tdf.Indexes.Append idx '=== Create primary key for table TravDiv ====== Set tdf = dbs.TableDefs( "TravDiv" ) Set idx = tdf.CreateIndex( "pk_TravDiv" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOTD", False ) tdf.Indexes.Append idx '=== Create primary key for table Realiser ====== Set tdf = dbs.TableDefs( "Realiser" ) Set idx = tdf.CreateIndex( "pk_Realiser" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOTD", False ) Call AddFieldToIndex( "NOMATRIC", False ) tdf.Indexes.Append idx '=== Create primary key for table Pointage ====== Set tdf = dbs.TableDefs( "Pointage" ) Set idx = tdf.CreateIndex( "pk_Pointage" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOMATRIC", False ) tdf.Indexes.Append idx '=== Create primary key for table Retouche ======

Page 53: gestion production

53

Set tdf = dbs.TableDefs( "Retouche" ) Set idx = tdf.CreateIndex( "pk_Retouche" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "CODERET", False ) tdf.Indexes.Append idx '=== Create primary key for table TDA ====== Set tdf = dbs.TableDefs( "TDA" ) Set idx = tdf.CreateIndex( "pk_TDA" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOTDS", False ) tdf.Indexes.Append idx '=== Create primary key for table PosteCharge ====== Set tdf = dbs.TableDefs( "PosteCharge" ) Set idx = tdf.CreateIndex( "pk_PosteCharge" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOMACH", False ) tdf.Indexes.Append idx '=== Create primary key for table Outillage ====== Set tdf = dbs.TableDefs( "Outillage" ) Set idx = tdf.CreateIndex( "pk_Outillage" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "IDOUTIL", False ) tdf.Indexes.Append idx

Page 54: gestion production

54

'=== Create primary key for table Utiliser ====== Set tdf = dbs.TableDefs( "Utiliser" ) Set idx = tdf.CreateIndex( "pk_Utiliser" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NORDRE", False ) Call AddFieldToIndex( "IDOUTIL", False ) tdf.Indexes.Append idx '=== Create primary key for table Client ====== Set tdf = dbs.TableDefs( "Client" ) Set idx = tdf.CreateIndex( "pk_Client" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "IDCLIENT", False ) tdf.Indexes.Append idx '=== Create primary key for table Radar ====== Set tdf = dbs.TableDefs( "Radar" ) Set idx = tdf.CreateIndex( "pk_Radar" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "IDSITE", False ) tdf.Indexes.Append idx '=== Create primary key for table ClassPrior ====== Set tdf = dbs.TableDefs( "ClassPrior" ) Set idx = tdf.CreateIndex( "pk_ClassPrior" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False

Page 55: gestion production

55

Call AddFieldToIndex( "IDPRIOR", False ) tdf.Indexes.Append idx '=== Create primary key for table Modele ====== Set tdf = dbs.TableDefs( "Modele" ) Set idx = tdf.CreateIndex( "pk_Modele" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "IDMOD", False ) tdf.Indexes.Append idx '=== Create primary key for table Resposable ====== Set tdf = dbs.TableDefs( "Resposable" ) Set idx = tdf.CreateIndex( "pk_Resposable" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "IDRES", False ) tdf.Indexes.Append idx '=== Create primary key for table Faire ====== Set tdf = dbs.TableDefs( "Faire" ) Set idx = tdf.CreateIndex( "pk_Faire" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "CODERET", False ) Call AddFieldToIndex( "NOCMD", False ) tdf.Indexes.Append idx '=== Create primary key for table Inclure ====== Set tdf = dbs.TableDefs( "Inclure" ) Set idx = tdf.CreateIndex( "pk_Inclure" ) idx.Primary = True

Page 56: gestion production

56

idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOTDS", False ) Call AddFieldToIndex( "NOCMD", False ) tdf.Indexes.Append idx '=== Create primary key for table Effectuer ====== Set tdf = dbs.TableDefs( "Effectuer" ) Set idx = tdf.CreateIndex( "pk_Effectuer" ) idx.Primary = True idx.Unique = True idx.IgnoreNulls = False Call AddFieldToIndex( "NOCMD", False ) Call AddFieldToIndex( "NOMATRIC", False ) tdf.Indexes.Append idx End Sub ' Create indexes '================ Sub CreateIndexes() End Sub ' Add fields to table '===================== Sub AddFieldToTable(FieldName As String, DataType As String, SizeCol As Integer, Attributes As Long, DefaultValue As Variant, ValText As String, ValRule As String, NotN As Boolean, ZeroLength As Boolean) Dim fld As DAO.Field Set fld = tdf.CreateField( FieldName, DataType ) If SizeCol <> 0 Then fld.Size = SizeCol If Attributes <> 0 Then fld.Attributes = Attributes fld.Required = NotN If DataType = dbText or DataType = dbMemo Then fld.AllowZeroLength = ZeroLength fld.DefaultValue = DefaultValue fld.ValidationRule = ValRule

Page 57: gestion production

57

fld.ValidationText = ValText tdf.Fields.Append fld End Sub ' Add properties to table '========================= Sub AddPropertyToTable( PropertyName As String, Value As Variant, DataType As String) Dim prp As DAO.Property Set prp = tdf.CreateProperty(PropertyName, DataType, Value) tdf.Properties.Append prp End Sub ' Add properties to field '========================= Sub AddPropertyToField( FieldName As String, PropertyName As String, Value As Variant, DataType As String) Dim prp As DAO.Property Dim fld As DAO.Field Set fld = tdf.Fields( FieldName ) Set prp = fld.CreateProperty(PropertyName, DataType, Value) fld.Properties.Append prp End Sub ' Add fields to index '===================== Sub AddFieldToIndex( FieldName As String, Descending As Boolean ) Dim fld As DAO.Field Set fld = idx.CreateField( FieldName ) If Descending = True Then fld.Attributes = dbDescending idx.Fields.Append fld End Sub