Créer une boite de dialogue pour communiquer entre deux services

Bonjour je suis nouveau sur le forum. Je suis en stage dans une compagnie aérienne et ils ont des problèmes de communication entre deux services. J'ai donc pour mission d'y remédier avec un fichier excel "interactif", "intuitif" simple rapide etc..

Ayant découvert l'existence des macros il y a deux semaines, j'ai vraiment du mal avec tout ces codes.

J'ai donc un fichier excel (en pièce jointe) simple, ou je rentre des dates.

J'aimerais ajouter a ce tableau en boite de dialogue , de façon a ce que les deux services ayant de problèmes de communication, puisse communiquer.

Cette boite de dialogue demanderait au premier service de remplir les dates (sans DTpicker) , le nom d'une mission et dans la colonne fiche correspondante, qu'il ai un bouton qui ouvre l'explorateur de fichier dans un certain répertoire, lui permette de choisir un fichier et ensuite de le joindre sous forme de lien hypertexte dans la colonne correspondante. Le fichier en question est un espèce de formulaire composé de deux partie, une pour chaque service. Ainsi le deuxieme service recevrai les dates de mission et le formulaire attribué a la mission pour pouvoir remplir sa partie. Il faudrait donc que dans les dernières colonnes, il y ai une case a cocher lorsque le service est fini de remplir sa partie. De plus il faudrait que le formulaire dans l'hypertexte se mette a jour, je veux dire qu'une fois qu'il a été modifié par un service, l'autre service puisse voir la version modifiée.

C'est assez compliqué, je passe mes journées a essayer seul de comprendre langage VBA, chercher partout sur internet, met très peu explique les lignes alors je n'arrive jamais a adapter a mon cas, alors le moindre petit conseil est a prendre, notamment si possible expliquer chaque ligne de code.

J'espère avoir été clair dans mon explication, si vous avez besoin de plus de détail dites moi

Je ne demande pas de me faire le travail, mais j'ai tellement de mal que ça y reviens presque.

Merci de votre aide

16projet.xlsm (25.58 Ko)

Bonjour,

Ce que tu tentes de faire n'est pas très compliqué. Cependant, il nous faut quelques infos supplémentaires.

Où se trouve ce fichier projet et ce formulaire ? Est ce sur un réseau accessible par les 2 services en simultanée avec des fichiers partagés ? Ou bien est-ce que des fichiers en local pour chaque service ? Les deux fichiers sont-ils dans le même dossier ou pas ?

En attente de te lire,

A plus !

Bonjour

Merci pour votre réponse, comme c'est moi qui doit créer ce "système", qu'il n'existe pas encore. Je vous laisse choisir la solution la plus simple, et déterminer ou doivent être ces fichiers pour fonctionner. Les deux services sont dans la même boite mais des bureaux différent, j'imagine donc qu'ils ont un réseau avec des fichiers partagés .

j'ai également avancé le fichier projet, c'est à dire que j'ai réussi à ébaucher un userform pour ajouter une mission, il permet également de compter le nombre de jours restant avant son début. De plus j'ai réussi a faire en sorte que la liste des missions se trie en fonction du temps restant (=urgence) Il est loin d'être fini mais je commence a comprendre le fonctionnement

19projet-v2.xlsm (28.98 Ko)

Re,

Alors voici ma proposition.

Il faut d'abord mettre le fichier "projet" dans un dossier sur le réseau, accessible aux 2 services. Dans ce dossier, créer un sous-dossier "Fiches" (c'est précis, donc si tu veux un autre noms, il faut modifier dans la macro). Dans ce sous dossier "Fiches", tu y places le fichier "formulaire VIERGE partagé OPS & M.xlsm" (Ce nom précis aussi, à adapter si tu veux changer).

Dans le fichier projet, tu peux créer ta mission, puis tu crées la fiche, tu sélectionnes la mission à traiter, cela va créer une copie du formulaire vierge et renommer cette copie en "Formulaire_NomdelaMission_DatedelaDemande" (modifiable si besoin). Et créer une lien hypertexte dans la cellule de la ligne de la mission sélectionnée. Attention, les noms de missions doivent être unique dans ce processus, à voir si cela est possible de ton coté.

Je te laisse tester !

30projet-v2.xlsm (32.02 Ko)

A plus !

Merci beaucoup, cela fonctionne parfaitement , du moins la création de la fiche adaptée, et ajout du lien hypertexte.

Je n'ai pas encore testé la communication mais je vous fais confiance.

J'ai quelques bricoles a proposer pour améliorer : est-il possible lorsque l'on a choisi la mission pour laquelle on veux créer une fiche, que celle ci s'ouvre afin qu'on puisse la remplir en plus de mettre le lien hypertexte ?

Plus compliqué aussi : dans cette fiche il y a 2 cases a cocher "parties complétée" (une par service). Est-il possible que lorsque par exemple le bureau des opérations ai fini de compléter sa partie, coche cette case ce qui entraîne la sauvegarde de cette fiche, sa fermeture et écrive "remplie" dans le fichier "projet" dans la colonne bureau OPS ? (ou alors que ça coche une case)

Une autre petite bricole aussi : Comment créer un bouton "supprimer une mission" dans le fichier projet, qui demande dans une listbox laquelle (de mission), et qui entraînerai la surpression de la ligne correspondant a cette mission ?

Dernier petit détail : lorsqu'une mission est créée, comment faire pour que la ligne ajoutée soit encadrée ?

je vous joint la version que j'ai légèrement modifiée; c'est a dire que j'ai ajoutée une fonction pour trier les missions en fonction de l'urgence avec le code ci dessous :

   ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
        ("D1:D5"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

merci encore, votre aide est excellente

9projet-v3-1.xlsm (35.59 Ko)

bonjour,

voilà les deux fichiers à remplacer.

Le fichier "projet" adapté selon tes besoins et le fichier "formulaire VIERGE..." adapté aussi avec les boutons à checker.

Donc remplacer les 2 fichiers par ceux là.

Attention, les macros dans le fichier "formulaire..." fonctionnent seulement si le fichier "projet" s'appelle exactement "projet" donc à toi de voir pour trouver le nom final de ton fichier pour adapter les macros quand ce sera nécessaire.

ah et la macro pour supprimer une mission, supprime également le formulaire qui était lié à celle-ci s'il y en avait un. Voilà

A plus !

17projet.xlsm (36.94 Ko)

Bonjour

merci beaucoup cela marche très bien.

J'ai cependant deux fenêtres d'avertissement qui s'ouvrent concernant des liaisons externes a mettre a jour. Qu'est ce que sont ces liaisons ?

J'ai également supprimé les listes d'hyperliens qui étaient dans le formulaire vierge dans l'autre feuille, totalement inutiles. Les fenêtres d'avertissement reviennent quand même. Y a t-il moyen de ne plus les voir a chaque fois que l'on crée une nouvelle fiche ?

Une autre question, est-il possible que le service des opérations puisse modifier le fichier projet (en ajoutant ou supprimant des missions et créer les fiches) mais que le service de navigabilité (bureau M) puisse seulement ouvrir le lien hypertexte vers la fiche pour la remplir ? (mais que le système case cochée , message "rempli" fonctionne quand même).

2 autres proposition d'amélioration :

Comment ajouter les bordures autour des cases de la ligne ajoutée par le bouton "ajouter une mission" ?

Dans la fiche projet, si je déplace les boutons pour les mettre au dessus du tableau plutôt que les mettre a droite et un peu cachés, cela ne posera aucun problème ?

Merci encore de votre aide !

Je vous joins le formulaire vierge sans les liens inutiles.

Pour les liens externes, cela vient du fichier, surement des formules dans certaines cellules qui font références à d'autres fichiers et donc des formules à mettre à jour. Tu peux avoir la liste des liens en allant dans l'onglet "Données" , Section "Connexions" et en cliquant sur "Modifier les liens". A toi de voir si tu as des liens inutiles ou pas ! Si les liens sont utiles, tu peux toujours enlever le message d'alerte en cliquant sur "Invite de démarrage..." sur la fenêtre des liens.

Pour limiter l'utilisation du fichier selon le service, je te propose soit de créer un USERFORM à l'ouverture du fichier où la personne choisit son service et selon sa réponse, le fichier bloque ou non l'utilisation. Sinon un mdp que tu fournis uniquement au service des OPS qui permet de débloquer l'utilisation du fichier.

Normalement les bordures se mettent automatiquement sur une nouvelle mission car j'ai rajouté une mise en forme conditionnelle qui met des bordures de A à G si A n'est pas vide.

Non tu peux les déplacer comme tu veux, par contre il faut passer en "Mode Création" dans l'onglet "Développeur" pour pouvoir les sélectionner par un clique droit.

Je n'ai pas de connexions ça me parait bizarre

Merci pour les bordures je n'avais pas vu

Lorsque je supprime les dernières missions restante j'ai cette erreur :

If Nom_Form <> "" Then
    If Dir(Chemin & Nom_Form, vbDirectory) <> "" Then
        Kill (Chemin & Nom_Form)
    End If
End If

avec Kill (Chemin & Nom_Form) en jaune dans le debogueur

Moi je vois une connexion avec un fichier "process.xls", mais pas dans une formule, peut être dans une liste de noms (voir dans Gestionnaire des noms, onglet "Formules").

Hm je ne sais pas, chez moi ca fonctionne, tu peux ajouter cette phrase juste au dessus de Kill :

On Error Resume Next

Et j'attend que tu me dises ce que tu préfères pour limiter l'utilisation du fichier.

A plus !

Effectivement je vois aussi cette liaison avec process , mais c'est le dossier où se situait le formulaire avant que vous me conseilliez de mettre dans un dossier qui sera partagé.

Or je n'utilise plus ce dossier ni même ce fichier process.xls. Je ne sais même plus où je lai mis.

Pour limiter le fichier je pense qu'un code est lus simple à réaliser

merci

EDIT : problème des liaisons résolu

J'ai un nouveau petit problème : lorsque je clique sur la case "partie complété " dans le formulaire, j'ai une erreur et le mode "remplie" ne s'affiche plus dans la liste des mission : voici le code

Private Sub CheckBox1_Click()

ActiveWorkbook.Save
Miss = Mid(ThisWorkbook.Name, 12, Len(ThisWorkbook.Name) - 25)
MsgBox Miss
Workbooks("projet.xlsm").Activate
Ligne = ActiveWorkbook.Sheets("Feuil1").Range("A3:A" & ActiveWorkbook.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row).Find(Miss).Row
ActiveWorkbook.Sheets("Feuil1").Range("F" & Ligne).Value = "Remplie"
ThisWorkbook.Close

End Sub

c'est la ligne "Ligne = ActiveWorkbook.Sheets("Feuil1").Range("A3:A" & ActiveWorkbook.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row).Find(Miss).Row" qui est en jaune

je vous joins mes fichiers, j'ai du faire une bêtise en les modifiant un peu

PS : dans le formulaire j'ai également rajoutée deux cases a coché dans la partie nav, mais je n'arrive pas a agrandir les textes "autorisé" et "refusé". Excel 2003 était plus facile pour ça puisque j'avais reussi avec les deux autres cases

5projet.xlsm (40.05 Ko)

Re,

Voilà, j'ai mis en place le mot de passe à l'ouverture.

Pour l'instant le code c'est 1234, tu peux le modifier en L1 (colonne masquée).

Le mot de passe pour verrouiller la feuille et la déverrouiller c'est 1234 à changer dans la macro si tu le souhaites dans la procédure du USF_Service. Cela a pour effet de bloquer la saisie et masquer les boutons si ce n’est pas un opérationnel et de débloquer la saisie et faire apparaître les boutons si c'est une opé.

Pour l'erreur sur la ligne :

Ligne = ActiveWorkbook.Sheets("Feuil1").Range("A3:A" & ActiveWorkbook.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row).Find(Miss).Row

C'est réglé. Par contre impossible de modifier la taille des case à cocher que tu as mises désolé.

A plus !

8projet.xlsm (43.05 Ko)

J'ai trouvé un petit problème : Si le mot de passe rentré est incorrect , une petite fenêtre s'ouvre pour me le dire, mais impossible de quitter cette fenêtre et bloque donc l'utilisation d'excel et la seule solution est de forcer l’arrêt via le gestionnaire de taches. Pas très pratique

De plus, quelles sont les lignes de code a modifier pour changer le code ? J'ai tenté de mettre 0000 au lieu de 1234 sur les deux lignes ou il y avais 1234 mais visiblement ça n'a pas suffit et c'est comme cela que j'ai trouvé le beug.

EDIT : j'ai trouvé comment modifier le mot de passe, mais si le service nav agrandie la colonne L il pourra le voir non ?

merci a bientôt

4projet.xlsm (38.61 Ko)

Effectivement, cela est embêtant

Peux-tu modifier la macro CommandButton1 dans la procédure "ThisWorkbook" par ceci stp :

Private Sub CommandButton1_Click()

Dim code$
Dim saisie$
saisie = TextBox1.Value
code = Range("L1").Value
If saisie <> code Then
    MsgBox "Mot de passe incorrect"
    TextBox1.Value = ""
Else
    ActiveSheet.Unprotect ("1234")
    For Each Bouton In ActiveSheet.Shapes
        Bouton.Visible = True
    Next Bouton
    Unload Me
End If

End Sub

En fait il y a 2 codes, un pour le service (celui que tu veux), et un code qui protège la feuille via excel (celui de la macro)

Celui de la macro n'est pas nécessairement à modifier car les utilisateurs ne sont pas censés essayer de Déverrouiller la feuille manuellement. Par contre tu peux modifier le code dans la cellule L1 qui celui-là représente le mot de passe que l'opé doit saisir dans le userform ! Donc pour ton exemple, tu peux laisser 1234 dans les macros mais mettre 0000 dans la cellule L1, dans ce cas, les opé devront saisir 0000 étant donné que le 1234 n'a pas d'impact pour les utilisateurs.

A plus !

Merci le système de code marche a merveille.

Cependant jai de nouveau le problème de la dernière fois concernant la case a cocher qui doit marquer "rempli" sur le fichier projet

une fenetre saffiche indiquant : erreur dexcution 91 variable dobjet ou variable de bloc with non definie

et toujours cette phrase en jaune

Ligne = ActiveWorkbook.Sheets("Feuil1").Range("A2:A" & ActiveWorkbook.Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row).Find(Miss).Row

EDIT : j'ai résolu ce problème : en fait j'avais changé le code qui créait le nom du formulaire de la mission, de façon a ce qu'une date soit écrit jj-mm-aaaa au lieu de jjmmaaaa (pas très comprehensible), et c'est ça qui faisait planter. C'est un détail mais j'ai remis la format jjmmaaaa pour ne pas avoir l'erreur

Mon tuteur m'a également conseillé d'envoyer un mail au bureau de nav dès qu'une mission est ajoutée pour les prévenir et daller voir le dossier contenant la liste des mission, et demander le remplissage de cette fiche , donc l'idée serait d'envoyer ce mail dès que la case a cocher du bureau opération est cliquée.

Une idée intéressante aussi serait que le bureau nav envoie un mail en retour pour indiquer qu'ils ont rempli la fiche.

Vous pensez que c'est faisable ? Ils utilisent Outlook donc ça devrait simplifier la chose.

Et un petit détail, dans la fiche formulaire, il y a une case qui redemande les dates (debut et fin) de la mission, est-il possible de récupérer la date de début déjà rentrée dans le fichier "projet" ? (ils sont un peu fainéants )

PS : si ça peut aider, je crois que le code pour envoyer un mail est le suivant :

Dim OutApp As Object
    Dim OutMail As Object

    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    On Error Resume Next
    With OutMail
        .To = ""
        .CC = ""
        .BCC = ""
        .Subject = ""
        .Body = ""

        .display
        .send

   On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing

    End With

A bientôt !

EDIT : l'idée d'un mail a chaque mission ajoutée risque de spammer si le bureau OPS rentrent plusieurs missions le même jour, peut - être qu'un bouton "prévenir bureau nav" serait plus pratique, si ce bouton demande quelles sont les nouvelles missions ajoutées a signaler. A moins que vous voyez une meilleure solution ?

6projet.xlsm (41.93 Ko)

Re,

Ah oui je comprend mieux, si tu souhaites ajouter 2 tirets pour la date, sur la ligne suivante :

Miss = Mid(ThisWorkbook.Name, 12, Len(ThisWorkbook.Name) - 25)
'il faut changer le 25 par 27 (représente le nombre de caractères en additionnant. "formulaire_" et "_jjmmaaaa.xlsm"

Ensuite, la date de début de mission vient maintenant se mettre directement dans la fiche de mission.

Et aussi plus important, j'ai rajouté l'option pour l'envoie de mail, je t'explique :

J'ai crée un nouveau bouton "Envoyer mail". Si c'est le bureau opé qui utilise le fichier (feuille déverrouiller), alors le bouton ouvre un userform où l'opé doit sélectionner les missions qui doivent être complétées et envoie un mail au bureau de nav avec la liste des missions qu'il a sélectionné.

quand le nav ouvre le fichier (verrouillage de la feuille) il complète les fiches puis appuie sur le bouton "Envoyer mail", là un message apparaît et lui demande s'il veut bien envoyer un mail au bureau des opé. Si oui, alors petit mail pour dire que les fiches disponibles ont été complétées.

Bien sûr, il faut saisir l'adresse exacte dans la macro, ainsi qu'un titre pour les mails, tu peux aussi revoir le message en lui-même, j'ai écris un truc rapide.

La macro pour un mail des opé vers les nav se situe dans l'userform USF_Mail, elle s'appelle Envoi_Mail_Ops()

La macro pour un mail des nav vers les opé se situe dans le module Mail, elle s'appelle Envoi_Mail_Nav()

N'hésite pas si tu as des questions !

A plus !

14projet.xlsm (46.32 Ko)

Merci tout fonctionne vraiment très bien , le système pour sélectionner plusieurs missions pour envoyer un mail est vraiment bien, ça

serait super si on pouvais faire la même chose pour supprimer plusieurs missions, j'ai essaye en m'inspirant du code mais je n'ai pas réussi

EDIT : en fait j'arrive a copier l'userform mais pour coder le bouton valider qui supprime la je bloque

18projet.xlsm (49.62 Ko)
Rechercher des sujets similaires à "creer boite dialogue communiquer entre deux services"