Envoyer un message à l'utilisateur d'un fichier Excel via une autre macro reseau [Résolu]

Messages postés
9
Date d'inscription
lundi 24 avril 2006
Dernière intervention
18 décembre 2006
- - Dernière réponse : cs_rikoo83
Messages postés
9
Date d'inscription
lundi 24 avril 2006
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.
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Dernière intervention
23 janvier 2008
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de cs_carvals
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Dernière intervention
23 janvier 2008
0
Merci
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
Commenter la réponse de cs_carvals
Messages postés
9
Date d'inscription
lundi 24 avril 2006
Dernière intervention
18 décembre 2006
0
Merci
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
Commenter la réponse de cs_rikoo83
Messages postés
50
Date d'inscription
lundi 20 novembre 2000
Dernière intervention
23 janvier 2008
0
Merci
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
Commenter la réponse de cs_carvals
Messages postés
9
Date d'inscription
lundi 24 avril 2006
Dernière intervention
18 décembre 2006
0
Merci
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
Commenter la réponse de cs_rikoo83
Messages postés
9
Date d'inscription
lundi 24 avril 2006
Dernière intervention
18 décembre 2006
0
Merci
Salut, je te remercie, ça fonctionne super!

A ++

Rikoo
Commenter la réponse de cs_rikoo83

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.