Rapport de stage
De Justin PhamChez 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ésentationAlliance 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 »
7
1.2. Feuille « janvier »
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
AARemplissageListe(StaFeuille As String, StaListe As String, StaFeuilItem As String) : cherche les données pour remplir la Combo Box
11
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 à sauvegarderexiste 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
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.
15
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
Mai23: 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
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
17
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
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
18
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.
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
21
et donc avoir un poste « tranquille », soit être extrêmement compétent sur tout point de vue surtout le côté technique.
22