Programmer un barre de progression [Résolu]

newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 20 févr. 2009 à 22:02 - Dernière réponse : newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention
- 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
Afficher la suite 

13 réponses

Répondre au sujet
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 22 févr. 2009 à 21:42
+3
Utile
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 !!!!


 
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de jmf0
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 20 févr. 2009 à 22:12
0
Utile
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.
Commenter la réponse de jmf0
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 20 févr. 2009 à 22:27
0
Utile
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.
Commenter la réponse de jmf0
newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 21 févr. 2009 à 22:44
0
Utile
re
 Pour ne pas être long et de ne pas risquez de vous mal indiquer
voici l'énonce de l'exrcice tel qu'il est:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 11" /><meta name="Originator" content="Microsoft Word 11" /><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cselim%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><link rel="Edit-Time-Data" href="file:///C:%5CDOCUME%7E1%5Cselim%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_editdata.mso" /><!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
--></style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]--><!--[if gte vml 1]><v:shapetype id="_x0000_t75"
coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe"
filled="f" stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:300.75pt;
height:306pt'>
<v:imagedata src="file:///C:\DOCUME~1\selim\LOCALS~1\Temp\msohtml1\01\clip_image001.png"
o:title="tp2"/>
</v:shape><![endif]--><!--[if !vml]--><!--[endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><meta name="ProgId" content="Word.Document" /><meta name="Generator" content="Microsoft Word 11" /><meta name="Originator" content="Microsoft Word 11" /><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cselim%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]--><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
p
{mso-margin-top-alt:auto;
margin-right:0cm;
mso-margin-bottom-alt:auto;
margin-left:0cm;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
@page Section1
{size:612.0pt 792.0pt;
margin:70.85pt 70.85pt 70.85pt 70.85pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:2067684089;
mso-list-type:hybrid;
mso-list-template-ids:-507106302 905742148 67895299 67895301 67895297 67895299 67895301 67895297 67895299 67895301;}
@list l0:level1
{mso-level-number-format:bullet;
mso-level-text:;
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:1.0cm;
text-indent:-14.15pt;
font-family:Symbol;
color:windowtext;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->

<!--[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
Commenter la réponse de newgame
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 22 févr. 2009 à 08:36
0
Utile
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 !!!
Commenter la réponse de jmf0
newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 22 févr. 2009 à 17:25
0
Utile
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
Commenter la réponse de newgame
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 22 févr. 2009 à 22:51
0
Utile
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 ?)
Commenter la réponse de jmf0
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 22 févr. 2009 à 22:58
0
Utile
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 !!!
Commenter la réponse de jmf0
newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 23 févr. 2009 à 09:31
0
Utile
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"?
Commenter la réponse de newgame
newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 23 févr. 2009 à 09:39
0
Utile
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
Commenter la réponse de newgame
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 23 févr. 2009 à 11:23
0
Utile
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
Commenter la réponse de jmf0
jmf0 1566 Messages postés mardi 26 décembre 2000Date d'inscription 5 avril 2013 Dernière intervention - 23 févr. 2009 à 11:29
0
Utile
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.
Commenter la réponse de jmf0
newgame 52 Messages postés lundi 2 février 2009Date d'inscription 24 juillet 2013 Dernière intervention - 23 févr. 2009 à 20:26
0
Utile
merci jmf0
mon pbm est résolu
Commenter la réponse de newgame

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.