Enchainement de fenêtre

denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010 - 20 mai 2010 à 13:42
denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010 - 20 mai 2010 à 15:04
Bonjour a tous, j'espère que vous allez tous bien (ainsi que les reins de jack ^^)

Je suis débutant en VB6 et j'ai un problème plustot génant.
En effet je ne connai pas vraiment de structure pour enchainé mes différent form. Je sais bien évidement passé d'un forme a un autre avec .visible .show ou unload

mon probleme est le suivant. Le programme que je dévelope permet de centralisé des données, en gros j'importe des données soit de fichier excel soit de fichier texte, puis je les mets dans la base de donnée. Ces données importé son des stock de verre. je centralise sur un mois des données sur plus de 150 familles x 100 filiale. pafois lorsque j'importe une ligne de stock, la famille ou la filiale ne se trouve pas dans la base de donnée. Dans ce cas la je doit intérompre mon script et ouvrire une fenetre me permétant d'ajouter manuelement la donnée dans la base.

Mais j'ai beaucoup de probleme suite a ces intéruption. J'ai récpéré une fonction me permétant de faire une pause tout en gardant la main. ceci me permet de metre mon script principal en pause pendant l'intéruption. en suite j'ouvre le formulaire d'ajout et j'ajoute ma donnée. En suite je doit revenir a ma fenetre d'origine pour reprendre mon script mais cette fenetre n'est pas tounjours la meme... la je block. Autre probleme, si mon interruption a été lancé pendant l'exécution d'un form_load, a mon retour le programme reexécute le form_load et recommence donc mon script, ce qui pose beaucoup de probleme tant sur les affichages des msgbox qui boucle que sur le temps d'exécution de mon script.

Donc je suis a la recherche de toute sort d'aide pouvant m'aidé a comprendre puis a mettre en place une bonne structure, fiable, pour enchainé mé fenetre ainsi que des explications divers sur la fonction form_load que je ne comprend pas completement.

Je vous remerci d'avance et a bientot!

3 réponses

Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
20 mai 2010 à 14:36
Personnellement moi-même, je ne mettrais pas mon script en "pause" (comment gères-tu cette pause ? Un timer, un truc comme ça ?).
J'intègrerai ça directement dans le script.
A chaque ligne injectée, contrôle de l'existence de la famille/filiale et lancement d'une fonction de mise à jour de la base si la donnée est inexistante (même avec un simple InputBox par ex.) comme ça, plus de pbs de rafraîssement avec tes changements de formulaires.

Molenn
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
20 mai 2010 à 14:46
Salut
Merci pour ces souhaits

Ton problème vient d'une mauvaise structure de ton programme.
Un signe évident de mauvaise structure, c'est quand tu as des Sub ou Function de plus de 100 lignes, ou des bouts de programme dupliqués à droite à gauche (et qui pourraient bénéficier d'une Sub-Function commune, avec appel paramétré)
Ceci permet de mieux gérer le débugage, les modifs, la compréhension.

Lors de l'importation des données, il faut :
- Préparer les données (*) dans une variable tableau afin de les rendre accessibles facilement par d'autres bouts de programme
(*) Phase d'autant plus importante que les données peuvent venir de deux types différents de fichiers
- Dans ton cas, vérifier que la famille ET la filiale existe déjà (dans quoi, au fait ? une base de données ?)
Si ce n'est pas le cas, appeler le programme d'ajout
- Transférer les données à ton programme de dispatching vers leurs destination (base de données ?)

Bien gérer les ouvertures-fermeture-masquage des formes :
Etudie bien les méthodes à utiliser pour charger, afficher, masquer ou fermer une forme : Load, Show (Modale ou Modeless ?), Hide et Visible, UnLoad

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
denver78610 Messages postés 29 Date d'inscription mardi 20 avril 2010 Statut Membre Dernière intervention 13 juillet 2010
20 mai 2010 à 15:04
Alors dans l'ordre sa donné :

voila le script de la pause :
'la fonction de pause, trouver sur le net
Public Sub hbwait(millisecondes As Long)
boolwait = True
Dim attente As Long
attente = GetTickCount + millisecondes
Do Until GetTickCount >= attente
DoEvents
Sleep 1
Loop
If (boolwait) Then
hbwait millisecondes
End If

End Sub

Elle vien de ce site si je ne m'abuse, le booléen boolwait est déclaré en global, il faut le mettre a faut pour revenir dans le programme, je reboucle toute les nbmillisecondes.

En suite je ne peuw malheuresmeent pas utilisé d'input box car pour simplifié le travail au future utilisateur, je lui propose des listes de choix, dans un future proche ces listes seront éditable.

En suite coté jack, mon programme est en effet mal structuré, d'après ce que je sais et ce que tu me dit, sa ne fai aucun doute. malheuresmeent mon manque d'expérience m'empèche bien souvent de réglé mé probleme. En effet des code dupliqué a 1 ou 2 variable pres existe dans mon projet mais bien que je soit conscient qu'il y est moyen d'amélioré sa je ne trouve pas la solution. Mais j'y travail... sa viendra avec le temps.

En suite en effet je stock dans un premier temps mé données dans un tableau ( 2 Dim pour l'excel et 3 dim pour l'importation txt, ce qui a impliqué 2 fonctions par exemple... ) puis en suite dans une DB access.

Je vais étudier ce que tu m'as di. dailleur si quelqu'un a sa dans ces favori, un pti lien je ne dirai pas non ^^ sinon je troverai ne vous inquiétez pas.

je vous dis a bientot !!! je part en quete d'un bon tutorial, ++ et merci pour les conseils
Rejoignez-nous