newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013
-
20 févr. 2009 à 22:02
newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013
-
23 févr. 2009 à 20:26
bonjour,
j'ai besoin de programmer une progress bar afin qu'elle se remplit au fur et à mesure que le traitement que je fais. aidez moi SVP et merci d'avance
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 22 févr. 2009 à 21:42
Oui,
c'est bien ce que j'avais deviné ! une barre de progression qui montre l'avancement de la tâche de suppression des caractères répétés !
Te rends-tu bien compte de ce que cela veut dire ?
Pour que ta barre de progression ne soit pas juste un "enjoliveur" inutile et chèrement inutile, il faut que sa valeur maximum soit déterminée à l'avance...
On ne voit pas comment tu t'y es pris pour supprimer tes caractères et il est alors bien difficile de t'aider.
Juste une idée (mais nous ne connaissons pas ton code) ... !!
Si tu "avances" caractère par caractère et que tu utilise instr en boucle, la valeur minimum est 0 et la valeur maximum est tout simplement la longueur de la chaîne traitée ( Len(la_chaine) ) et tu fais avancer d'une unité à chaque avancement d'un caractère dans ta chaîne.
Mais (une autre fois) : cela dépend considérablement de ce que tu as mis en oeuvre pour supprimer les caractères répétés, bien évidemment !
J'insiste maintenant : le traitement que tu as à faire (ta suppression des caractères répétés) est très rapide (à moins que la chaîne à traiter soit énorme).
Ta barre de progression et le seul affichage de sa modification de valeur seront plus gourmands que le traitement lui-même !!!!
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 20 févr. 2009 à 22:12
Bonsoir,
Celà va bien évidemment dépendre du type de traitement en cause ... et tu ne nous as pas dit lequel !!!
Il est (pour faire avancer une barre de propgression) absolument indispensable de connaître dans le détail le/les type(s) d'opération(s) qu'effectue ton traitement.
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 20 févr. 2009 à 22:27
En d'autres termes (et tu vas vite comprendre) ...
Si tu as 40 sacs de ciment à transporter du point A au point B, il est facile de déterminer que tu as progressé de 20 % lorsque tu as déposé ton 8ème sac au point B
Mais si tu dois travailler jusqu'à l'épuisement, il est impossible (ne connaissant pas le point d'épuisement) de déterminer si, au bout de 4 heures de travail, tu as progressé de 20 % ou de 40 % (pourcentage de quoi, puisque tu ne sais pas à l'avance quel est le point d'épuisement)
En règle générale : une barre de progression n'est vraiment uitile que pour des traitements qui sont à la fois long et quantifiables à l'avance. Dans les autres casd, un siomple message d'attente ferait l'affaire, puisqu'il n'apporterait rien de moins à l'utilisateur en ce qui concerne un pourcentage de progression (donc ce qu'il reste encore à accomplir !). Pire : une barre de progression induit des traitements et calculs qui, forcément, ralentissent eux-même l'exécution.
<!--[if !supportLists]-->·
<!--[endif]-->Ajoutez au module de la feuille frmFilter une
fonction publique (Suupprimerepet) qui
permet de supprimer tous les caractères répétés de la chaîne de caractères saisie
dans la zone de texte txtBefore. Le
résultat doit être affiché dans la zone txtAfter.
<!--[if !supportLists]-->·
<!--[endif]-->La fonction Supprimerepet doit être appelée
lorsque l'utilisateur clique sur le bouton cmdFilter. Elle reçoit comme arguments
la chaîne initiale à filtrer ainsi qu'un booléen correspondant à la valeur de
la case à cocher ccase.
<!--[if !supportLists]-->·
<!--[endif]-->Si la valeur de ccase est "vrai" alors
la fonction Supprimerepet ne supprime
que les caractères de même casse.
Remarque
:
Pour
rechercher l'occurrence d'une chaine S1 dans une autre chaine S2 il fau
utiliser la fonction Instr dont la syntaxe est la suivante:
InStr([start, ]s1, s2[,
compare])
pour ce qui est de la fonction supprimerepet je l'ai déjà faite tout seul
reste juste comment faire pour remplir la barre de progression
Vous n’avez pas trouvé la réponse que vous recherchez ?
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 22 févr. 2009 à 08:36
Bonjour,
Lorsque tu joins un fichier (ou une image) présent sur ta machine, tu es seul à y accéder.
Si tu veux que d'autres y accèdent, il te faut déposer le fichier sur unb site de "dépot" et joindre l'URL correspondante.
Nous ne voyons donc pas ta pièce jointe, dont tout ce que nous savons est qu'elle est un fichier jpg dont le chemin, sur ton disque, est : [file:///C:/DOCUME%7E1/selim/LOCALS%7E1/Temp/msohtml1/01/clip_image002.jpg file:///C:/DOCUME%7E1/selim/LOCALS%7E1/Temp/msohtml1/01/clip_image002.jpg]
La lecture de ton ennoncé ne met par ailleurs pas en exergue la moindre barre de progression et nous ne savons donc pas non plus quel "avancement" elle est supposée constater.
S'il s'agit simplement de la progression de la tâche de suppression des caractères répétés, le seul affichagede ta barre de progression nécessitera beaucoup plus de temps que le traitement lui-même !!!
newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013 22 févr. 2009 à 17:25
bonjour,
je suis désolé mais j'ai pas su déposer le fichier sur un site de "dépot"
alors j'ai chargé l'image sur rapidshare et voici le lien correspondant:
http://rapidshare.com/files/201213469/Sans_titre.JPG.html j'esper qu'avec ça vous comprendrez plus le sens de mon exercice
merci de toute façon
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 22 févr. 2009 à 22:51
Juste pour que tu y voies bien clair :
Je viens de faire moi-même ton exercice sur une chaîne de 12800 caractères et de chronométrer le traitement :
un peu moins de 1/3 de seconde sur ma vieille bécane !!! (tu verrais comment une barre de progression sur cette durée ? Comme une espèce d'éclair ?)
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 22 févr. 2009 à 22:58
Voilà, je viens maintenant d'affubler le tout d'une barre de progression :
Résultat des courses ? plus de 3 fois le temps (1,04 secondes)....pour la même chaine et le même résultat final
Ah ! Elle est belle, cette barre inutilement ralentissante !!!
newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013 23 févr. 2009 à 09:31
bonjour,
je suis totalement convaincu de ce que tu dis mais le but c'était juste de savoir comment programmer une barre de progression
une petite question hors context vous avez fait comment pour le truc de la case à cocher "sensible à la casse"?
newgame
Messages postés52Date d'inscriptionlundi 2 février 2009StatutMembreDernière intervention24 juillet 2013 23 févr. 2009 à 09:39
j'ai faillie oublié
voici mon code:
Public Function filtre(ch1 As String) As String
Dim i As Integer
Dim x As String
Dim ch2 As String
ch2 = Mid(ch1, 1, 1)
For i = 2 To Len(ch1)
x = Mid(ch1, i, 1)
If InStr(ch2, x) = 0 Then
ch2 = ch2 + x
End If
Next
filtre = ch2
End Function
NB: il ne prend pas en compte le cas majuscule c'est pourquoi j'ai posé une question à propos de ça
j'attends votre réponse
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 23 févr. 2009 à 11:23
Je n'ai pas codé comme toi...
Mais je vais le faire avec ton code :
Tu passes un paramètre comment : une booléenne True (si tu veux ignorer la casse) ou False (siu tu veux la respecter)
Public Function filtre(ch1 As String, comment As Boolean) As String
'depart = Timer
Dim i As Integer
Dim x As String
Dim ch2 As String
ch2 = Mid(ch1, 1, 1)
For i = 2 To Len(ch1)
x = Mid(ch1, i, 1)
If comment Then
If InStr(ch2, LCase(x)) + InStr(ch2, UCase(x)) = 0 Then
ch2 = ch2 + x
End If
Else
If InStr(ch2, x) = 0 Then
ch2 = ch2 + x
End If
End If
Next
'MsgBox Timer - depart
filtre = ch2
End Function
Voilà tout !
J'ai maintenant faiot exprés de le présenter ainsi (plus facile à comprendre). Tu pourras bien évidemment simplifier
jmf0
Messages postés1566Date d'inscriptionmardi 26 décembre 2000StatutMembreDernière intervention 5 avril 20138 23 févr. 2009 à 11:29
Tu peux par ailleurs (plus simplement) utiliser l'argument optionnel compare de Instr...
C'est à mon avis ce que ton prof attend de toi.
Et dans ce cas, plus besoin de tous ces ifs ...
Tu donnes simplement à l'argument compare une valeur en fopnction de celle de comment
et tu appliques cette valeur dans instr.