Progression d'ouverture de fichier

Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 22 avril 2009 à 12:23
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 - 11 août 2010 à 23:35
Bonjour,

Débutant dans la programmation en vb 2008 Express Edition, je me trouve confronté à un problème.
Je dois comparer une liste dans un fichier .txt avec un tableau Excel.
Le nombre de lignes du tableau Excel peu varier de 1000 à 60000 et son ouverture peu prendre beaucoup de temps.

Afin d'aider l'utilisateur à patienter, j'ai placé un ProgressBar piloté par un BackgroundWorker.
Comment indiquer la progression d'ouverture du fichier Excel à partir de sa taille?
Et de façon plus générale, comment indiquer la progression de n'importe quel type de fichier quand on ne connait pas à l'avance la quantité de son contenu?

Merci d'avance

31 réponses

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
11 août 2010 à 13:17
Bonjour,

heu quelle lib utilise tu , parce que en vb.9 il y a plusieurs moyens de procéder

a+
google est mon ami quand tu cherches quelque chose demande lui clairement
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 août 2010 à 13:41
Je n'utilise pas de lib particulière car je peux aussi bien avoir des fichier Excel 2000 que 2010.
Je passe par GetObjet pour savoir si Excel est déjà ouvert, sinon, CreateObjet.
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
11 août 2010 à 13:51
Bonjour,

sorry pas d'idée avec ça et comme tu utilises plusieurs versions d'excell c'est compliqué d'utiliser autre chose

a+
google est mon ami quand tu cherches quelque chose demande lui clairement
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 août 2010 à 13:59
J'ai trouvé la commande pour déterminer la longueur d'un fichier: GetFileLength. C'est tellement simple que c'en est honteux.

Je vais maintenant m'atteler à essayer de mettre en équation les observations faites des essais que je ferais ultérieurement.
Seulement, cette équation risque d'être approximative car elle sera fonction du temps. Et tous les pc ne fonctionnent pas à la même vitesse.

Je reste cependant persuadé qu'il est possible de récupérer la position de la tête de lecture du disque, ce qui serait génial.
Est-ce possible sous vb.net? Sinon, est-ce possible dans un autre langage?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
11 août 2010 à 17:19
Bonjour,
récuperer la position de la tête de lecture ne te servirait à rien car il suffit que le disque soit fragmenté et cela fausserait tes calculs .

je me demande comment ils font chez crosoft pour le filecopy dialog progress

a+
google est mon ami quand tu cherches quelque chose demande lui clairement
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 août 2010 à 18:15
Microsoft n'est pas le seul à le faire. D'autres développeurs indépendants en sont capable.
Je n'avait pas pensé au problème de fragmentation du disque. Il faut avouer que même Microsoft ne sait pas afficher la progression exacte de l'ouverture des ses propres fichiers.

Ce que tu me dis est pourtant lourd de sens. Ce n'est pas la bonne méthode que de récupérer la position de la tête de lecture. Bien que cette démarche m'intéresse. ;-)
Merci pour cette remarque gillardg.

Si quelu'un à une idée, je suis preneur.......
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
11 août 2010 à 18:43
Argg tu es sous Vb.net ! mince je pensais à VBA.

Bon ben en effet voici comment je ferais :
Lecture de la taille du fichier à ouvrir via le getfilelengh, puis Y=Ax+B pour le temps d'ouverture.
Pour un matheux c'est fastoche ^^
Y=tmp d'ouverture en sec, soit 1/10 de la valeur à ajouter à ta progress bar toutes les 100msec (timer).
A = cte, mesuré sur un PC "moyen" type dualcore avec 1GoRam en SATA, et B un petit coéf de sécu au cas où le pc client serait moins bon . Et hop tu as le temps de remplissage de ta barre (à faire dans un autre tread, pendant l'ouverture).
Tu vas me dire, et si le PC est meilleur elle ira pas jusqu'à la fin ! Spa faux, mais perso j'aime autant avoir accés à mon fichier avant la fin de la progression que de voir la progression bloqué sans que rien ne se passe !
++
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
11 août 2010 à 18:56
Bonjour,
bonne idée et stocke le pourcentage quelque part pour les prochains fichiers à ouvrir
a+
google est mon ami quand tu cherches quelque chose demande lui clairement
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 août 2010 à 19:18
Salut ADN56

Je rejoint gillardg: l'idée est bonne.
Par contre, pas besoin de stocker quoi que se soit. Les deux constantes A et B peuvent êtres déterminées dès les premières secondes. En dessous d'une seconde, quel intérêt?!

Je pourrait peaufiner avec une équation type logistique voire en type décharge d'un condo (Qu'en penses-tu ADN56?), mais pour des temps aussi courts que quelques millisecondes, on va pas chipoter.

Merci pour cette excellente suggestion ADN56

Dès que j'aurai travailler le code, je pourrai le poster si ça intéresse quelqu'un.

Par contre, l'idée de connaitre en temps réel la position de la tête de lecture du disque (buffer?) m'intéresse toujours... ;-)

Dois-je créer un nouveau post pour ça?
@+
0
Adn56 Messages postés 1172 Date d'inscription jeudi 24 mai 2007 Statut Membre Dernière intervention 28 septembre 2013 1
11 août 2010 à 19:38
Oui cela serait mieux, mais je ne pense pas que beaucoup de membres seront te répondre !
Tu tappe un peu haut là, et quand bien même tu connais la position de la tête de lecture tu ne saura pas dire à qu'elle position elle doit arriver.
Enfin je crois
Allez bon codage et plus ! ravi d'avoir pu aider un peu à mon tour.

Ps: Pour l'équation reste sur un truc linéaire, c'est plus lisible niveau opérateur
0
Shaegal Messages postés 110 Date d'inscription vendredi 1 février 2008 Statut Membre Dernière intervention 12 mai 2021 1
11 août 2010 à 23:35
La pertinente remarque de gillardg sur la fragmentation du disque m'a définitivement fait oublié cette histoire de position de tête de lecture. Savoir le faire serait juste pour info perso.

Une fonction linéaire devrait effectivement être suffisante pour ouvrir un lourd fichier Excel. Le plus long que j'ai eu (65535Lx50C environ) s'ouvrait quand même en 3 ou 4 minutes sous win2000 et Office 2000. Et ce directement avec Excel.
C'est dire qu'un simple texte "Veuillez patienter SVP" n'aurait pas suffit.
A.t+B me semble judicieux. C'était juste mon insatiable désir de perfection qui me fait parler.

Dès que j'aurai un instant, je m'y atèle... ;-)
0
Rejoignez-nous