Vous êtes sur la page 1sur 40

2

Je tiens à remercier vivement les responsables d’Office National


des Chemins de Fer en la personne de Mr. BELKBIR le Directeur de
l’établissement maintenance de voitures et wagons au site de casa
voyageurs a Casablanca ,notamment la Responsable de ressources
Humaines Mme NOUR,d'avoir bien voulu m'accorder ce stage au sein
de leur honorable établissement ;

Je remercie aussi tous les membres des services de


L’établissement maintenance de voitures et wagons de Casa-
voyageurs de l’office pour l’accueil, la sympathie et l’aide qu’ils
m’ont offerts pendant ce stage. Particulièrement, Mr. ERRANI, pour
ses efforts et pour son aide précieuse pendant la réalisation de ce
projet.

Je vaudrais également remercier Mr. HAROUSSI pour ses idées


et ses astuces pendent la réalisation des dessins industriels sur le
SolidWorks 2008.

J’adresse aussi l’expression de mon respect pour, Mr. ALAYOUBI,


Mr. TARRAQ, Mr. HIMDI pour leur sympathie qui m’était une source
d’encouragement.

J’espère que ce projet atteindra ses objectifs et je souhaite


vivement satisfaire les ambitions du service d’établissement
maintenance de voitures et wagons de Casa voyageurs par un travail
accompli.

3
Introduction générale .................................................................................4

Chapitre 1 : Présentation de l’office National de Chemins de Fer...…..6

Chapitre 2 : Analyse & conception..........................................................15


2.1) Définition du sujet................................................................................16
2.2) Approche technique…………………………………………………..18
2.3) Conception de la base de données……………………...…………….19
2.2.1) Règles de la gestion………………………………………………...19
2.2.2) Dictionnaire de données……………………………………………20
2.2.3) Schéma entité relationnelle ……………………………………………..20

Chapitre 3 : Réalisation……………………………………………….…22
3.1) Outils de développement……………………………………………..21
3.1.1) SGBD……………………………………………………………....20
3.1.2) Langage de programmation………………………………………...23
3.2) Logique d’enchaînement………………………………………….….24
3.3) Ecrans de l’application ………………………………………………25
3.4) Réalisation des Dessin industriels sur SolidWorks …………………. 31

Conclusion

Annexe……………………………………………………………………33

4
Dans le but de développer mon esprit de modélisation et de conception et
en vue d’approfondir mes connaissances informatiques, et grâce à la coopération
qui réunie L’EMSI avec les établissements et les entreprises marocaines, j’ai été
amené à réaliser ce stage de fin de la quatrième année au sein de L’ONCF dans
l’établissement de préparation de train de ligne.

L’objectif de mon stage est constitué de deux projets à réaliser :


D’abord réaliser les dessins industriels d’un essieu et d’un joint de vitre sur le
SolidWorks 2008
En suite la conception et développement d’une application qui facilitera la
gestion des situations des voitures et fourgons de l’office en utilisant comme
langage de programmation le Visual Basic et comme système de gestion de
bases de données l’Access.

Ce rapport comporte trois chapitres. Le premier est consacré à la Présentation de


l’ONCF plus particulièrement L’EMVW et ses activités. Le deuxième entame
les parties théoriques des deux projets. Enfin le troisième chapitre sera consacré
à la réalisation et la programmation du deuxième projet.

5
PRESENTATION DE L’ONCF ET DE L’EMVW

6
Présentation de l’Office National des Chemins de Fer

1. Historique :

Historiquement, la construction du réseau des chemins de fer du Maroc


remonte au début du 20éme siècle. En effet, les premières lignes construites à
voies de 0.6m ont été établies à partir de 1916, et ce n’est qu’on 1923 que la
construction des voies à écartement normale a été confiée à trois compagnies
concessionnaires privées, ces derniers partagèrent le trafic ferroviaire en
exploitant chacune la partie du réseau qui lui était concédée.
En 1963, le Maroc a décidé le rachat des concessions et la création de
l’Office National des Chemins de Fer qui est un établissement public à caractère
industriel et commercial doté de la personnalité civile et de l’autonomie
financière. Placé sous la tutelle du ministère du transport et de la marine
marchande.
Sur la scène internationale, le Maroc est membre de l’Organisation
Internationale du Trafic Ferroviaire qu’il s’agisse de marchandises ou de
voyageurs. De même, l’ONCF est membre actif de l’Union International des
Chemins de Fer, de l’Union Arabe des Chemins de Fer et du Comité du
Transport Ferroviaire Maghrébin.
L’ONCF emploi actuellement environ 10000 agents, gère et exploite un
réseau de 1907 Km de ligne dont 1537 Km à voie unique (80%) et 370 Km à
double voie. Ce réseau comporte également 528 Km de voies de service et 201
Km de lignes d’embranchement particulier reliant diverses entreprises au réseau
ferré national. A noter que 53% de la longueur du réseau est électrifiée à 3000
voltes continues, alors que 904 Km sont exploités en traction diesel.
Depuis sa création, l’ONCF joue un rôle majeure dans le transport des
voyageurs, marchandises et phosphates vu le savoir faire et l’expérience qu’il a

7
dans le domaine et ce grâce à la capacité professionnelle requise. Cela signifie
que :
 L’ONCF possède des connaissances et de l’expérience qui lui permet
d’exercer le contrôle opérationnel et une surveillance sûre et efficace.
 Le personnel de l’ONCF chargé de la sécurité possède une qualification
adaptée à son domaine d’activité.
 Le personnel, le matériel roulant et l’organisation sont de nature à
permettre d’assurer un niveau de sécurité équivalent à celui des services
analogues en Europe.

8
2. Organigrammes des pôles de l’ONCF :

ORGANIGRAMME GENERAL DU POLE MAINTENANCE MATERIEL :

9
1. Services des AGEC
* Service technique
Groupe d’étude : a pour rôle :
Elaborer et suivre l’application des consignes rapportées par le conseil
d’étude ainsi que les règles d’entretien et de révision adopté par le service
technique. Elaboration des rapports trimestriels et annuels.
Service technique étude (STE) : a pour tâche :
Assurer les études techniques et les améliorations à apporter sur le
matériel. Elaborer des projets d’acquisition et de matériel de consommation.
Service technique approvisionnements : Il se charge de lancer les demandes
de matière auprès du magasin régional qui est en relation avec le magasin
général pour assurer le stock des pièces et matières nécessaires à l’entretien.

* Service gestion
La fonction gestion est d’une grande importance dans chaque entreprise
car elle permet de gérer et réguler le mouvement des produits tout le long du
cycle de fabrication, depuis la commande de la matière première jusqu'à la
livraison des produits finis.

* Service de production
Il a sous sa responsabilité le service programmation lancement et les quatre
ateliers d’entretiens.
Service programmation lancement : Son rôle consiste à :
Elaborer le programme des opérations de maintenance périodiques.
Lancement des bons de travail pour les ateliers.
Suivi du matériel à l’entrée et a la sortie.
Organiser les manœuvres au sein de l’établissement.
Expédition des pièces et organes envoyés par autres établissements

10
2. PRESENTATION DE L’E.M.V.W
L’établissement maintenance de voitures et wagon de Casablanca a été
crée le 01-07-2009 après la réorganisation des établissements de la ONCF.
Son site est situé au boulevard BAHMAD entre l’EX. Usine de carneau et
la gare de Casa Voyageurs

ORGANISATION

L’établissement est organisé comme suit :


Établissement mère se trouve à CASA BLANCA et gère les centres
suivants:
 Centre Maintenance de voitures et fourgon de Marrakech.
 Centre Maintenance de voitures et fourgon de Fès.
ORGANIGRAME DE L’ETABLISSEMENT MAINTENANCE V W CASABLANCA

11
MISSION DE L’EMVW CASA

L’Établissement maintenance voitures et wagon Casa a pour missions :


• Maintenance du parc:
⇒ Élaborer et mettre en œuvre le plan de maintenance en tenant compte
de la politique de maintenance définie au niveau du Département Matériel et
Exploitation Voyageurs.
⇒ Définir les besoins en pièces de rechange et gérer le stock.
• Gestion des ressources Humaines :
⇒ Assurer la gestion prévisionnelle des ressources humaines
⇒ Rationaliser l’affectation des ressources
⇒ Administrer les Ressources Humaines
⇒ Participer à l’élaboration du plan de formation

• Comptabilité et Gestion :
⇒ Élaborer le budget d’exploitation et suivre son exécution
⇒ Établir la comptabilité de l’établissement
⇒ Établir et analyser le tableau de bord de l’établissement
⇒ Assurer les achats locaux

Politique de la maintenance
Définition:

La maintenance est l’ensemble des actions qui permettent d’assurer un


entretien préventif pour maintenir sa fiabilité.
La maintenance se présente en deux niveaux:
• 1er niveau : VA.
• 2ème niveau : VL, VG, VF, ATS.
• 3ème niveau : GVG, RL, RG, GRG

12
Maintenance

Préventive Corrective

Systématique Conditionnelle

OBJECTIFS DE L’ENTRETIEN PREVENTIF

L’entretien préventif du matériel est réalisé pour atteindre


en service les objectifs fondamentaux :
 de sécurité
 de fiabilité
 de qualité
 d’économie
Parc du matériel remorqué à voyageurs

Le parc du matériel remorqué à voyageurs est composé à ce jour de 322


Véhicules :
222 voitures climatisées: 162 Voitures 2ème classe
33 Voitures 1ére classe
16 Voitures buvettes 2ème classe
06 Voitures couchettes
05 Voitures Lits

Voitures ordinaires SNCF:

34 fourgons générateurs : 12 FG 3ème série


16 FG 4ème série
06 FG 5ème série

13
14
15
2.1 Définition du sujet

Travail demandé

L'EMVW souhaite se doter des moyens informatiques pour gérer ses


différentes activités. Dans le cadre du stage d’été, on m’a confié dans un premier
temps la réalisation des dessins industrielle d’un essieu puis d’un joint de vitre
sur le logiciel SolidWorks 2008 , puis dans un deuxième temps la mission de la
mise au point d’une application informatique qui permettra la gestion moderne
et efficace des situations de voitures et fourgons de l’office, est donc les
procédures d’enregistrements des nouvelles situations effectuée aux services de
l’EMVW, les mises à jours sur les situation suite aux éventuels changements et
la gestion des trafics ,ainsi qu’effectuer des recherches pour des situations par le
billet de leurs dates et finalement exporter tout situation vers un classeur Excel.

1. Besoin

Le responsable des situations des voitures et fourgons du bureau


technique a proposé de crée un outil informatique pour facilité les tâches qu’il
effectue régulièrement sur son ordinateur. Ces tâches consistent en la saisie des
données, les modifier, la génération d’un rapport sur un document Microsoft
Excel. Le travail avec les documents Microsoft Excel ne permet pas d’effectuer
plusieurs tâches facilement et rapidement, tel que :
Le stockage des données
La recherche rapide des informations
Génération rapide de rapports
En effet l’idée consiste à la création d’une application liée à une base de données.
Cette application va automatiser toutes les tâches effectuées par l’agent
responsables.

16
17
2.2 Approche technique

A partir de l’analyse précédente, on constate qu’on est face à un problème


l’implémentation d’un logiciel de gestion, ce qui nécessite avant tout
l’implémentation d’une base de données pour pouvoir stocker toutes les
informations relatives aux éléments à gérer, et pour pouvoir représenter ces
informations sous une forme simple à manipuler, à rechercher et à mettre à jour
facilement.
Pour développer cette application j’ai décidé de procéder suivant les
processus schématisés dans la figure ci-dessous :

18
Identification des besoins : ce processus est déterministe dans l’ensemble
du projet, il représente la phase initiale qui détermine le niveau de succès ou
d’échec de l’application, donc il exige une grande précision et il doit être traité
d’une façon très attentive.
Elaboration de l’application : ce processus consiste principalement dans le
développement d’un modèle logique des données, puis à la détermination des
outils de développement de l’application.
Création de l’interface : le but de ce processus est de fournir une interface
cohérente de l’application.
2.3 Conception de la base de données
2.3.1 Règles de la gestion
Chaque situation comme vue précédemment se compose de quartes tables,
la première pour la composition de chaque train de ligne en matière de FG et
voitures d’où l’identifiant qui doit être le code du train a composé, deuxièmes
d’une table nommée Disponibles formée de trois champs : climatisées, FG et PV,
troisièmement d’une table dite Reformes dont les champs sont :N° Véhicule,
lieu, date, prévision de sortie et motif ;la dernière table de la base de donnée est
bien la table Répartition qui aura comme attributs : Expédiés , a-expédier, et
Reçues ,

19
2.3.2 Dictionnaire de données

Le tableau suivant récapitule l’ensemble des données qui seront


manipulées dans cette application, et contient leurs définitions et désignations

Champs Désignation Type Observation


TRAIN Train Texte alphanumérique
JOURNNEE journées Date/Heure
FG fourgon Numérique
COMPOSITION composition Texte
FG fourgon Numérique
CLIMATISEES climatisées Texte
PV pv Texte
NUMVH numéro de voiture Numérique
DATE date Date/Heure
LIEU lieu Texte
MOTIF motif Texte
PDS Prévision de sortie Date/Heure
RECUES reçues Texte
AEXPEDIER A expédier Texte
EXPEDIEES expédiées Texte

2.3.3 Schéma entité relation


La relation entre les entités définies dans le dictionnaire ci-dessus, en plus
des règles ont permis de construire le MCD (Modèle Conceptuel des Données).
En effet, le MCD représente la structure logique globale de la base de données,
indépendamment du logiciel ou de la structure de stockage des données. Il

20
contient toujours des données qui ne sont pas encore mises en œuvre dans la
base de données physique et il constitue une représentation formelle des données

nécessaires au fonctionnement de l’application.de la gestion,


Ce modèle permettra de générer le modèle physique de données, et donc
de créer la base de données sur le SGBD convenable.
Le modèle physique généré respectant les contraintes de dépendance de
données (Dépendance fonctionnelle) est le suivant:

21
22
3.1 Outils de développement

3.1.1 Système de gestion de base de données :

Pour créer la base de données j’ai utilisé le système de gestion de bases de


données Microsoft Access qui est un SGBD relationnel sous Windows. Il est
caractérisé par sa capacité de pouvoir combiner l’interface graphique avec les
fonctionnalités d’un SGBDR. Il permet toutefois d’afficher des informations sur
les dépendances entre les objets d'une base de données et de vérifier
automatiquement les erreurs courantes dans les formulaires et les états.

3.1.2 Langage de programmation :

Cette application a été développée l’aide du langage Visual Basic c’est un


langage très performant, doté d’une interface graphique simple à utiliser et à
programmer. Visual Basic représente aujourd’hui un outil de développement
extrêmement puissant, tout en étant d’une grande simplicité d’utilisation, il n’a
plus à régresser devant des langages bien structurés comme Visual C ou Visual
C++. Il permet même d’effectuer des opérations facilement et rapidement que
ces derniers. C’est en fait le seul vrai langage de programmation que les
amateurs de la programmation peuvent apprendre rapidement.

Visual Basic offre une excellente plate forme de développement rapide


des applications. Il permet également de créer très vite des solutions adaptées
aux besoins en matière de gestion.

23
3.2 Logique d’enchaînement :

L’application démarre avec un premier écran de Menu. A partir de ce


dernier, on peut basculer vers les écrans des mises à jour sur les tables,
Composition, Reformées, Répartition et, ou faire des éditions (liste de la
situation sous forma de Microsoft Excel) a partir de menu on peu évidement
faire une recherche d’une situation donnée selon la date de sa création . La
fermeture d’un écran passe la main à l’écran Menu. La fermeture de l’écran
Menu met fin à l’application.

Le schéma suivant explique l’ordre entre les différents écrans de l’application :

24
3.3 Ecrans de l’application :

Le Menu :

Cette forme est le point de départ de l’application, elle permet grâce au


menu d’accéder aux autres fenêtres de l’application mais également l’impression
des états relatifs aux données de l’application.

Ecran sur la table Composition :

Cette fenêtre permet la consultation de la base pour s’informer sur les


données de la composition d’un train ou de la modifier en la sélectionnant

25
depuis la List en tète de l’écran, d’ajouter des nouvelles situations dans la base
et enfin de les supprimer si c’est nécessaire.
Sur la même écran je propose a l’utilisateur le choix de la date a partir
d’un calendrier qui s’affiche une fois il click sur le bouton de choix, la même
méthode est aussi appliquée pour les choix du train et du fourgons.

26
L’écran de la table Disponibles :

27
A partir de cette fenêtre, on peut consulter les voitures et fourgon
disponibles d’ajouter un enregistrement à la table Disponibles, de le modifier ou
de le supprimer de la table des Disponibles.

L’écran de la table Reformés:

A partir de cette fenêtre, on peut consulter les voitures reformés, d’ajouter


un enregistrement à la table Reformés, de le modifier ou de le supprimer de la
table des Reformés.

L’écran de la table Répartition:

A partir de cette fenêtre, on peut consulter les voitures et selon leurs


répartition, d’ajouter un enregistrement à la table Répartition, de le modifier ou
de le supprimer de la table Répartition si nécessaire.

28
L’écran de la table Recherche:

A partir de cette fenêtre, on peut consulter a la fois la situation de la


voiture et FG a partir de la date de création de cette situation, et dans un temps
future l’importation de cette situation vers un fichier Excel afin de pouvoir
l’imprimer.
L’écran a propos de l’application (?) :

29
3.4) Réalisation des Dessins industriels sur SolidWorks

Essieu

30
Joint de vitre

31
Au terme de ce stage, j’ai pu réaliser une application permettant la gestion
moderne des Situations de voiture et fourgons effectuée au sein du site de
l’EPTLC de l’ONCF situé a la gare de casa voyageurs, j’ai aussi pratiqué mes
connaissances informatique et mécaniques au niveau du dessin industriel sous
SolidWorks 2008.
Certes, cette application n’est pas complète à cent pour cent. Toutefois ce
stage de la fin de ma quatrième année en cycle ingénieur de l’EMSI que j’ai
entrepris au sein de EPTLC, qui deviendra dés aout 2009 EMVW comme
abréviation de l’Etablissement de Maintenance de Voitures et Wagons, ma
permis :
La découverte de l’environnement professionnel dans une direction de
haut niveau.
La participation active dans la réalisation et l’exécution des plusieurs
taches reliées a l’informatique que sa soit hardware ou software.
L’aide dans la motivation et l’encadrement de quelques stagiaires.
Le perfectionnement de mes connaissances en matière d'usage combiné
d'un gestionnaire de bases de données comme Microsoft Access, et le
Visual Basic 6.0 en tant qu'interface conviviale à manipuler.
L’approfondissement et mise en cause de mes compétences mécanique
plus particulièrement en matière de dessin industriel sur calque et sur
SolidWorks 2008.
L’apprentissage de quelques techniques de maintenance corrective et
préventive dans le domaine électronique avec Mr. Hrakate

32
Finalement, on doit s’interroger sur la fiabilité à moyen et à long terme, et
aux éventuelles mises à jours sur l’application par l’usage d’autres
technologies, SGBD et plates formes plus performantes qu’aux précédentes.

33
Voici dans ce qui suit une partie du programme utilisé pour une mise à
jour sur les tables Composition et Reformés, ainsi que le Menu.

Option Explicit
Dim dbAdo As New Connection
Dim cmAdo As New Command
Dim rsAdo As New Recordset

Private Sub Command1_Click()


Form2.Show
Unload Dialog
End Sub

Private Sub Command2_Click()


Form1.Show
Unload Dialog
End Sub

Private Sub Command3_Click()


End
End Sub

Private Sub Command4_Click()


Form3.Show
Unload Dialog
End Sub

Private Sub Command5_Click()


Form4.Show
Unload Dialog
End Sub

Private Sub Command6_Click()


frmAbout.Show
Unload Dialog

34
End Sub

Private Sub Command7_Click()


Form5.Show
Unload Dialog
End Sub
*************************************************************
Option Explicit

Dim dbAdo As New Connection


Dim cmAdo As New Command
Dim rsPrm As New Parameter
Dim rsAdo As New Recordset
Dim chgt As Boolean
Private Sub cboNom1_Click()
' Si l'ajout d'une personne, efface les zones de texte
If cboNom1.ListIndex = 0 Then
Dim ctr As Control
For Each ctr In Me.Controls
If TypeOf ctr Is TextBox Then ctr.Text = ""
Next
Exit Sub
End If
' Si la table est vide, sort de la sub
If rsAdo.EOF And rsAdo.BOF Then Exit Sub
' Recherche le nom selectionné
' Recharge le recordset
rsAdo.Requery
' recherche
rsAdo.Find ("FG = " & cboNom1.ItemData(cboNom1.ListIndex))
' Controle que l'enregistrement existe toujours
If rsAdo.EOF Xor rsAdo.BOF Then
MsgBox "l'enregistrement selectionné n'existe plus dans la base"
chargeListe
Exit Sub
End If
Combo1 = rsAdo!FG
Text1 = rsAdo!CLIMATISEES
Text3 = rsAdo!PV
chgt = False
End Sub

Private Sub cboNom1_GotFocus()

35
subChange "Changement de FG"
End Sub

Private Sub cboNom1_Validate(Cancel As Boolean)


If chgt Then Stop
End Sub

Private Sub cmdEnregistrer_Click()


If cboNom1.ListIndex = 0 Then
rsAdo.AddNew
rsAdo!FG = IIf(Combo1 = "", "?", Combo1)
rsAdo!CLIMATISEES = IIf(Text1.Text = "", "?", Text1.Text)
rsAdo!PV = IIf(Text3.Text = "", "?", Text3.Text)
rsAdo.Update
End Sub

Private Sub cmdSupprimer_Click()


' Recherche si l'enregistrement est toujours valide
' Cas d'une base multi-utilisateur
rsAdo.Requery
rsAdo.Find ("FG= " & cboNom1.ItemData(cboNom1.ListIndex))
If rsAdo.EOF = rsAdo.BOF Then
rsAdo.Delete
Else
MsgBox "Enregistrement déja supprimé"
End If
chargeListe
End Sub

private Sub Command1_Click()


Dialog.Show
Unload Form1
dbAdo.Close
End Sub

Private Sub Form_Load()


Combo1.AddItem "994"
Combo1.AddItem "981"
Combo1.AddItem "983"
Combo1.AddItem "986"
Combo1.AddItem "956"
' Ouverture connexion
With dbAdo

36
.Provider = "Microsoft.Jet.OLEDB.4.0" ' Fournisseur d'accès
.Mode = adModeReadWrite ' Mode lecture écriture
.CursorLocation = adUseClient ' Type de curseur (
.Open App.Path & "\testado.mdb"
End With
' Création recordset
With rsAdo
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.ActiveConnection = dbAdo
.Open "DISPONIBLES"
End With
chargeListe
End Sub

Public Sub chargeListe()


' Remplissage de la liste
rsAdo.Requery ' recharge le recordset
cboNom1.Clear ' Efface la combo
cboNom1.AddItem "... Ajouter un Enregistrement", 0
Do Until rsAdo.EOF ' Parcour du recordset pour charger la combo
cboNom1.AddItem rsAdo!FG & " , " & rsAdo!CLIMATISEES & " , " &
rsAdo!PV
cboNom1.ItemData(cboNom1.NewIndex) = rsAdo!FG ' Intègre la clé
primaire
rsAdo.MoveNext
Loop
cboNom1.ListIndex = 0 ' Positionne la combo sur le 1er item
chgt = False
End Sub

Private Sub Form_Unload(Cancel As Integer)


subChange "Fermeture"
End Sub

Private Sub Combo1_KeyPress(KeyAscii As Integer)


chgt = True
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)


chgt = True
End Sub

37
Private Sub Text3_KeyPress(KeyAscii As Integer)
chgt = True
End Sub

Public Sub subChange(Optional origine As String)


If chgt Then
If MsgBox("Données changées." & vbCrLf & "Enregistrer ?", vbYesNo,
origine) = vbNo Then Exit Sub
cmdEnregistrer_Click
End If
End Sub
********************************************************
Option Explicit

Dim dbAdo As New Connection


Dim cmAdo As New Command
Dim rsPrm As New Parameter
Dim rsAdo As New Recordset

Dim chgt As Boolean


Private Sub cboNom2_Click()
' Si l'ajout d'une personne, efface les zones de texte
If cboNom2.ListIndex = 0 Then
Dim ctr As Control
For Each ctr In Me.Controls
If TypeOf ctr Is TextBox Then ctr.Text = ""
Next
Exit Sub
End If
' Si la table est vide, sort de la sub
If rsAdo.EOF And rsAdo.BOF Then Exit Sub
' Recherche le nom selectionné
' Recharge le recordset
rsAdo.Requery
' recherche
rsAdo.Find ("NUMVH = " & cboNom2.ItemData(cboNom2.ListIndex))
' Controle que l'enregistrement existe toujours
If rsAdo.EOF Xor rsAdo.BOF Then
MsgBox "l'enregistrement selectionné n'existe plus dans la base"
chargeListe
Exit Sub
End If
Text1 = rsAdo!NUMVH

38
DateP = rsAdo!Date
Text3 = rsAdo!LIEU
Text4 = rsAdo!MOTIF
DateP1 = rsAdo!PDS
chgt = False
End Sub

Private Sub cboNom2_GotFocus()


subChange "Changement de nom"
End Sub

Private Sub cboNom2_Validate(Cancel As Boolean)


If chgt Then Stop
End Sub

Private Sub cmdEnregistrer_Click()


If cboNom2.ListIndex = 0 Then
rsAdo.MoveFirst
rsAdo.Find ("NUMVH = " & cboNom2.ItemData(cboNom2.ListIndex))
If rsAdo.EOF <> rsAdo.BOF Then Exit Sub
rsAdo("NUMVH") = IIf(Text1.Text = "", "?", Text1.Text)
rsAdo("DATE") = IIf(DateP = "", "?", DateP)
rsAdo("LIEU") = IIf(Text3.Text = "", "?", Text3.Text)
rsAdo("MOTIF") = IIf(Text4.Text = "", "?", Text4.Text)
rsAdo("PDS") = IIf(DateP1 = "", "?", DateP1)
rsAdo.Update
End If
chargeListe
End Sub

Private Sub cmdSupprimer_Click()


' Recherche si l'enregistrement est toujours valide
' Cas d'une base multi-utilisateur
rsAdo.Requery
rsAdo.Find ("NUMVH= " & cboNom2.ItemData(cboNom2.ListIndex))
If rsAdo.EOF = rsAdo.BOF Then
rsAdo.Delete
Else
MsgBox "Enregistrement déja supprimé"
End If
chargeListe
End Sub

39
Private Sub Command1_Click()
Dialog.Show
Unload Form3
dbAdo.Close
End Sub

Private Sub Form_Load()


' Création recordset
With rsAdo
.CursorType = adOpenKeyset
.LockType = adLockOptimistic
.ActiveConnection = dbAdo
.Open "REFORMES"
End With
chargeListe
End Sub

Public Sub chargeListe()


' Remplissage de la liste
rsAdo.Requery ' recharge le recordset
cboNom2.Clear ' Efface la combo
cboNom2.AddItem "... Ajouter un Enregistrement", 0
Do Until rsAdo.EOF ' Parcour du recordset pour charger la combo
cboNom2.AddItem rsAdo!NUMVH & " , " & rsAdo!Date & " , " &
rsAdo!LIEU & " , " & rsAdo!MOTIF & " , " & rsAdo!PDS
cboNom2.ItemData(cboNom2.NewIndex) = rsAdo!NUMVH ' Intègre la clé
primaire
rsAdo.MoveNext
Loop
cboNom2.ListIndex = 0 ' Positionne la combo sur le 1er item
chgt = False
End Sub

Private Sub Form_Unload(Cancel As Integer)


subChange "Fermeture"
End Sub

Private Sub DateP_KeyPress(KeyAscii As Integer)


chgt = True
End Sub

40
Private Sub Text1_KeyPress(KeyAscii As Integer)
chgt = True
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)


chgt = True
End Sub
Private Sub DateP1_KeyPress(KeyAscii As Integer)
chgt = True
End Sub

Private Sub Text3_Change()

End Sub

Private Sub Text4_KeyPress(KeyAscii As Integer)


chgt = True
End Sub

Public Sub subChange(Optional origine As String)


If chgt Then
If MsgBox("Données changées." & vbCrLf & "Enregistrer ?", vbYesNo,
origine) = vbNo Then Exit Sub
cmdEnregistrer_Click
End If
End Sub

Icône utilisée pour le logiciel : j’ai réalisé cette icône a l’aide du logiciel
XARA3DX6

41