Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

MsgBox incontournable? - Petit casse-tête pour experts

5 réponses
Avatar
Alain \(74\)
Bonjour à tous,
Ma question est à la fin du message...

Pour lister les ordinateurs connectés sur un réseau peer to peer le code
suivant est utilisé dans un formulaire possédant un bouton nommé
"cmdCréeFichier":

***Clic sur le bouton cmdCréeFichier
Private Sub cmdCréeFichier_Click()
On Error Resume Next
Dim i As Integer
Kill "C:\listeréseau.txt" 'Supprime le fichier s'il existe
Dim k As String
If Left(GetWinVersion(), 1) = "4" Then
'Sous Windows 98
k = "C:\command.com /C NET VIEW >c:\listeréseau.txt"
Else
'Sous Win XP
k = "C:\windows\system32\command.com /C NET VIEW
>c:\listeréseau.txt"
End If
'DoEvents
Shell k, vbHide
MsgBox "La liste des ordinateurs du réseau a été enregistrée dans le
fichier listeréseau.txt situé dans le répertoire C:\"
LitFichier 'Appel à la fonction "LitFichier"
End Sub
****************************
Public Function LitFichier()
Dim Contenu As String
Dim ContenuFichier
DoEvents
Open "c:\listeréseau.txt" For Input As #1
Do While Not EOF(1) 'Boucle
Line Input #1, ContenuFichier 'Lecture de la ligne
If Trim(ContenuFichier) <> "" Then
If Left(Trim(ContenuFichier), 2) = "\\" Then
ContenuFichier = Trim(Mid(ContenuFichier, 3,
InStr(ContenuFichier, Chr(32))))
If Trim(Contenu) <> "" Then
Contenu = Contenu & Chr(13) & ContenuFichier
Else
Contenu = ContenuFichier
End If
End If
End If
Loop
Close #1
DoEvents
MsgBox "Les ordinateurs du réseau sont les suivants:" & vbCrLf & Contenu
End Function
*******************************
NOTA:
Un module global contient le code suivant permettant de déterminer la
version Windows avec la fonction GetWinVersion (On considère ici que l'on
est en 98 ou en XP)

Declare Function GetVersion Lib "Kernel32" () As Long
_____________________________________________
Function GetWinVersion()
Dim ver As Long, WinVer As Long, DosVer As Long
Dim WindowsVersion As String, DosVersion As String

ver = GetVersion()

WinVer = ver And &HFFF&
GetWinVersion = Format((WinVer Mod 256) + ((WinVer \ 256) / 100),
"Fixed")
End Function
_____________________________________________

QUESTION:
On obtient un résultat lorsque la ligne suivante est présente dans le code
"sur clic" du bouton cmdCréeFichier.

MsgBox "La liste des ordinateurs du réseau a été créée." & vbCrLf & "Le
fichier listeréseau.txt a été créé dans le répertoire C:\"

Si on neutralise cette ligne en la mettant en commentaire il n'y a plus de
résultat.
Quelqu'un connaît-il l'astuce pour éviter la ligne MsgBox?

Je peux adresser le fichier exemple à ceux qui sont intéressés.

Merci pour toutes vos suggestions

AE

5 réponses

Avatar
John Fuss
J'ai regardé vite fait, le MsgBox ne fait qu'afficher un msg message pardon)
donc ne devrait pas poser de pbl (problème encore pardon). Mais peut-être
que ce message permet au fichier 'C:listeréseau.txt' de se créer. Tu peux
donc utiliser des doEvents pour redonner la main au système (hésite pas à en
mettre plusieurs voire même dans une boucle) ou alors essayer un
Application.Wait TimeSerial(hour(now), minute(now), seconde(now)+4) pour
attendre 4 secondes.

John

"Alain (74)" a écrit dans le message de
news:
Bonjour à tous,
Ma question est à la fin du message...

Pour lister les ordinateurs connectés sur un réseau peer to peer le code
suivant est utilisé dans un formulaire possédant un bouton nommé
"cmdCréeFichier":

***Clic sur le bouton cmdCréeFichier
Private Sub cmdCréeFichier_Click()
On Error Resume Next
Dim i As Integer
Kill "C:listeréseau.txt" 'Supprime le fichier s'il existe
Dim k As String
If Left(GetWinVersion(), 1) = "4" Then
'Sous Windows 98
k = "C:command.com /C NET VIEW >c:listeréseau.txt"
Else
'Sous Win XP
k = "C:windowssystem32command.com /C NET VIEW
c:listeréseau.txt"
End If

'DoEvents
Shell k, vbHide
MsgBox "La liste des ordinateurs du réseau a été enregistrée dans le
fichier listeréseau.txt situé dans le répertoire C:"
LitFichier 'Appel à la fonction "LitFichier"
End Sub
****************************
Public Function LitFichier()
Dim Contenu As String
Dim ContenuFichier
DoEvents
Open "c:listeréseau.txt" For Input As #1
Do While Not EOF(1) 'Boucle
Line Input #1, ContenuFichier 'Lecture de la ligne
If Trim(ContenuFichier) <> "" Then
If Left(Trim(ContenuFichier), 2) = "" Then
ContenuFichier = Trim(Mid(ContenuFichier, 3,
InStr(ContenuFichier, Chr(32))))
If Trim(Contenu) <> "" Then
Contenu = Contenu & Chr(13) & ContenuFichier
Else
Contenu = ContenuFichier
End If
End If
End If
Loop
Close #1
DoEvents
MsgBox "Les ordinateurs du réseau sont les suivants:" & vbCrLf &
Contenu

End Function
*******************************
NOTA:
Un module global contient le code suivant permettant de déterminer la
version Windows avec la fonction GetWinVersion (On considère ici que l'on
est en 98 ou en XP)

Declare Function GetVersion Lib "Kernel32" () As Long
_____________________________________________
Function GetWinVersion()
Dim ver As Long, WinVer As Long, DosVer As Long
Dim WindowsVersion As String, DosVersion As String

ver = GetVersion()

WinVer = ver And &HFFF&
GetWinVersion = Format((WinVer Mod 256) + ((WinVer 256) / 100),
"Fixed")
End Function
_____________________________________________

QUESTION:
On obtient un résultat lorsque la ligne suivante est présente dans le code
"sur clic" du bouton cmdCréeFichier.

MsgBox "La liste des ordinateurs du réseau a été créée." & vbCrLf & "Le
fichier listeréseau.txt a été créé dans le répertoire C:"

Si on neutralise cette ligne en la mettant en commentaire il n'y a plus de
résultat.
Quelqu'un connaît-il l'astuce pour éviter la ligne MsgBox?

Je peux adresser le fichier exemple à ceux qui sont intéressés.

Merci pour toutes vos suggestions

AE









Avatar
Alain \(74\)
Bonjour,
Merci pour cet avis . Je ne l'avais pas précisé mais j'ai essayé tout ça en
vain (DoEvents, Attente etc...) Rien n'y fait.
Jusqu'à trouver l'astuce, je n'ai rien trouvé d'autre que faire appel à un
Msgbox pour voir le retour d'un résultat.
A première vue il semble que ce "défaut" est lié à la fonction shell qui est
utilisée... mais je n'ai pas trouvé de documentation suffisante sur le
sujet.

PS: Je ne connais pas la méthode WAIT de l'objet Application. Elle génère
chez moi un msg d'erreur et je n'ai trouvé aucune documentation à son sujet.
Est-ce une nouveauté d'ACCESS 2003? Je suis sous 2002.
AE

"John Fuss" a écrit dans le message de
news:brsima$5bc$
J'ai regardé vite fait, le MsgBox ne fait qu'afficher un msg message
pardon)

donc ne devrait pas poser de pbl (problème encore pardon). Mais peut-être
que ce message permet au fichier 'C:listeréseau.txt' de se créer. Tu peux
donc utiliser des doEvents pour redonner la main au système (hésite pas à
en

mettre plusieurs voire même dans une boucle) ou alors essayer un
Application.Wait TimeSerial(hour(now), minute(now), seconde(now)+4) pour
attendre 4 secondes.

John

"Alain (74)" a écrit dans le message de
news:
Bonjour à tous,
Ma question est à la fin du message...

Pour lister les ordinateurs connectés sur un réseau peer to peer le code
suivant est utilisé dans un formulaire possédant un bouton nommé
"cmdCréeFichier":

***Clic sur le bouton cmdCréeFichier
Private Sub cmdCréeFichier_Click()
On Error Resume Next
Dim i As Integer
Kill "C:listeréseau.txt" 'Supprime le fichier s'il existe
Dim k As String
If Left(GetWinVersion(), 1) = "4" Then
'Sous Windows 98
k = "C:command.com /C NET VIEW >c:listeréseau.txt"
Else
'Sous Win XP
k = "C:windowssystem32command.com /C NET VIEW
c:listeréseau.txt"
End If

'DoEvents
Shell k, vbHide
MsgBox "La liste des ordinateurs du réseau a été enregistrée dans le
fichier listeréseau.txt situé dans le répertoire C:"
LitFichier 'Appel à la fonction "LitFichier"
End Sub
****************************
Public Function LitFichier()
Dim Contenu As String
Dim ContenuFichier
DoEvents
Open "c:listeréseau.txt" For Input As #1
Do While Not EOF(1) 'Boucle
Line Input #1, ContenuFichier 'Lecture de la ligne
If Trim(ContenuFichier) <> "" Then
If Left(Trim(ContenuFichier), 2) = "" Then
ContenuFichier = Trim(Mid(ContenuFichier, 3,
InStr(ContenuFichier, Chr(32))))
If Trim(Contenu) <> "" Then
Contenu = Contenu & Chr(13) & ContenuFichier
Else
Contenu = ContenuFichier
End If
End If
End If
Loop
Close #1
DoEvents
MsgBox "Les ordinateurs du réseau sont les suivants:" & vbCrLf &
Contenu

End Function
*******************************
NOTA:
Un module global contient le code suivant permettant de déterminer la
version Windows avec la fonction GetWinVersion (On considère ici que
l'on


est en 98 ou en XP)

Declare Function GetVersion Lib "Kernel32" () As Long
_____________________________________________
Function GetWinVersion()
Dim ver As Long, WinVer As Long, DosVer As Long
Dim WindowsVersion As String, DosVersion As String

ver = GetVersion()

WinVer = ver And &HFFF&
GetWinVersion = Format((WinVer Mod 256) + ((WinVer 256) / 100),
"Fixed")
End Function
_____________________________________________

QUESTION:
On obtient un résultat lorsque la ligne suivante est présente dans le
code


"sur clic" du bouton cmdCréeFichier.

MsgBox "La liste des ordinateurs du réseau a été créée." & vbCrLf & "Le
fichier listeréseau.txt a été créé dans le répertoire C:"

Si on neutralise cette ligne en la mettant en commentaire il n'y a plus
de


résultat.
Quelqu'un connaît-il l'astuce pour éviter la ligne MsgBox?

Je peux adresser le fichier exemple à ceux qui sont intéressés.

Merci pour toutes vos suggestions

AE













Avatar
3stone
Salut,

"Alain (74)"
A première vue il semble que ce "défaut" est lié à la fonction shell qui est
utilisée... mais je n'ai pas trouvé de documentation suffisante sur le
sujet.



Ce n'est pas un "défaut"...
Shell n'attend pas... c'est tout ;-)

Regarde et utilise ceci : http://www.mvps.org/accessfr/apis/api0004.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------

Avatar
Alain \(74\)
Voilà la solution... Il fallait la trouver. M Terry Kreft fait de bien
belles choses depuis longtemps!
Merci.
AE

"3stone" a écrit dans le message de
news:
Salut,

"Alain (74)"
A première vue il semble que ce "défaut" est lié à la fonction shell qui
est


utilisée... mais je n'ai pas trouvé de documentation suffisante sur le
sujet.



Ce n'est pas un "défaut"...
Shell n'attend pas... c'est tout ;-)

Regarde et utilise ceci : http://www.mvps.org/accessfr/apis/api0004.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/charte.htm
--------------------------------------







Avatar
John Fuss
Effectivement c'est sous Excel le Application.Wait.....

John

"Alain (74)" a écrit dans le message de
news:
Bonjour,
Merci pour cet avis . Je ne l'avais pas précisé mais j'ai essayé tout ça
en

vain (DoEvents, Attente etc...) Rien n'y fait.
Jusqu'à trouver l'astuce, je n'ai rien trouvé d'autre que faire appel à un
Msgbox pour voir le retour d'un résultat.
A première vue il semble que ce "défaut" est lié à la fonction shell qui
est

utilisée... mais je n'ai pas trouvé de documentation suffisante sur le
sujet.

PS: Je ne connais pas la méthode WAIT de l'objet Application. Elle génère
chez moi un msg d'erreur et je n'ai trouvé aucune documentation à son
sujet.

Est-ce une nouveauté d'ACCESS 2003? Je suis sous 2002.
AE

"John Fuss" a écrit dans le message de
news:brsima$5bc$
J'ai regardé vite fait, le MsgBox ne fait qu'afficher un msg message
pardon)

donc ne devrait pas poser de pbl (problème encore pardon). Mais
peut-être


que ce message permet au fichier 'C:listeréseau.txt' de se créer. Tu
peux


donc utiliser des doEvents pour redonner la main au système (hésite pas
à


en
mettre plusieurs voire même dans une boucle) ou alors essayer un
Application.Wait TimeSerial(hour(now), minute(now), seconde(now)+4) pour
attendre 4 secondes.

John

"Alain (74)" a écrit dans le message de
news:
Bonjour à tous,
Ma question est à la fin du message...

Pour lister les ordinateurs connectés sur un réseau peer to peer le
code



suivant est utilisé dans un formulaire possédant un bouton nommé
"cmdCréeFichier":

***Clic sur le bouton cmdCréeFichier
Private Sub cmdCréeFichier_Click()
On Error Resume Next
Dim i As Integer
Kill "C:listeréseau.txt" 'Supprime le fichier s'il existe
Dim k As String
If Left(GetWinVersion(), 1) = "4" Then
'Sous Windows 98
k = "C:command.com /C NET VIEW >c:listeréseau.txt"
Else
'Sous Win XP
k = "C:windowssystem32command.com /C NET VIEW
c:listeréseau.txt"
End If

'DoEvents
Shell k, vbHide
MsgBox "La liste des ordinateurs du réseau a été enregistrée dans
le



fichier listeréseau.txt situé dans le répertoire C:"
LitFichier 'Appel à la fonction "LitFichier"
End Sub
****************************
Public Function LitFichier()
Dim Contenu As String
Dim ContenuFichier
DoEvents
Open "c:listeréseau.txt" For Input As #1
Do While Not EOF(1) 'Boucle
Line Input #1, ContenuFichier 'Lecture de la ligne
If Trim(ContenuFichier) <> "" Then
If Left(Trim(ContenuFichier), 2) = "" Then
ContenuFichier = Trim(Mid(ContenuFichier, 3,
InStr(ContenuFichier, Chr(32))))
If Trim(Contenu) <> "" Then
Contenu = Contenu & Chr(13) & ContenuFichier
Else
Contenu = ContenuFichier
End If
End If
End If
Loop
Close #1
DoEvents
MsgBox "Les ordinateurs du réseau sont les suivants:" & vbCrLf &
Contenu

End Function
*******************************
NOTA:
Un module global contient le code suivant permettant de déterminer la
version Windows avec la fonction GetWinVersion (On considère ici que
l'on


est en 98 ou en XP)

Declare Function GetVersion Lib "Kernel32" () As Long
_____________________________________________
Function GetWinVersion()
Dim ver As Long, WinVer As Long, DosVer As Long
Dim WindowsVersion As String, DosVersion As String

ver = GetVersion()

WinVer = ver And &HFFF&
GetWinVersion = Format((WinVer Mod 256) + ((WinVer 256) /
100),



"Fixed")
End Function
_____________________________________________

QUESTION:
On obtient un résultat lorsque la ligne suivante est présente dans le
code


"sur clic" du bouton cmdCréeFichier.

MsgBox "La liste des ordinateurs du réseau a été créée." & vbCrLf &
"Le



fichier listeréseau.txt a été créé dans le répertoire C:"

Si on neutralise cette ligne en la mettant en commentaire il n'y a
plus



de
résultat.
Quelqu'un connaît-il l'astuce pour éviter la ligne MsgBox?

Je peux adresser le fichier exemple à ceux qui sont intéressés.

Merci pour toutes vos suggestions

AE