You are on page 1of 22

Rapport de stage

De Justin Pham
Chez Alliance Automation

23 mai – 10 juillet 2005


Sommaire

p.3 : Présentation de Alliance Automation


p.4 : Activité industrielle
p.5 : Activité informatique

Projet 1 : calendrier
p.6 : Présentation du sujet : VBA sur Excel
p.7 : Intérêt du sujet pour l’entreprise
p.8 : Travaux réalisés

Projet 2 : automatisation des réceptions des mails


p.13 : Présentation du sujet : VBA sur Outlook
p.14 : Intérêt du sujet pour l’entreprise
p.14 : Travaux réalisés

p.16 : Les activités diverses


p.17 : Planning du stage
p.20 : Planification des travaux restants à réaliser
p.21 : Intérêt du stage

2
Présentation
Alliance Automation

Cette société a été créée en 1992. A l’époque, elle se composa d’une petite
équipe d’informaticiens, spécialisés dans différents domaines. Mais à cause de la
crise informatique vers l’an 2000, les licenciements furent nécessaires. Aujourd’hui,
seul le chef de l’entreprise compose la société. Cela n’a pas que des inconvénients.
Depuis, M. Jean Hunter a installé ses bureaux dans son domicile. Ce qui est très
pratique au niveau du déplacement et de leurs coûts. Sans compter, l’agrément de
travailler chez soi. Inconvénient, il faut bien gérer le temps de travail.

ALLIANCE Automation est spécialisé en automatisme, électronique et


informatique industrielle utilisant des compétences provenant des universités et des
écoles d'ingénieurs d'Aquitaine. L'entreprise dispose de compétences particulières
dans le pilotage des machines d'essais et des machines électro-hydrauliques. Elle
intervient dans celui de l'informatique à base de P.C. sous environnement DOS™,
WINDOWS™ ou Unix™ / Linux™. Elle s’est spécialisée dans les développements
dans la gestion d'entreprise.

3
Activité industrielle

ALLIANCE Automation est au service des industriels des P.M.E., P.M.I.,


laboratoires et grandes sociétés pour les aider à optimiser et à moderniser leurs
investissements scientifiques et techniques.

Commande de machines d'essais électro-hydrauliques, Système REPONSE™.


Etude de circuits et de cartes électroniques pour des applications spécifiques
Réalisation et programmation de réseaux programmables (EPLD)
Etude, réalisation et maintenance d’automatisme avec programmation
automates (Télémécanique, April, Allen-Bradley, Mitsubishi, Siemens, Omron)
Etude et réalisation de logiciels scientifiques et techniques.
Réalisation de logiciels spécifiques,
Assistance à la mise au point de logiciel industriel

4
Activité informatique

ALLIANCE Automation est au service des entreprises pour les aider à administrer
et à pérenniser leurs investissements informatiques.
Etude et réalisation de réseau informatique multi plate-forme,
Interconnexion de sites pour utilisation de liaisons réseaux à distance
Administration de serveur et système Windows NT™,
Réalisation de logiciels spécifiques,
Fourniture et installation de PC à usage professionnel
Fourniture et installation de Médiathèque

Formation systèmes informatiques, langage de programmation, utilisation des plates-


formes Windows™ et Windows NT™, logiciels Bureautique ou de gestion
(organisme
n° 7233 0235133)

Pour des informations supplémentaires sur ALLIANCE Automation, vous


pouvez visiter le site http://www.allianceautomation.fr/.

5
Présentation du 1er sujet :
Calendrier
VBA sur Excel

FLASH Intérim est une société d’intérimaires. Elle se situe sur Bordeaux

centre. Elle constitue pour Alliance Automation un client très important (près de

10%). Le principal travail est la maintenance du système informatique qui repose sur

un système réseau TCP/IP Ethernet. Il y a deux plate-formes. Un système Unix

s’occupe des programmes de gestion des contrats des intérimaires et de la

comptabilité de l’entreprise. Les stations Windows peuvent accéder à ces

applications sous Unix par un émulateur (TunEmul). Et, un système Windows NT

2003 gère le serveur d’application comme : Courrier (Gestionnaire Electronique de

Document, GED), Ou trouver quoi (Gestionnaire Electronique de Classement, GEC),

etc… Calendrier y sera inclus comme Gestionnaire Electronique d’Activités (GEA).

Cet agenda de « tâches à effectuer » avec référencement sera lié avec les

fichiers GEC. La gérante de cette société, Annie Demay, a besoin d’un nouveau

système de calendrier sur Excel, l’ancien étant insuffisant. Ce calendrier doit pouvoir

gérer les différents événements (rdv, facture, etc.…) de manières simples. Les

évènements sont remplis par l’utilisateur dans la feuille « Criteres » et un code index

est calculé automatiquement. Dans les feuilles mensuelles (Calendrier), les

évènements peuvent être choisis grâce à une Combo box. C’est simple d’utilisation.

De plus, chaque événement pourra être détaillé dans une feuille Word en y

incorporant des données supplémentaires. On crée un lien OLE entre l’évènement et

la feuille Word pour ouvrir celle-ci automatiquement.

6
Intérêt du 1er sujet
Pour l’entreprise

Pour Alliance Automation, cette demande fait partie des projets courants. Le

devis représentera à peine plus d’une dizaine d’heures. Etant donné les bonnes

relations entre le directeur de FLASH intérim et mon responsable de stage, Jean

Hunter, le travail m’a été confié sans trop d’impératif de délai. Cela m’a permis

d’évaluer le temps que j’y passe par rapport au temps facturable et constitue une

approche du langage VBA, proche du VB.net aperçu à l’EXIA. ….

1.1. Feuille « Critères »

1.2. Feuille « janvier »

7
Travaux réalisés

Le programme Excel a été décomposé en deux classeur :

 Un classeur utilisateur

 Un classeur pour le code VBA (*1).

Avec cette structure, les données de l’utilisateur ne sont pas dans le même

fichier que le code, ainsi, il est aisé de changer le code sans pour autant touché aux

données.

Si une modification du code est nécessaire, il est plus facile de changer

seulement le classeur « code » pour tous les utilisateurs pour mettre à jour cette

apllication.

Par contre cela nécessite d’ouvrir automatiquement le classeur « code »

quand on ouvre celui

de l’application utilisateur. On obtient cette fonction avec :

Workbooks.Open Filename:=Ls_Path & "\CodeVBA.xls" , dans laquelle

Ls_Path est le chemin d’accès du classeur contenant le code VBA.

La toute première demande du client était de rajouter des boutons pour ouvrir

les sélections (combo Box) et la page Word (ou Excel). L’idée est de créer une barre

de menu, que nous avons décidé de positionner à droite de la feuille Excel, avec les

différents boutons créés par cette occasion. Ce module est appelé à l’ouverture

d’Excel :

8
Call Application.Run("CodeVBA.xls!Cree_Barre_Menu", Ls_NomBarre)

Les images utilisées pour les boutons sont dans une feuille « systeme » qui est

elle-même invisible à l’utilisateur. Cette méthode permet de protéger les icones

contre toutes fausses manœuvres de l’utilisateur.(voir 1.2. Feuille « janvier »). Si

l’utilisateur les détruit, ils se recréeront au redémarage de l’application.

Pour chaque bouton ainsi créé, on affecte une macro. Une pour ouvrir la

Combo Box : AAAppelListeCriteresNoms. Et l’autre pour ouvrir une feuille Word :

AAAppelFichierWord. Au final, on n’utilise vraiment que le bouton pour ouvrir Word.

Les principales fonctions utilisées dans les feuilles « Janvier »

à « Décembre » :

• AAListeItemClick
• AAAppelListeCriteresNoms
• AAWorksheetSelectionChange

AAListeItemClick permet de choisir un Item de la liste et d’attribué la valeur

sélectionnée à la cellule.

AAAppelListeCriteresNoms ouvre la boîte à liste. Cette fonction ne

s’exécute que si la cellule sélectionnée fait partie des bonnes colonnes, soit les

colonnes « nom » ou soit les colonnes « criteres ». Ainsi, selon la colonne, la liste est

différente. Cette liste est remplie par l’utilisateur dans les feuilles « noms » et

« criteres ».

AAWorksheetSelectionChange inscrit le code correspondant du libellé si le

libellé n’est pas vide.

9
La fonction suivante utilise est utilisée dans les feuilles « Criteres » et
« Nom » :

AAWorksheetCalculIndex, cette fonction trie la liste des données de

« noms » et « criteres » par ordre alphabétique. Ce tri a lieu seulement quand

l’indicateur est sur « faux » c'est-à-dire pas trié. Quand on rajoute un item dans la

liste, l’indicateur change en « faux » et le code index est calculé. Le tri n’a lieu que si

c’est nécessaire. Le tri de la liste est déclenché par la Combo box qui utilise cette

liste. Cette méthode permet de gagner du temps.

1.3. Modules de Calendrier

AADisque :

10
• AAFileExist(StaFichier) As Integer : fait un test pour vérifier si le fichier
passé en paramètre existe

• AAFileSplit(StaChemin, StaNomFic As TNomFichier) : coupe le chemin


fichier en morceau (extension, disque, chemin, nom). Ex : C:\temp\test.txt  C :;
C:\temp ; test ; txt

AAExcel :

• AAGetCells(StaEtat As String, StaPosLig, StaPosCol) : cherche la


valeur de la cellule sélectionnée

• AASetCells(StaEtat As String, StaPosLig As Integer, StaPosCol As


Integer, StaValeur) : insère la valeur voulue dans la cellule

• AAGetPath() As String : cherche le chemin d’accès

• AALastCell(StaEtat As String, StaColonne As String) As Integer :


cherche la dernière ligne de la liste

• AAPosCell(StaEtat As String, StaPosCell As String, StaPosLig As

Integer, StaPosCol As Integer) : cherche la position de la cellule

AALIste :

• AAAppelFichierWord() : ouvre une page Word avec l’enregistrement et


titre automatique

• AAAppelListeCriteresNoms() : voir plus haut

• AAAutoComboBox(StaFeuille As String, StaListe As String,


StaCellAddress) : créer la Combo Box avec les bonnes dimensions et à la bonne
place

• AACodeListe(StaItem As String) As Integer : insère le code de la liste

• AAItemListe(StaCode As String) As String : lit la valeur de l’item

• AAListeItemClick() : voir plus haut

• AAPositionListe(StaFeuille As String, StaListe As String,


StaCellAddress) : cherche les dimensions pour la Combo Box

11
• AARemplissageListe(StaFeuille As String, StaListe As String,
StaFeuilItem As String) : cherche les données pour remplir la Combo Box

• AATailleListe(StaEtat As String, StaListe As String, StaWidth,


StaHeight) : dimensionne la liste

• AAToggleListe(StaFeuille As String, StaListe As String, StaVisible As


Boolean) : supprime la Combo Box s’il y a erreur

• AATriListe(StaCol As String, StaLastCell As Integer, StaFeuilItem As


String) : trie les données

AAOutils :

• AAMax(Li_Nombre1 As Integer, Li_Nombre2 As Integer) As Integer :


recherche l’index de plus élevé

• AAStrLit(StaCommande As String, StaChar As String, StaFin As


Integer) As String : travaille sur une chaîne de caractères

Barre_Menu :

• Copie_Image_Icone(P_Feuille, P_Image) : recherche l’image de l’icône

• Cree_Barre_Menu(StaNomBarreMenu As String) : c’est la procédure


de création

Principal :

• AAWorksheetCalculIndex() : voir plus haut

• AAWorksheetSelectionChange() : voir plus haut

12
Présentation du sujet :
Automatisation de la réception des mails
VBA sur Outlook

L’initiative de ce projet provient du problème de Outlook qui emmagasine tous

les données (mail, tache, calendrier, contacts) dans un seul fichier .pst. Quand la

quantité de mail est très important (souvent le cas pour une société), ce fichier .pst

est si important que des ralentissements non négligeables ont lieu, ne serait ce que

pour chercher un mail. Le principe pour y remédier est de décomposer le fichier .pst

en plusieurs morceaux. Pour se faire, les mails seront sauvegardés à part sous la

forme de fichier .msg avec référant dans un système GED. Puis, ces mails sont

supprimés automatiquement de Outlook. Les mails ainsi classés seront facilement

utilisables dans « Courrier », GED de la société.

13
Intérêt du 2ième sujet
Pour l’entreprise

Ce travail a plusieurs but. D’une part, le programme facilitera la gestion des

mails via Outlook au sein de la société. Donc c’est un allègement de manipulations et

aussi alors un gain de temps. D’autre part, ce système de rapatriement des mails

sera utilisé dans le GED, option demandée par plusieurs clients. L’automatisation de

la réception des mails est parfaitement dans le cadre logiciel de cette société.

Travaux réalisés

Le principe est de récupérer chaque mail de la boîte de réception. Chaque

mail a un index attribué automatiquement par Outlook. On utilise cette index pour le

sélectionner. Puis, on sauvegarde le mail avec les critères voulus en .msg dans le

répertoire désiré. Et, on supprime le mail d’Outlook. Une boucle assure que tous les

mails sont traités. On peut les compter, ce qui facilite la boucle.

14
2.1. Modules pour Outlook

AADisque :

• AAChangeRepertoire(StaChemin As String) : change le répertoire du


fichier pour la sauvegarde

• AAFileExist(StaFichier) As Integer : test si le fichier à sauvegarder


existe déjà

• AAFileSplit(StaChemin, StaNomFic As TNomFichier) : coupe le fichier


en morceau (extension, disque, chemin)

• ExistRepertoire(StaChemin As String) As Integer : test si le répertoire


du fichier à sauvegarder existe déjà

AAOutil :
• AAReplaceString(ByVal sTarget As String, sSearch As String, sNew As
String) As String : change des éléments d’une chaîne de caractères

• EcritLOG(StaNomFichier As String, StaTexteLog As String,


StaAppend) : écrit dans un fichier .txt les informations désirés comme les loggings

AAOutlook : module principal

AATakeMail :

• GetMailInfo(StaMailInfo As MailInfo) As Boolean : récupère les


caractéristiques du mail et les place dans la structure StaMailInfo

• SaveAS(Ts_NomExpediteur As String, Ts_Sujet As String, Td_Date As


Date, Ts_NomDestinataire As String, Ls_Index As Integer) : sauvegarde le mail avec
ses éléments

• SupMail() : supprime le mail de Outlook

15
Archivage_Message, Divers et Gest_DirBox ne pas utilisé pour le projet. Ce
sont des modules de test. Le programme n’est pas encore finalisé, mais les outils
(briques) sont à évalués.

Les activités diverses


Alliance Automation s’occupe de la maintenance informatique de Flash

Intérim. J’ai eu l’occasion de participer à la remise à niveau de quelques postes de

travail. Les personnes travaillant dessus ne sont jamais des utilisateurs

expérimentés.

Des clients sont venus pour trouver une solution pour un accès à distance de

plusieurs utilisateurs sur une seule machine. La solution proposée à Alliance

Automation est l’utilisation d’un Virtual Private Network (VPN). L’explication donnée

au client a été très détaillé. Le principe du service ressemble à une connexion à

distance sur une machine.

La rénovation du four à pizzaria (four à bande) peut se décomposer en

plusieurs étapes. En premier, il faut démonter l’électronique et les micro-contrôleurs

(thermomètre, contrôle de vitesse, etc.). Puis, il suit la rénovation des composants.

Après, remonter le tout. Et enfin, les tests de bon fondtionnement. Cela m’a permis

de comprendre que les micro-contrôleurs étaient en fait des petites ordinateurs avec

un programme spécialisé.

16
Planning du stage

Mai
23: récupération du four chez Fast American Pizza pour rénovation + visite des

laboratoires et des ateliers de l'ENSAM/LAMEFIP à Talence

24: VBA Excel + démontage du système de chauffage, de roulement et de

l’électronique de régulation (contrôleur avec micro-programme)

25: VBA Excel + repas avec client + mise en place d’un serveur connexion à distance

avec client

26: VBA Excel + montage de centre électronique (rénovation four)

27: début du projet « Calendrier » pour Flash Intérim

30: VBA Excel : listfillrange + bouton dans le menu + récupération des données à

partir d’une autre feuille

31: mise en jour Internet Explorer (intervention et maintenance sur

PC) + problème de disque dur non reconnu par Windows mais seulement par le bios,

nettoyage virus, trojan.... utilisation de 3 anti virus différents

Juin
1: raccourci Excel + VBA Excel : sélection cellule

17
2: VBA Excel : tri liste + date (calendrier) + repas avec client (Flash Intérim)

3: macro complémentaire : comment ça marche ? Utilisable ?

6: VBA Excel : finition du module tri/nom

7: VBA Excel : classeur personnel

8: VBA Excel : ajout de fonction pour « Calendrier »

9: VBA Excel positionnement de la cellule

10: VBA Excel : lastcell

13: pas de stage

14: VBA Excel

15: VBA Excel + 2ème four à pizza pour Fast American Pizza

16: VBA Excel + four

17: VBA Excel + repas avec client (Flash Intérim) + Flash Intérim : maintenance

imprimante + explication du logiciel « Calendrier » pour Flash Intérim

20: Début du projet 2 : importation des message de gmail vers Outlook express

21: Excel finition + Outlook : brainstorming Outlook

22: VBA Outlook : caractéristique d'un mail, effacer

23: VBA Outlook : item, problème sur chaîne de caractères, folderpath, numérotation

de "olFolderInbox", comment Outlook gère l'index des courriers reçus

Solution avec "count" (négatif)

Notion: olFolderCalender, olFolderContacts

24: VBA Outlook : EcritLOG, EcritTXT, AAreplaceString: nommer namefile avec

nom/sujet/date

27: VBA Outlook : count, EntryID

28: étape suivante de Outlook: Synchro avec Courrier, débroussaillement

AASynchroCourrier32

18
29: mise à jour Outlook pour sauvegarde + suppression mail

30: algorithme Outlook + repas + Flash Intérim: problème d’imprimante,

maintenance de poste de travail

Juillet
1: VBA Excel: protection du code source avec mot de passe + ramener et

branchement machine à Flash Intérim (seul)

4: rapport de stage, Courrier, repas, chercher unité centrale chez Flash Intérim

5: rapport de stage, quelques bugs dans Calendrier + Word : RFP avec « Insert »

(*1) VBA , visual basic pour application (Sous ensemble de VB)

19
Planification des travaux
restants à réaliser

Jusqu’à mi juillet, je dois terminer le projet sur Outlook, c'est-à-dire le

finaliser. Il reste à mettre ce programme en relation avec « Courrier ». Puis, il faut

automatiser le tout sans ouvrir Outlook. Après cela, je travaillerai sur un logiciel

multilangue pour comprendre la technologie employée.

20
Intérêt du stage

L’objectif du stage n’est pas seulement d’apprendre des compétences


techniques mais aussi d’entrer dans l’ « ambiance » du monde du travail. Tout travail
en développement commence par un devis. Réussir à jauger de manière rentable et
acceptable la durée du travail nécessaire est la 1ère étape d’une réussite dans un
contrat. Cela impose après une lourde contrainte de temps sauf si on travaille sans
être rémunérer pour les heures supplémentaires. C’est une raison pour laquelle je
pense que le développeur ou le chef de projet n’a pas le temps de s’ennuyer pendant
ses contrats. J’ajouterai qu’un programme est rarement parfait. Il est fréquent de
devoir reprendre le code pour corriger les bugs trouvés par le clients. Et plus un
programme est propre et plus il est facil de le remanier..

Ce que j’appelle « propre » est la structure du code source. Je n’ai utilisé que
le VBA mais je pense que cela s’applique aussi pour d’autres langages. La
déclaration des variables est la base d’un programme. Décomposer son code en
plusieurs fonctions ou procédures est la clef d’un code simple et lisible. De plus, les
fonctions ainsi faites peuvent être réutilisé dans d’autres programme en changeant,
par exemple, les paramètres. C’est ce que l’on appelle ici « construire une maison
avec des briques ». Une règle à mémoriser en automatisation ou en programmation
serai : décomposer un problème compliqué en problèmes simples.

La formation que je suis, est celle d’un analyste/programmeur. Je sais un peu


plus pourquoi maintenant. L’analyse constitue le métier en soi alors que la
programmation est le savoir du langage informatique. Lors de la conception d’un
programme, il faut tenir compte de la demande du client mais surtout de toutes les
possibilités d’erreurs de sa part. Ce qui est difficile n’est pas forcément le fait de
programmer mais ce sont toutes les fausses manœuvres que peuvent faire les
clients qui sont longues à gérer. Un des points noirs du stage fut de changer mon
optique sur l’utilisateur qui est un utilisateur « lambda ». Toutes les imperfections du
programmes seont trouvées un moment ou un autre par l’utilisateur. Il ne faut jamais
compter sur lui qui n’est pas aguerri dans la majeur partie des cas. Pour l’utilisateur,
le logiciel n’est rien de plus qu’un outil de travail comme un stylo et une feuille.

21
Lors de mon stage, j’ai assisté à plusieurs repas avec soit des clients soit des
amis de mon maître de stage. Ce fut extrêmement instructif du point de vue de la
carrière que j’envisageai. Cette tache est donnée, de plus en plus, aux autres pays
comme l’Inde. Il faut rajouter que les éditeurs de code et l’aide fournie avec sont de
plus en plus accessible au grand public. Ça tue les programmeurs pas les analystes.
En bref, pour pouvoir réussir dans ce domaine, il faut soit avoir beaucoup de chance
et donc avoir un poste « tranquille », soit être extrêmement compétent sur tout point
de vue surtout le côté technique.

22

You might also like