Placement du DoEvents

Le
LE TROLL
Bonjour,

Quelqu'un peut-il me dire avec certitude, où
se met le DoEvents, par rapport à une action
bloquante, avant, après, les deux ???

DoEvents
bloc 1 certain temps

OU

bloc 1 certain temps
DoEvents

OU

DoEvents
bloc 1 certain temps
DoEvents

???

--
Merci beaucoup, au revoir et à bientôt :o)

Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
parci
Le #15374351
On Thu, 31 Jan 2008 12:34:34 +0100, "LE TROLL" wrote:

Quelqu'un peut-il me dire avec certitude, où
se met le DoEvents, par rapport à une action
bloquante, avant, après, les deux ???



Au milieu.

L'aide dit :

Cet exemple utilise la fonction DoEvents afin que l'exécution soit
cédée au système d'exploitation une fois toutes les 1000 répétitions
de la boucle. La fonction DoEvents renvoie le nombre de feuilles
Visual Basic ouvertes uniquement si l'application hôte est Visual
Basic.

' Crée une variable pour maintenir le nombre de
' feuilles Visual Basic chargées et visibles.
Dim I, OpenForms
For I = 1 To 150000 ' Lance la boucle.
If I Mod 1000 = 0 Then ' Lorsque la boucle s'est
' répétée 1000 fois.
OpenForms = DoEvents ' Cède le contrôle au
' système d'exploitation.
End If
Next I ' Incrémente le compteur de boucle.



En pratique, c'est utile pour traiter les messages en attente venant,
par exemple, de l'interface lorsqu'un traitement long est en cours et
qu'il peut être justement interrompu depuis l'interface.


Exemple avec 2 boutons sur un formulaire :

Private m_bStop As Boolean

Private Sub TraitementLong()

Dim i As Long

Do While i < 2 ^ 25
i = i + 1
DoEvents
If m_bStop Then
MsgBox "stop : " & i
Exit Sub
End If
Loop

MsgBox i

End Sub

Private Sub Command1_Click()
m_bStop = True
End Sub

Private Sub Command2_Click()
m_bStop = False
TraitementLong
End Sub

Private Sub Form_Unload(Cancel As Integer)
m_bStop = True
End Sub

Après click sur Command2, s'il n'y avait pas de DoEvents dans la
boucle, le programme ne répondrait pas avant la fin de la procédure
"TraitementLong". Tu l'enlever pour voir la différence.
andre.araste
Le #15374081
Bonjour

DoEvents repasse la main au système et évite que le caractère procédural et
linéaire d'un programme ne passe par dessus une procédure en oubliant de la
traiter.

Parfois la méthode Refresh peut suppléer quand il s'agit d'un simple
problème d'affichage.
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

"LE TROLL" %23ND%23C1$
Bonjour,

Quelqu'un peut-il me dire avec certitude, où
se met le DoEvents, par rapport à une action
bloquante, avant, après, les deux ???

DoEvents
bloc 1 certain temps...

OU

bloc 1 certain temps...
DoEvents

OU

DoEvents
bloc 1 certain temps...
DoEvents

???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------




LE TROLL
Le #15374071
Bonjour, merci, mais ça ne me dit pas si c'est AV,
AP ou les 2 ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" dans le message de news:
47a46412$0$869$
| Bonjour
|
| DoEvents repasse la main au système et évite que
le caractère procédural et
| linéaire d'un programme ne passe par dessus une
procédure en oubliant de la
| traiter.
|
| Parfois la méthode Refresh peut suppléer quand
il s'agit d'un simple
| problème d'affichage.
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
| "LE TROLL" message de news:
| %23ND%23C1$
| > Bonjour,
| >
| > Quelqu'un peut-il me dire avec certitude,

| > se met le DoEvents, par rapport à une action
| > bloquante, avant, après, les deux ???
| >
| > DoEvents
| > bloc 1 certain temps...
| >
| > OU
| >
| > bloc 1 certain temps...
| > DoEvents
| >
| > OU
| >
| > DoEvents
| > bloc 1 certain temps...
| > DoEvents
| >
| > ???
| >
| > --
| > Merci beaucoup, au revoir et à bientôt :o)
| > ------
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
> ------------------------------------------------------------------------------------
| >
| >
|
|
LE TROLL
Le #15374061
Bonjour, merci, mais ça ne me dit pas si c'est AV,
AP ou les 2 ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"parci" de news:

| On Thu, 31 Jan 2008 12:34:34 +0100, "LE TROLL"
| wrote:
|
| > Quelqu'un peut-il me dire avec certitude,

| >se met le DoEvents, par rapport à une action
| >bloquante, avant, après, les deux ???
|
| Au milieu.
|
| L'aide dit :
|
| Cet exemple utilise la fonction DoEvents afin
que l'exécution soit
| cédée au système d'exploitation une fois toutes
les 1000 répétitions
| de la boucle. La fonction DoEvents renvoie le
nombre de feuilles
| Visual Basic ouvertes uniquement si
l'application hôte est Visual
| Basic.
|
| ' Crée une variable pour maintenir le nombre de
| ' feuilles Visual Basic chargées et visibles.
| Dim I, OpenForms
| For I = 1 To 150000 ' Lance la boucle.
| If I Mod 1000 = 0 Then ' Lorsque la boucle
s'est
| ' répétée 1000 fois.
| OpenForms = DoEvents ' Cède le contrôle
au
| ' système d'exploitation.
| End If
| Next I ' Incrémente le compteur de boucle.
|
|
|
| En pratique, c'est utile pour traiter les
messages en attente venant,
| par exemple, de l'interface lorsqu'un traitement
long est en cours et
| qu'il peut être justement interrompu depuis
l'interface.
|
|
| Exemple avec 2 boutons sur un formulaire :
|
| Private m_bStop As Boolean
|
| Private Sub TraitementLong()
|
| Dim i As Long
|
| Do While i < 2 ^ 25
| i = i + 1
| DoEvents
| If m_bStop Then
| MsgBox "stop : " & i
| Exit Sub
| End If
| Loop
|
| MsgBox i
|
| End Sub
|
| Private Sub Command1_Click()
| m_bStop = True
| End Sub
|
| Private Sub Command2_Click()
| m_bStop = False
| TraitementLong
| End Sub
|
| Private Sub Form_Unload(Cancel As Integer)
| m_bStop = True
| End Sub
|
| Après click sur Command2, s'il n'y avait pas de
DoEvents dans la
| boucle, le programme ne répondrait pas avant la
fin de la procédure
| "TraitementLong". Tu l'enlever pour voir la
différence.
|
parci
Le #15374051
On Sat, 2 Feb 2008 14:12:38 +0100, "LE TROLL" wrote:

Bonjour, merci, mais ça ne me dit pas si c'est AV,
AP ou les 2 ???



Ce n'est ni avant, ni après, ni les deux.
LE TROLL
Le #15374041
Ah...

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"parci" de news:

| On Sat, 2 Feb 2008 14:12:38 +0100, "LE TROLL"
| wrote:
|
| >Bonjour, merci, mais ça ne me dit pas si c'est
AV,
| >AP ou les 2 ???
|
| Ce n'est ni avant, ni après, ni les deux.
|
andre.araste
Le #15374031
Bonjour

Avant ou Après ?

Dans le cas d'un affichage simple, ça n'a pas vraiment d'importance. Ainsi
dans cette démo, on active un compteur qui incrémente un nombre tant qu'un
bouton de la souris est appuyé :

La feuille comporte un Label et un bouton.

' Utilisation de DoEvents
Option Explicit
Dim EtatSouris As Boolean
'
Private Sub Command1_MouseDown(Button As Integer, Shift As Integer, X As
Single, Y As Single)
EtatSouris = True
While EtatSouris
DoEvents ' Mettez un REM pour voir la différence
Label1.Caption = CStr(Val(Label1.Caption) + 1)
Wend
End Sub
'
Private Sub Command1_MouseUp(Button As Integer, Shift As Integer, X As
Single, Y As Single)
EtatSouris = False
End Sub

On pourrait obtenir une démo similaire avec des couleurs alternatives dans
un contrôle Shape.
--
Bonne réception.

http://perso.orange.fr/andre.araste/
Membre du Club Win's: http://www.clubwins.org
Avertissement: Je ne vends rien.

"LE TROLL"
Bonjour, merci, mais ça ne me dit pas si c'est AV,
AP ou les 2 ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" dans le message de news:
47a46412$0$869$
| Bonjour
|
| DoEvents repasse la main au système et évite que
le caractère procédural et
| linéaire d'un programme ne passe par dessus une
procédure en oubliant de la
| traiter.
|
| Parfois la méthode Refresh peut suppléer quand
il s'agit d'un simple
| problème d'affichage.
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
| "LE TROLL" message de news:
| %23ND%23C1$
| > Bonjour,
| >
| > Quelqu'un peut-il me dire avec certitude,

| > se met le DoEvents, par rapport à une action
| > bloquante, avant, après, les deux ???
| >
| > DoEvents
| > bloc 1 certain temps...
| >
| > OU
| >
| > bloc 1 certain temps...
| > DoEvents
| >
| > OU
| >
| > DoEvents
| > bloc 1 certain temps...
| > DoEvents
| >
| > ???
| >
| > --
| > Merci beaucoup, au revoir et à bientôt :o)
| > ------
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
> ------------------------------------------------------------------------------------
| >
| >
|
|




LE TROLL
Le #15374011
Bonjour André,

Le problème, est que, jusqu'à maintenant je
suis tombé sur des exemples non significatifs,
dans le genre:

for i= 1 to 1000
DoEvents
instruction rapide...
next i

Or, je suis en train d'utiliser des fichiers
son, qui, pour la plupart, son synchronisés, et
bloque 10, 15 secondes le déroulement du
programme.
Il va sans dire, mais en l'écrivant, que le
DoEvents a son importance, quant à son
emplacement.

Dans le doute, j'en mets, un avant, et un
après, mais j'ai tellement d'appel son, que ça
devient une foret de DoEvents, et d'un autre côté,
je me demande, si je ne perds pas du temps en en
disposant un, de chaque côté de l'instruction
(appel à l'API) ?

Même en raisonnant, ça n'apporte aucune réponse,
car on manque d'informations.
Par exemple, si le doevents avant l'instruction,
rend la main au programme, puis revient en
séquence afin d'exécuter la suite, donc la fameuse
instruction bloquante de lecture du son (voulu
ainsi):

- Est-ce que le DoEvents, a sa propre boucle,
timer, transparent, qui fait qu'il va sans cesse,
de l'instruction son au buffer de clavier (ce qui
fait perdre du temps, mais maintien l'application
active).

- Ou, est-ce que le doEvents avant la lecture du
son, ne va qu'une fois voir le clavier (ou autre),
puis ensuite, passe la main à la lecture du son ?

- Au retour, idem, j'en mets un, car derrière,
d'autres instructions vont ensuite être lues,
alors ça permet (peut être), de dire au programme
"le déroulement n'est pas terminé", ceci avant
d'avoir l'affichage de "non réponse"?

Mon problème est double, ne pas perdre de
temps inutile, mais, néanmoins, pouvoir donner à
l'utilisateur, la possibilité d'arrêter le
programme, et en dernier, d'empêcher que le
programme n'affiche "ce programme ne réponds
plus", ce qui est assez perturbant pour
l'utilisateur, car faux; en effet, comme chacun a
pu le constater, tout ordre ne s'achevant pas sur
une instruction de fin (end, exit), déclenche un
timer ipso facto, qui arbitrairement, et de façon
a priori non maîtrisable, va décréter qu'au bout
de x secondes sans réponse, le programme va
afficher, toujours arbitrairement "ce programme ne
répond plus", tandis qu'en vérité, le programme
peu exécuter une instruction synchronisée, donc
bloquante (c'est mon cas), mais il n'est pas
planté pour autant, soit par exemple un accès à
Internet dont la liaison tarde à se faire, mais se
fait en définitive, hors délais impartis
arbitrairement par le programme (VB, en fait).

La solution à ce problème, étant, soit de
découper de tout petits fichiers son, de facto, on
rend souvent la main au programme, mais c'est plus
long; soit d'envoyer d'autres façons, des messages
de présences au programme, message qui ne sont
sans doute pas tous opportuns, du genre: (Me,
SetFocus, Show, DoEvents)...

On comprend désormais l'utilité de ma
question, quant à emplacement du DoEvents, et de
préférence, la "justification" de l'emplacement
éventuel qu'on m'indiquera.

Et j'ai des dizaines de fichiers son qui
bloquent le programme tout au long de son
utilisation alors je voudrais rationaliser.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"andre.araste" dans le message de news:
47a48a3c$0$871$
| Bonjour
|
| Avant ou Après ?
|
| Dans le cas d'un affichage simple, ça n'a pas
vraiment d'importance. Ainsi
| dans cette démo, on active un compteur qui
incrémente un nombre tant qu'un
| bouton de la souris est appuyé :
|
| La feuille comporte un Label et un bouton.
|
| ' Utilisation de DoEvents
| Option Explicit
| Dim EtatSouris As Boolean
| '
| Private Sub Command1_MouseDown(Button As
Integer, Shift As Integer, X As
| Single, Y As Single)
| EtatSouris = True
| While EtatSouris
| DoEvents ' Mettez un REM pour voir la
différence
| Label1.Caption = CStr(Val(Label1.Caption) +
1)
| Wend
| End Sub
| '
| Private Sub Command1_MouseUp(Button As Integer,
Shift As Integer, X As
| Single, Y As Single)
| EtatSouris = False
| End Sub
|
| On pourrait obtenir une démo similaire avec des
couleurs alternatives dans
| un contrôle Shape.
| --
| Bonne réception.
|
| http://perso.orange.fr/andre.araste/
| Membre du Club Win's: http://www.clubwins.org
| Avertissement: Je ne vends rien.
|
| "LE TROLL" message de news:
|
| > Bonjour, merci, mais ça ne me dit pas si c'est
AV,
| > AP ou les 2 ???
| >
| > --
| > Merci beaucoup, au revoir et à bientôt :o)
| > ------
| > Romans, logiciels, email, site personnel
| > http://irolog.free.fr/joe.htm
|
> ------------------------------------------------------------------------------------
| > "andre.araste" écrit
| > dans le message de news:
| > 47a46412$0$869$
| > | Bonjour
| > |
| > | DoEvents repasse la main au système et évite
que
| > le caractère procédural et
| > | linéaire d'un programme ne passe par dessus
une
| > procédure en oubliant de la
| > | traiter.
| > |
| > | Parfois la méthode Refresh peut suppléer
quand
| > il s'agit d'un simple
| > | problème d'affichage.
| > | --
| > | Bonne réception.
| > |
| > | http://perso.orange.fr/andre.araste/
| > | Membre du Club Win's:
http://www.clubwins.org
| > | Avertissement: Je ne vends rien.
| > |
| > | "LE TROLL" le
| > message de news:
| > | %23ND%23C1$
| > | > Bonjour,
| > | >
| > | > Quelqu'un peut-il me dire avec
certitude,
| > où
| > | > se met le DoEvents, par rapport à une
action
| > | > bloquante, avant, après, les deux ???
| > | >
| > | > DoEvents
| > | > bloc 1 certain temps...
| > | >
| > | > OU
| > | >
| > | > bloc 1 certain temps...
| > | > DoEvents
| > | >
| > | > OU
| > | >
| > | > DoEvents
| > | > bloc 1 certain temps...
| > | > DoEvents
| > | >
| > | > ???
| > | >
| > | > --
| > | > Merci beaucoup, au revoir et à bientôt :o)
| > | > ------
| > | > Romans, logiciels, email, site personnel
| > | > http://irolog.free.fr/joe.htm
| > |
| >
> ------------------------------------------------------------------------------------
| > | >
| > | >
| > |
| > |
| >
| >
|
|
LE TROLL
Le #15374001
Ni avant, ni après, ni les deux, certes, c'est
éloquent, mais c'est quoi la quatrième solution
???

Le problème, est que, jusqu'à maintenant je
suis tombé sur des exemples non significatifs,
dans le genre:

for i= 1 to 1000
DoEvents
instruction rapide...
next i

Or, je suis en train d'utiliser des fichiers
son, qui, pour la plupart, son synchronisés, et
bloque 10, 15 secondes le déroulement du
programme.
Il va sans dire, mais en l'écrivant, que le
DoEvents a son importance, quant à son
emplacement.

Dans le doute, j'en mets, un avant, et un
après, mais j'ai tellement d'appel son, que ça
devient une foret de DoEvents, et d'un autre côté,
je me demande, si je ne perds pas du temps en en
disposant un, de chaque côté de l'instruction
(appel à l'API) ?

Même en raisonnant, ça n'apporte aucune réponse,
car on manque d'informations.
Par exemple, si le doevents avant l'instruction,
rend la main au programme, puis revient en
séquence afin d'exécuter la suite, donc la fameuse
instruction bloquante de lecture du son (voulu
ainsi):

- Est-ce que le DoEvents, a sa propre boucle,
timer, transparent, qui fait qu'il va sans cesse,
de l'instruction son au buffer de clavier (ce qui
fait perdre du temps, mais maintien l'application
active).

- Ou, est-ce que le doEvents avant la lecture du
son, ne va qu'une fois voir le clavier (ou autre),
puis ensuite, passe la main à la lecture du son ?

- Au retour, idem, j'en mets un, car derrière,
d'autres instructions vont ensuite être lues,
alors ça permet (peut être), de dire au programme
"le déroulement n'est pas terminé", ceci avant
d'avoir l'affichage de "non réponse"?

Mon problème est double, ne pas perdre de
temps inutile, mais, néanmoins, pouvoir donner à
l'utilisateur, la possibilité d'arrêter le
programme, et en dernier, d'empêcher que le
programme n'affiche "ce programme ne réponds
plus", ce qui est assez perturbant pour
l'utilisateur, car faux; en effet, comme chacun a
pu le constater, tout ordre ne s'achevant pas sur
une instruction de fin (end, exit), déclenche un
timer ipso facto, qui arbitrairement, et de façon
a priori non maîtrisable, va décréter qu'au bout
de x secondes sans réponse, le programme va
afficher, toujours arbitrairement "ce programme ne
répond plus", tandis qu'en vérité, le programme
peu exécuter une instruction synchronisée, donc
bloquante (c'est mon cas), mais il n'est pas
planté pour autant, soit par exemple un accès à
Internet dont la liaison tarde à se faire, mais se
fait en définitive, hors délais impartis
arbitrairement par le programme (VB, en fait).

La solution à ce problème, étant, soit de
découper de tout petits fichiers son, de facto, on
rend souvent la main au programme, mais c'est plus
long; soit d'envoyer d'autres façons, des messages
de présences au programme, message qui ne sont
sans doute pas tous opportuns, du genre: (Me,
SetFocus, Show, DoEvents)...

On comprend désormais l'utilité de ma
question, quant à emplacement du DoEvents, et de
préférence, la "justification" de l'emplacement
éventuel qu'on m'indiquera.

Et j'ai des dizaines de fichiers son qui
bloquent le programme tout au long de son
utilisation alors je voudrais rationaliser.

--
Merci beaucoup, au revoir et à bientôt :o)
------
Romans, logiciels, email, site personnel
http://irolog.free.fr/joe.htm
------------------------------------------------------------------------------------
"parci" de news:

| On Sat, 2 Feb 2008 14:12:38 +0100, "LE TROLL"
| wrote:
|
| >Bonjour, merci, mais ça ne me dit pas si c'est
AV,
| >AP ou les 2 ???
|
| Ce n'est ni avant, ni après, ni les deux.
|
Jean-marc
Le #15373991
LE TROLL wrote:
Ni avant, ni après, ni les deux, certes, c'est
éloquent, mais c'est quoi la quatrième solution
???



La réponse est effectivement :
NI AVANT, NI après, NI les deux.

La réponse est : PENDANT.

Or dans ton cas (jouer un son etc.) tu ne peux
pas utiliser le PENDANT.

C'est bien pour ça que DoEvents ne résoudra rien
dans ton cas.

Doevents n'est pas magique : il donne la main au système,
puis l'exécution reprend son cours. Si a ce moment on lance
un traitement initerruptible et long, le Doevents ne fait plus
rien: il s'est exécuté, et c'est tout.

Dans ton cas, mettre des DoEvents est tout simplement inutile,
que se soit avant ou après.

La solution est bien sur prévue : jouer les sons
en mode Asynchrone. Mais alors ils ne sont pas interruptibles
(et de surcroit désynchronisés, du coup ...).

Il n'y a pas de solutions simples à ton problème.

Les seules envisageables (dans ton cas) :
- des sons courts (en synchrone)
- des longs, mais alors asynchrones.

Si tu tiens absolument à faire des longs, tu peux faire une bidouille
bien crade mais qui fonctionnera :

Imaginons une feuille avec 2 boutons de commande.
Quand on appuie sur Command1, ca joue un son long.
Pendant ce temps, tu ne veux pas bloquer le programme
(donc le son est lancé en asynchrone), MAIS tu ne veux pas
que l'on puisse appuyer sur Command2 (en fait qu'il soit
grisé).

La solution va consister à bloquer Command2 pendant toute la
durée nécessaire à jouer le son.
On va supposer que tu connais le temps (disons 5 secondes).

Dans command1, avant de lancer le son, il suffit de mettre
Enbaled de COmmand2 à Faux, puis de lancer un Timer initialisé à 5
secondes.
Quand le timer se déclenchera, on remet Command2 Enabled, et on désactive
le timer. Et le tour est joué.

Voici un code complet, il faut une feuille, 2 boutons de commande
et un timer :



Option Explicit
Private Const SND_ASYNC = &H1 'Joue le son en arrière-plan.
Private Const SND_FILENAME = &H20000 'Le son provient d'un fichier externe

Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal
lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long


Private Sub Command1_Click()

Dim fileSound As String
Dim tempo As Long

' parametres pour ce son en particulier
tempo = 5000 ' 5 secondes
fileSound = "c:windowsmediawindaVinciSysStart.wav"

' désactive les controles voulus
Command1.Enabled = False
Command2.Enabled = False

' Init et Démarre le timer
Timer1.Interval = tempo
Timer1.Enabled = True

' lance le son en asynchrone
PlaySound fileSound, ByVal 0&, SND_FILENAME Or SND_ASYNC

End Sub

Private Sub Timer1_Timer()

' Désactive le timer
Timer1.Enabled = False

' Autorise à nouveau les boutons
Command1.Enabled = True
Command2.Enabled = True
End Sub


C'est bien sur assez immonde, mais en codant le tout proprement
avec une fonction centralisée pour jouer les sons, en stockant
tout ça dans un joli tableau de structures avec les noms des
sons, le fichier qui va avec et la durée d'attente, tu dois
pouvoir faire un truc pas trop illisible.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Publicité
Poster une réponse
Anonyme