Dans le cadre d'un outil stocké sur serveur, il y a eu des coac avec des personnes connectées. l'utilisateur n'a pas dû lire la fenêtre indiquant qui était connecté et à mis 20min à trouver l'utilisateur concerné.
j'ai pensé à mettre en avant l'utilisateur et le nom de l'ordinateur concerné affiché en haut dans le bandeau.

ouverture du classeur, la sub ci dessous est appelée.
On test si l'outil est en lecture seule:
- non : récupération des données et stockage.
- oui : quelqu'un est déjà connecté on continu sans stocker les nouvelles données de cet utilisateur.

dans tous les cas, récupération des éléments stockés et affichage.

J'ai un soucis avec l'affichage justement, le principe ne semble pas fonctionner à chaque fois.
certains cas montrent étant en lecture seule l'ordinateur et l'utilisateur, parfois également utilisateur qui n'est plus connecté sur l'outil et qui avait la main en complet sans lecture seule.

[edit] en simple relecture du code je pourrais je pense écrire ceci pour l'appel : QuiSuisJe (ActiveWorkbook.ReadOnly) .
je viens de m'en rendre compte.

quelqu'un aurait il une explication ?
Par avance merci,

Ronan

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
 
 
Private Sub Workbook_Open()
 
    ' [...] code tronqué non utile ici
 
    Application.ScreenUpdating = False
 
    Select Case ActiveWorkbook.ReadOnly
        Case False: QuiSuisJe (False) ' permet de visuellement connaitre qui est connecté sur la main courante (session,ordi)
        Case True: QuiSuisJe (True)
    End Select
 
    ' [...] code tronqué non utile ici
end sub
 
'*
'* QuiSuisJe
'* Permet d'afficher en partie haute du bandeau excel qui est connecté.
'******************************
Sub QuiSuisJe(Optional b_estLectureSeule As Boolean = False)
 
   Dim lo_UtilisateurConnecte As ListObject
   '-------------------------------------------
   Set lo_UtilisateurConnecte = Sheets("Config").ListObjects("t_UtilisateurConnecte")
 
    ' si erreur lors du code qui suivra on saute en gestion d'erreur
    On Error GoTo errorHandler
 
   ' si le fichier n'est pas en lecture seule (outil pas encore ouvert)
   If b_estLectureSeule = False Then
    ' sauvegarde des données utilisateur connecté.
    lo_UtilisateurConnecte.DataBodyRange.Cells(lo_UtilisateurConnecte.DataBodyRange.Find("utilisateur").Row - 1, 2).Value = Environ("username")
    lo_UtilisateurConnecte.DataBodyRange.Cells(lo_UtilisateurConnecte.DataBodyRange.Find("ordinateur").Row - 1, 2).Value = Environ("COMPUTERNAME")
   End If
 
   ' en haut du bandeau excel affichage des données sauvegardées.
   ' si lecture seule, récupère les données sauvegardées, autrement lecture des nouvelles données sauvegardées.
   Application.Caption = " Utilisateur : " & lo_UtilisateurConnecte.DataBodyRange.Cells(lo_UtilisateurConnecte.DataBodyRange.Find("utilisateur").Row - 1, 2).Value _
                       & " | Ordinateur : " & lo_UtilisateurConnecte.DataBodyRange.Cells(lo_UtilisateurConnecte.DataBodyRange.Find("ordinateur").Row - 1, 2).Value
 
   Set lo_UtilisateurConnecte = Nothing
   Exit Sub
 
errorHandler:
   Set lo_UtilisateurConnecte = Nothing
   MsgBox "QuiSuisJe utilisateur connecté: erreur de traitement", vbInformation, "QuiSuisJe recherche information utilisateur"
End Sub