Comter le nombre d'utilisateurs

archampi

XLDnaute Nouveau
Bonjour à tous,

Je suis un nouveau membre de ce forum et je crois que je devrais trouver ici les experts dont j'ai besoin.

J'ai créé une application Excel VBA (2003-2007) qui roule sous WinXP, Vista et Win7. Je me sers uniquement de Userforms. Le programme est multi-usagers et gère les accès aux données afin d'éviter les collisions.

Il comporte cependant quelques fonctions qui permettent de faire l'entretien de la base de données et ces fonctions nécessitent d'avoir un accès exclusif aux fichiers de données.

Or mon problème est celui-ci:

Pour déterminer le nombre d'usagers utilisant l'application, j'ai créé un fichier dans lequel j'incrémente un compteur au moment où quelqu'un ouvre le classeur et je soustrait "1" de ce même compteur quand il quitte. Ainsi, l'orsque j'ai besoin de l'excluisivité, il suffit de lire la valeur du compteur. S'il est à zéro, je peux procéder. L'idée est simple et devrait être efficace.

Or il arrive que l'application plante pour des raisons x; ce qui empêche l'exécution de la soustraction car le code cesse de s'exécuter et Excel expluse l'utilisateur.

Y a-t-il une façon qui soit plus sûre et plus stable de procéder pour parvenir aux mêmes fins?

Merci de vos lumières.

Pierre
 

archampi

XLDnaute Nouveau
Re : Comter le nombre d'utilisateurs

Bonjour Staple1600

L'application comporte 23 Userforms pour environ 45000 lignes de code. Il y a deux modules et trois modules de classe alors voici un extrait qui démontre les procédures utilisées pour faire le travail de comptage des usagers.

Je dois préciser que ce code ne pose aucun problème et qu'il fonctionne très bien. Le problème réside dans le fait que lors d'un plantage d'Excel, le code qui devrait s'exécuter à la fermeture, ne s'exécute pas. Je cherche donc une autre solution qui soit plus fiable.

Ce code s'exécute à l'ouverture du classeur
Il sert à incrémenter le nombre d'utilisateur actifs.

Code:
Private Sub Workbook_Open()
Dim Fichier As String
Dim NoFichier As Integer
' Présence est déclarée comme Public dans un module 

Fichier = ThisWorkbook.Path & "\Données\" & "Usagers.nbr"
NoFichier = FreeFile
On Error GoTo Attendre

Open Fichier For Binary Access Read Write Lock Write As #NoFichier
Seek #NoFichier, 1
Get #NoFichier, , Présence
Présence = Présence + 1
Seek #NoFichier, 1
Put #NoFichier, , Présence
Close #NoFichier

Application.Visible = False
'L'application commence ici
Load FormSplash
FormSplash.Show

Exit Sub

'Si quelqu'un d'autre travaille dans le fichier, on attends son tour
Attendre:
    If Err = 70 Then
        Resume
    End If

End Sub


Cette partie du code s'exécute à la fermeture du classeur
Il sert à soustraire 1 du nombre d'utilisateurs.

Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Fichier As String
Dim NoFichier As Integer
' Présence est déclarée comme Public dans un module 

Fichier = ThisWorkbook.Path & "\Données\" & "Usagers.nbr"
NoFichier = FreeFile
On Error GoTo Attendre

Open Fichier For Binary Access Read Write Lock Write As #NoFichier
Seek #NoFichier, 1
Get #NoFichier, , Présence
Présence = Présence - 1
Seek #NoFichier, 1
Put #NoFichier, , Présence
Close #NoFichier

Exit Sub

'Si quelqu'un d'autre travaille dans le fichier, on attends son tour
Attendre:
    If Err = 70 Then
        Resume
    End If

End Sub

Merci de ton attention.

Pierre
 

Staple1600

XLDnaute Barbatruc
Re : Comter le nombre d'utilisateurs

Re


A vue de nez et en suivant mon intuition du moment

J'éviterai ceci
Code:
Application.Visible = False

Ce à quoi je substituerai un affichage "plein écran" des userforms.

mais peut-être le Mal est ailleurs ... et mon intuition erronée.
 

archampi

XLDnaute Nouveau
Re : Comter le nombre d'utilisateurs

Merci pour la suggestion... mais le problème n'est pas là.

Dur dur pour ton intuition ;)

Il ne faut pas chercher un problème avec le code... il arrive parfois, même dans les meilleures application, que le programme plante. Et c'est dans cette éventualité que je cherche une autre option pour compter les utilisateurs actifs.

Merci quand même pour ton attention.

Pierre
 

jeanpierre

Nous a quitté
Repose en paix
Re : Comter le nombre d'utilisateurs

Bonsoir archampi,

Tu parles de plantage....

Si ça plante tu perds tout et je ne connais aucune solution qui pourrait permettre une fiabilité dans ce cas.

Excel n'enregistre pas les actions, une à une, sur le disque, il ne le fait, pour tout, qu'au moment où te le décide, ou à la fermeture si tu l'as programmé ainsi.

Mais ai-je bien compris ?

Bonne nuit ici.

Jean-Pierre
 

archampi

XLDnaute Nouveau
Re : Comter le nombre d'utilisateurs

Bonsoir Jean-Pierre

Peut-être as-tu manqué une info importante...

J'ai créé une application Excel VBA (2003-2007) qui roule sous WinXP, Vista et Win7. Je me sers uniquement de Userforms. Le programme est multi-usagers et gère les accès aux données afin d'éviter les collisions.

Il comporte cependant quelques fonctions qui permettent de faire l'entretien de la base de données et ces fonctions nécessitent d'avoir un accès exclusif aux fichiers de données.

Il faut mentionner que les données ne sont pas conservées dans un classeur; j'ai créé un système de base de données qui est géré par mon application. Dans le cas d'un plantage, les données sont aucunement endommagées, c'est seulement le nombre d'utilisateurs qui devient inexact.

Merci pour ton intervention.

Pierre
 

jeanpierre

Nous a quitté
Repose en paix
Re : Comter le nombre d'utilisateurs

Re,

Une solution consisterait à un enrgistrement régulier toutes les x secondes mais cela risque d'être très lourd et un peu usine à gaz pour palier à un éventuel plantage qui n'aura, peut-être, jamais lieu.....

Mais comme je n'ai pas encore compris ta démarche....
 

jeanpierre

Nous a quitté
Repose en paix
Re : Comter le nombre d'utilisateurs

Re,

Cool, laisse le temps au temps.... plutôt que de t'accrocher en permanence au cul du camion.....

Pierre est peut être en train de lire ton lien laisse lui le temps de digérer. Il sera temps demain de poser la question mais pas en permanence et en instantané..... comme tu le fais trop souvent.... enfin toujours d'ailleurs.
 

archampi

XLDnaute Nouveau
Re : Comter le nombre d'utilisateurs

Bonsoir Staple1600

Excuse-moi, je n'avais pas vue ta réponse avec le lien vers le site de Microsoft.

Ce n'est pas tout à fait ce dont j'ai besoin mais je vois que tu as compris le problème. J'ai cru un instant pouvoir utiliser cette astuce pour remplacer ma technique mais ça ne peut pas fonctionner. Dommage :(

Pierre
 

Staple1600

XLDnaute Barbatruc
Re : Comter le nombre d'utilisateurs

Re

archampi
Et Ce lien n'existe plus aussi , je le crains, sera sans issue ?

PS: si je te rappelais mon précédent message, c'était juste pour savoir si tu avais testé
(car ici je ne vois pas comment tester ton code étant mono-utilisateur
et n'ayant pas de réseau sous la main et aucun autres utilisateurs ;) )
 

archampi

XLDnaute Nouveau
Re : Comter le nombre d'utilisateurs

Merci Staple1600

Malheureusement, cette solution est inutile car le classeur (celui qui contient le code du programme) est toujours ouvert en lecture seule. D'ailleurs, je fais en sorte que les utilisateurs ne puissent pas le modifier ni l'enregistrer sous un autre nom. Alors l'ouverture en mode "exclusif" n'est pas pertinent.

Mais je vois que tu trimes dur la-dessus et je t'en remercie. :)

Pierre
 

Staple1600

XLDnaute Barbatruc
Re : Comter le nombre d'utilisateurs

Re


archampi
Je vais te laisser trouver d'autres pistes

car c'est l'heure d'éteindre le PC.

Je me lève à 7 heures demain.

J'espère que la nuit t'apportera pour le moins un début de solution.

PS: j'espère également que tes contributions sur le forum seront nombreuses à l'avenir car tu sembles être un "vbaiste" plus que confirmé
et j'ai donc hâte de lire "ta prose macrotique" pour bercer mes nuits d'insomnie.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 480
Messages
2 088 755
Membres
103 945
dernier inscrit
Rémi