|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Francois Responsable de service informatique Inscription : novembre 2010 Messages : 33 ![]() |
Bonjour,
De nouveau confronté à un problème qui me dépasse, je fais appel aux lumières des utilisateurs de ce forum qui m'ont déjà été très utiles à plusieurs reprises. Tout d'abord, si le titre porte un point d'interrogation, c'est bien parce que je ne le cible pas très bien, et je me plante peut être totalement dans cette approche (problème de temporisation). Mon problème concerne ce bout de code : Code :
Si je place un "Stop", ou un "Msgbox" quelconque entre l'affectation du recordset et l'affichage de la fenêtre de comptage, il fonctionne Si j'exécute ce code tel qu'il est, sans rien ajouter et en continu...il plante !!! La fenêtre ne s'affiche pas, et ACCESS ne répond plus... Quelqu'un aurait-il déjà été confronté à ce genre de problème ? Ou aurait un début d'idée pour mieux le cerner ? Merci de votre aide. |
||
|
|
00
|
|
|
#2 |
|
Nouveau Membre du Club
![]() Francois Responsable de service informatique Inscription : novembre 2010 Messages : 33 ![]() |
C'est même encore plus tordu que cela.
Un msgbox entre les deux traitements laissera apparaître la boite d'affichage, mais celle-ci est ensuite instruite un peu plus loin dans le traitement. Si je me "contente" de bloquer le programme à ce stade, j'ai donc bien la boite... mais pas les affichages ! Il faut que je bloque le programme au moins de façon régulière pour que la boite instruite s'affiche correctement ! Je vais faire des essais pour savoir à quelle fréquence minimale il faut provoquer ces blocages pour que cela marche... J'avoue ne pas très bien comprendre... |
|
|
00
|
|
|
#3 | ||
|
Nouveau Membre du Club
![]() Francois Responsable de service informatique Inscription : novembre 2010 Messages : 33 ![]() |
Pour bien me faire comprendre, j'explique [très] sommairement ce que je souhaite faire :
-> ouverture d'un fichier issu d'une base SQL (Recordset 1) -> ouverture d'un fichier issu d'une importation automatique CSV (Recordset 2) -> traitement de chaque enregistrement du Recordset 2 en fonction des données correspondantes du Recordset 1 Il s'agit d'un traitement de facture, donc à chaque fois, les recordset peuvent avoir des tailles très différentes. En l’occurrence, Recordset 1 fait environ 3300 lignes, et Recordset 2 4500. Le traitement est long, et donne l'impression à l'utilisateur qu'il ne se passe rien (quand vous les habituez à aller vite !...). J'ai donc voulu mettre en place l'affichage d'un compteur du genre "vous en êtes à l'enregistrement x sur y". Comme rien ne s'affichait, j'ai pensé que le programme se plantait, mais en fait, c'est autre chose : Si je provoque une sortie de la procédure à enregistrement = 0, j'obtiens le cadre d'affichage du compteur sans rien dedans (normal, puisque je suis sorti à 0 !). Si je provoque cette même sortie à enregistrement = 10, je n'obtiens pas les affichages 1,2,3,... jusqu'à 10, comme cela se produit en exécution pas à pas, mais directement "vous en êtes à l'enregistrement 10 sur 4500" à la fin du traitement ! Forcément, 10 ça va encore vite, même avec un traitement lourd (pas à ce point tout de même !), donc on se dit : j'ai peut-être pas eu le temps de les voir s'afficher. J'ai donc refait la manip avec 100 et 500 cette fois. Même avec de mauvais yeux comme les miens, on a quand même le temps de voir quelque chose ! Et bien en fait, rien du tout. L'affichage (qui est pourtant bien en tête de boucle, directement derrière le Do while...) ne se fait qu'à la fin du traitement. Conclusion : mon programme ne plante pas; c'est juste qu'il est très long, et que l'affichage ne se fait qu'au dernier enregistrement traité... Mais pourquoi diable ?.... Allez, comme je sais qu'on ne me croira pas sur parole, je montre le code : Code :
|
||
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Francois Responsable de service informatique Inscription : novembre 2010 Messages : 33 ![]() |
Bon, là, je me noie de plus en plus !
J'ai pensé à un problème d'actualisation de ma zone de texte. J'ai donc créé un Control, affecté à ma zone de texte, et placé une commande d'actualisation (DoCmd.Requery control.name). Aucune réaction en exécution sans interruption ! Pas d'affichage, rien ! En pas à pas, affichage de la boite mais avec un message du genre "L'actualisation n'est pas disponible" dès que je passe au deuxième enregistrement !!!! A l'aide ! |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Francois Responsable de service informatique Inscription : novembre 2010 Messages : 33 ![]() |
Qui cherche trouve dirait le sage (qui aime Google !!)
Bon, la solution est de placer un simple DoEvents dans le Do...Loop. Ce dernier est en effet assez exclusif, et bloque les exécutions de type affichage tant qu'il n'est pas fini,... ou interrompu momentanément (très peu suffit), comme par un DoEvents, par exemple ! Ce qui explique pourquoi mon affichage ne se faisait qu'à la fin du traitement, et pourquoi en pas à pas (= interruptions), tout allait bien ! En espérant que cette petite galère pourra servir à d'autres. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com