Bonjour à tous,
Bonjour le Forum.
Voilà, dans mon appli j'ai un fichier .xls qui dès son ouverture lance un UserForm qui sert de "plateforme de répartition et re direction" vers d'autres xls.
Jusque là tout va bien et fonctionne à la perfection.
Ce fichier xls de départ et utilisé en réseau interne par 10 à 15 personnes simultanément.
Je souhaiterai rajouter une fonctionnalité de tchat (simple ou évolué) directement dans ce UserForm
Est-ce possible..?
si oui comment...?
Merci de m'indiquer quelques pistes, ou tutoriels.
Paul87
Bonsoir,
j'ai bien rajouté dans le code du CommandButton1
le code nécessaire au transfert vers la TextBox1, avec la concaténation de l'id_user.
puis le code qui efface le contenu de ma TextBox2.
En fait comme dans mon premier modèle..
mais maintenant je sèche lamentablement...
il faudrait m'expliquer un peu votre code..pour que j'avance
Toutes les lignes entrées doivent-elles se stocker dans le fichier .txt..?
Ce serait plutôt à vous de m'expliquez ce que vous voulez faire. En attendant vos contrôles sont des TextBox, pas des ListBox.
Avec une ListBox Vous pourriez évidemment lire et écrire plusieurs lignes dans un fichier texte.
Mettez autant de Print # qu'il faut pour les écrire et autant de Line Input pour les lire.
Je crois que la touche F1 sur les mots clés du langage vous expliquera aussi bien que moi.
P.S. Remarquez, avec une ListBox vous pourriez toujours n'enregistrer que le dernier message envoyé par quelqu'un.
Essayez le classeur joint.
Bonjour et encore merci pour votre aide..et votre patience.!
j'ai testé votre classeur joint,
j'ai maintenant un enregistrement dans le fichier .txt du UserLogin + du texte entré en TextBox2, et ceci fonctionne quel que soit le poste et l'utilisateur, c'est ok pour ça.
Mais dans ce fichier .txt, chaque nouveau texte entré, efface le précédent. Est-ce que c'est normal.?
L'affichage dans la ListBox1 devrait se faire depuis:
Code:
Me.ListBox1.AddItem Format(H, "hh:mm") & ", " & Z
...enfin si j'ai bien compris..(ce qui n'est pas sur du tout...) et là, je n'ai aucun affichage dans la ListBox1 alors qu'il devrait y avoir un rafraichissement de cette ListBox1 toutes les 5 secondes par "ContrôleChgt".
j'ai l'impression qu'il ne se passe rien de la macro "Public Sub ContrôleChgt"
De plus, je ne comprends pas bien à quoi sert la variable "Z" ..à récupérer la valeur (en string) contenue dans .txt ..?
Merci encore..
j'ai bien quelques connaissances en vba..mais là c'est un peu trop ardu pour moi..
Re...
finalement j'ai fais un grand pas en avant..!! ça marche !!
j'avais simplement oublié de lancer automatiquement la sub "VérifHeureTchat"
je trouvais ça bizarre que rien ne se passe..!!!
Je vais vérifier que ça fonctionne bien partout..sur tous les postes et je reviens vers vous pour finaliser..
Encore merci +++++++++
J'ai juste encore une question...enfin je crois..
peut-on paramétrer un retour à la ligne automatique dans la ListBox si le texte entré dans la TextBox et trop long..?
ou suis je obligé de limiter le nombre de caractères de ma textbox en fonction de la largeur de ma ListBox..?
Merci encore
ca fonctionne!! avec un retour à la ligne si message trop long.
avec comme propriétés pour cette TextBox3: WordWrap= True et MultiLigne=True ainsi que Enabled=False
Maintenat toute dernière question..
peut'on faire émettre à Excel un son à l'arrivée d'un message...j'ai testé Beep en fin de "Public Sub ContrôleChgt" lorque le nouveau message est affiché....ça ne marche pas.!
Une idée..?
Et vous n'avez pas peur qu'au fil de la journée le contenu de la TextBox3 grossisse tellement qu'on ne voit plus le dernier message ?
Chez moi Beep produit le même son qu'un MsgBox auquel on ne précise pas de nuance en 2ième paramètre. C'est le Wave assigné à "Son par défaut" dans le volet "Sons" des Propriétés de Sons et périphériques audio du panneau de configuration.
Public Sub ContrôleChgt(ByVal H As Date)
Dim Z As String
If H = DateHeureTchat Then Exit Sub
Open ChNomFTchat For Input As #1
Line Input #1, Z
Close #1
DateHeureTchat = H
Me.TextBox3 = TextBox3 + Format(H, "dd/mm hh:mm") & " -> " & Z & vbLf
Me.TextBox3.SetFocus
TextBox3.CurLine = 0
End Sub
ça fonctionne...j'ai bien un "scrolling" à partir de la dernière ligne.
bon, ça m'oblige à passer la propriété enabled de False à True....mais ce n'est pas bien grave..!! puisque si une entrée est faite dans cette TextBox..elle ne sera pas diffusée en ligne.
Par contre,..pour le son..je ne comprends pas votre commentaire et ce que je peux faire...
Encore MERCI +++
re,
finalement avec ça..le son marche à l'arrivée de nouveaux messages..!!Nickel
Décaration:
Code:
Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpzSoundName As String, ByVal uFlags As Long) As Long
1 module:
Code:
Sub Macro1()
Call sndPlaySound32("C:/WINDOWS/Media/chimes.wav", 0)
End Sub
et enfin:
Code:
Private Sub TextBox3_Change()
Macro1
End Sub
Par contre, j'ai un plus gros problème..
Si deux ou plusieurs utilisateurs postent un message dans un intervalle très proche...çe qui risque fatalement arriver, un ou plusieurs des messages ne sont pas enregistrés/affichés.
j'ai essayé de diminuer la fréquence de rafraichissement à 1/86400 c'est un peu mieux...
si je passe à 0.5/86400...ça devient instable et ne fonctionne plus..
existe t'il une solution pour être sur de ne perdre aucun message..même ceux postés aux mêmes moments..??
Après ça ....l'APPLI est terminée..!!!!!!
MERCI +++++
Bonjour.
Ce que vous pouvez faire c'est tester dans une toute petite procédure si un Beep tout seul produit un son, si un MsgBox en produit un (ils n'en produisent pas non plus chez moi si je n'ai pas allumé mes 2 petits HP). Et s'il s'avère que c'est parce que la config. matérielle ne permet pas de produire des sons, remplacez peut être simplement par un MsgBox "Nouveau message :" & Z, vbInformation, "Tchat". Sinon voyez s'il est placé au bon endroit.
Eh oui, le deuxième problème est plus sérieux. J'y pensais plus ou moins. Deux voies à creuser:
1: au lieu d'écrire le message tout de suite, différer cette écriture jusqu'à ce que la dernière heure du fichier soit dépassée de plus de 5 secondes et la faire effectuer par la procédure exécutée périodiquement,
2: Empiler dans le fichier tous les messages vieux de moins de 10 secondes avec cette heure notée dedans.
D'une façon ou d'une autre ça complique sérieusement. De la 2ième surtout, mais elle est plus confortable.
Oup's...ca se complique même au delà de mes moyens....mince alors...!!
sans compter qu'avec l'une ou l'autre des solutions..il y aura un retard à l'affichage
Comment faire alors..?
Ne serait-il pas possible de faire une sorte de test style.
pas de transfert/écriture du nouveau message dans .txt tant que l'affichage .txt vers textbox n'est pas fait (ou la macro "ContrôleChgt" terminée)
ou bien...
juste un "timer" qui bloque l'exéctution de la macro de transfert/écriture pendant 1sec de plus que "now" ou variable "DateHeureTchat"