Envoyer un message à l'utilisateur d'un fichier Excel via une autre macro reseau

Résolu
cs_rikoo83 Messages postés 9 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 18 décembre 2006 - 4 déc. 2006 à 12:01
cs_rikoo83 Messages postés 9 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 18 décembre 2006 - 18 déc. 2006 à 10:25
Bonjour, je me trouve devant un problème.
J'ai réalisé une macro qui me permet de savoir si un fichier Excel est ouvert ou non sur le réseau.
Cependant ce que j'aimerai, c'est envoyer un message à l'utilisateur qui utilise le fichier en lui demandant de fermer ce fichier. (Ce msg serait envoyer via une macro)
Le solution a laquelle je songeais, était de faire une macro sur ce fichier, puis lorsque ce dernier recevez une requete spécifique du reseau (donc ici le test de savoir si le fichier est ouvert ou non) alors ce dernier envoie un message dans une "msgbox".

Je ne sais pas si cela est réalisable, mais surtout si jamais j'ai été assez clair. La solution que je propose n'est peu être pas la bonne, je suis preneur de toutes les solutions possibles et imaginables.

Rikoo.

6 réponses

cs_carvals Messages postés 50 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 23 janvier 2008
5 déc. 2006 à 14:11
salut,

je suis pas certain d'avoir entierement saisi l'architecture donc je te donne les modules:

pour recuperer le nom du user:

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long


Private Function UserName()
  Dim S As String, n As Long, Res As Long


  S String(200, 0): n 199: Res = GetUserName(S, n)
  UserName = UCase(Left(S, n - 1))
  Range("A1").Value = UserName 'ensuite tu le range ou tu veux... la A1
End Function

pour net send du declare le nom du user comme un string puis


Dim UserN as string
Dim MonMsg as String

MonMsg = "T'as fini de squater le fichier.....!!!"
UserN = range("A1").value  '.... en gros la ou tu l'as stocke


Shell "Command.com /c net send " & UserN & " " & MonMsg

oublis pas les espaces a la fin de "net send" et apres UserN sinon ca marche pas... Faut juste penser a comment est ecrit la comande dos

good luck!

carvals
3
cs_carvals Messages postés 50 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 23 janvier 2008
4 déc. 2006 à 13:03
Salut,

je te propose la solution suivante:
1- Lors de l'ouverture du fichier tu captures le nom reseau du user et tu le stockes
2- Ta macro reconnait que le fichier est ouvert sur le reseau
3-ajoute un module qui va cherche le nom du user actuel
4- lance une commande dos net send pour informer le user qu'il doit fermer

Bon je sais qui utilise encore "Net Send".... mais bon c'est pratique parfois
en plus ca apparait au dessus de toute les fenetres ce qui est pratique....

je te mets la syntaxe pour net send:

Shell "Command.com /c net send NomDuUser MonMessage"

dis moi si ca t'as aide....?

ciao

carvals
0
cs_rikoo83 Messages postés 9 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 18 décembre 2006
4 déc. 2006 à 17:37
Bonjour, désolé de ne pas t'avoir répondu avant mais ma voiture était à la fourrière.
Bref, concernant ta solution :
1- Lors de l'ouverture du fichier tu captures le nom reseau du user et tu le stockes (je ne sais pas comment le faire)
2- Ta macro reconnait que le fichier est ouvert sur le reseau
Function IsFileOpen(ByVal strFic As String) As Boolean
    'Fonction pour vérifier si le fichier est occupé ou non!
    Dim fic As Integer
    On Error Resume Next
    fic = FreeFile()
    Open strFic For Input Access Read Lock Read Write As fic
    If Err.Number = 0 Then
    IsFileOpen = False
    Close fic
    Else
    IsFileOpen = True
    End If
End Function
(DONC OK, je sais faire)
3-ajoute un module qui va cherche le nom du user actuel
(je ne sais pas comment le faire)

4- lance une commande dos net send pour informer le user qu'il doit fermer

Shell "Command.com /c net send NomDuUser MonMessage
(Ca marche super bien. Sauf qu'il y a un pb c'est que ce service est bloqué sur les différents PC du bureau et je suis quasiment sûr que les administrateurs ne me donneront pas l''autorisation pour activer ce service. Maintenant si tu as une manip qui sans qu'ils le sachent active et désactive ce service lors de l'ouverture et la fermeture du fichier Excel, ça pourrait le faire, bien que peut etre un poil long, et que se ne soit pas réellement réglo)

Je pensais plutôt à activer une message box via une macro dans chacun des fichiers partage utilisé qui capterait le signal de test si oui ou non le fichier est ouvert.

Je te remercie déjà, en espérant que tu puisses m'aider de nouveau.

Bye

Rikoo
0
cs_carvals Messages postés 50 Date d'inscription lundi 20 novembre 2000 Statut Membre Dernière intervention 23 janvier 2008
4 déc. 2006 à 19:37
ouais bon effectivement sans ce service je vois pas trop comment faire simple et automatique.

Je recapitule ce que tu veux faire pour voir si j'ai bien compris.... Tu veux pouvoir alerter  les users de fermer leur fichier partager. sans evidement les ouvrir pour utliser l'option "notify" de windows... c'est bien ca...

regarde peut etre cette option et dis moi

Dim xls As Workbook
Dim var As String
 
Set xls = GetObject(MonFichier.Path)  'ton classeur ou tu as la liste des fichiers 'ouverts
var = xls.Worksheets(1).Range("A1").Value  'tu customize pour chaque fichier excel

'ensuite chaque fichier excel ira verifier un valeur dans une cellule attitree genre "Y" ou ' "N" et dc activera ta msgbox

if var = "Y" then
Msgbox "Merci de fermer votre fichier"
end if

ajoute une frequence pour l'update du GetObject et le tour est joue. ca ne devrait pas ralentir l'utilisation des fichiers.

carvals
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_rikoo83 Messages postés 9 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 18 décembre 2006
5 déc. 2006 à 11:21
Salut, le problème avec cette solution, c'est qu'elle n'est pas instantanée, et qu'il y faut annexer un autre fichier si j'ai bien compris. En plus j'ai pas réussi à la faire tourner.

Sinon je viens de discuter avec mon administrateur réseau qui a un peu tiré la gueule, mais il est d'accord pour activer ce service sur les différents PC concerné.
Donc je pense qu'on peux essayer de se cantoner à la première solution qui m'a l'air bien plus rapide et pratique.
Mais, j'ai rencontré un pb, c'est que je n'arrive pas à déclarer le "NomDuUser" dans la commande suivante :
Shell "Command.com /c net send NomDuUser MonMessage"
si je le rentre en variable il ne comprend pas. De plus je ne sais pas faire tes manip 1 et 3 comme je te l'ai indiqué ci-dessus. Pourrais-tu m'aider en me donnant les lignes de commandes à réaliser.

En attendant, merci encore pour ton aide !

Bye

Rikoo
0
cs_rikoo83 Messages postés 9 Date d'inscription lundi 24 avril 2006 Statut Membre Dernière intervention 18 décembre 2006
18 déc. 2006 à 10:25
Salut, je te remercie, ça fonctionne super!

A ++

Rikoo
0
Rejoignez-nous