Moniteur externe et contrôle à distance de l'Excel
Bonjour à tous !
Tout d'abord merci pour aide pour mes anciens posts, j'ai beaucoup progressé grâce à vous !
Ensuite pour la suite, je vais nommer moniteur un PC qui est non utilisé par une personne humaine, doté d'une UC connectée au réseau et d'un écran.
J'ai créé sur l'intranet un excel avec une macro qui permet de générer un Userform de données. Ce que je cherche à faire, c'est avoir un moniteur (donc juste un écran) qui puisse montrer ce tableau en continu.
Ce tableau est un Userform regroupant les tâches à faire (comme une ToDoList) qui est amené à changer en fonction des tâches que l'utilisateur marque comme "faites".
Le soucis c'est que cet excel est amené à être modifié par d'autres utilisateurs via leur propre PC, et puisque l'on ne peut pas ouvrir le fichier 2 fois ce n’est pas évident de mettre en place ma solution.
J'ai quelques solutions mais je ne sais pas si c'est possible de les coder :
1 - Quand un utilisateur ouvre l'excel de son coté, il fait "fermer" ce même excel déjà ouvert sur le moniteur. Une fois qu'il a apporté ses modifications, il ferme donc son excel, qui s'ouvre à nouveau au niveau du moniteur, affichant ainsi le tableau mis à jour (j'ai l'impression que j'en demande trop au VBA ^^)
2 - Faut bien suivre celle-là : Avoir une copie de ce tableau ouvert sur le moniteur via un autre excel, ce qui permet de résoudre le soucis de l'excel partagé. Donc une fois que l'utilisateur a apporté ses modifications, il ferme comme d'habitude son excel, et créer une sauvegarde du tableau dans un nouveau fichier excel. Le moniteur lui devra ouvrir ce dernier et fermer le précédent excel contenant le tableau avec les infos NON actualisées.
3 - Ou alors depuis le début il y a moyen de partager le fichier Excel et je n'en savais rien !
4 - Votre solution ici si vous en avez !
Merci en tout cas pour votre aide, je sais que ce n’est pas évident comme explication du problème, donc n'hésitez pas à me poser des questions si vous souhaitez plus d'éclaircissements !
Merci à vous !
- Messages
- 4'199
- Excel
- 2021 FR 64 bits
- Inscrit
- 13/06/2016
- Emploi
- bénévole associations Goutte d'Or
Bonjour,
Pour travailler en modification simultanée sur le même classeur, une solution est de laisser le classeur en "non partagé" et de gérer une file d'attente pour les modifications.
Dès qu'une personne essaiera d'ouvrir un classeur utilisé en modification par une autre personne, il ne pourra l'ouvrir qu'en lecture seule et le code ci-dessous lui permettra de patienter :
Private Sub Workbook_Open()
Application.DisplayAlerts = False
If ThisWorkbook.ReadOnly Then
réponse = MsgBox("Voulez-vous modifier ce fichier ?", vbYesNo + vbDefaultButton2)
If réponse = vbYes Then
Nom_fichier = ThisWorkbook.Path & "\" & ThisWorkbook.Name
'..... contrôle libre accès classeur pour modification sinon attente 5 secondes .......................................
Do While IsWorkBookOpenForWrite(Nom_fichier)
date_fin = DateAdd("s", 5, Now)
Application.Wait date_fin
Loop
'..... lancement nouvelle instance Excel avec ouverture fichier pour modification ....................................
Set xl = New Application
xl.Visible = True
xl.Workbooks.Open fileName:=Nom_fichier, IgnoreReadOnlyRecommended:=True
'..... fermeture instance Excel avec ouverture fichier en lecture seule ....................................
Application.Quit
End If
End If
End Sub
Function IsWorkBookOpenforwrite(ByVal Nom_fichier As String) As Boolean
Dim no_fichier As Long
On Error Resume Next
no_fichier = FreeFile()
Open Nom_fichier For Binary Access Read Lock Read Write As #no_fichier
If Err.Number = 0 Then IsWorkBookOpenforwrite = False _
Else IsWorkBookOpenforwrite = True
Close no_fichier
End Function
Bonjour thev,
Ta solution est interessante, néanmoins le problème est que le moniteur n'est pas sensé représenter une personne physique, donc le sénario que je souhaite :
1 - Le moniteur affiche l'Userform "Todo List" de l'Excel
2 - Un utilisateur veut ouvrir l'Excel pour le modifier
3 - L'Excel ouvert sur le moniteur se ferme tout seul
4 - L'Excel s'ouvre au niveau du poste de l'utilisateur
5 - L'utilisateur modifie l'Excel
6 - L'utilisateur ferme l'Excel
7 - L'Excel s'ouvre sur le moniteur
Le sénario que je ne souhaite PAS :
1 - Le moniteur affiche l'Userform "Todo List" de l'Excel
2 - Un utilisateur veut ouvrir l'Excel pour le modifier
3 - L'utilisateur ferme l'Excel ouvert sur le moniteur
4 - L'utilisateur ouvre l'Excel au niveau de son poste
5 - L'utilisateur modifie l'Excel sur son poste
6 - L'utilisateur ferme l'Excel sur son poste
7 - L'utilisateur ouvre l'Excel au niveau du moniteur
J'ai pensé à une detection de nom de session pour que l'Excel differencie l'utilisateur du moniteur
J'ai pensé aussi à faire en sorte à mettre une ligne à la fermeture (BeforeClose) pour faire ouvrir le fichier sur le moniteur (mais je n'arrive pas à voir quoi)
J'ai aussi pensé à faire en sorte que l'Excel sur le moniteur reste ouvert mais en lecture seule, ce qui règlera le soucis de la detection de fermeture de ce dernier par un utilisateur. en comptant le nombre d'entité qui ont ouvert le fichier. Si le résultat est 1 (c'est à dire qu'il n y a que le moniteur qui a l'Excel ouvert) il vient se fermer et se réouvrir pour s'actualiser.
On pourra ainsi utiliser ta solution pour quand plusieurs utilisateurs ouvrent l'Excel.
J'espère que j'étais plus clair !
Merci !