Problème avec ComboBoxGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Problème avec ComboBoxGadget

Message par boby »

Code : Tout sélectionner

EnableExplicit
Enumeration
  #CMB
  #TXT1
  #TXT2
EndEnumeration
Declare Fill()
Declare Check()
Declare Thread(a)
If OpenWindow(0,0,0,200,200,"Combo",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  ComboBoxGadget(#CMB,10,10,100,20)
  TextGadget(#TXT1,10,50,100,20,"")
  TextGadget(#TXT2,10,90,100,20,"")
  Fill()
  BindGadgetEvent(#CMB,@Check())
  CreateThread(@Thread(),#NUL)
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Procedure Fill()
  Protected loop
  For loop = 0 To 10000
    AddGadgetItem(#CMB,-1,"Element"+Loop)
  Next
EndProcedure

Procedure Check()
  If EventType() = #PB_EventType_Change
    SetGadgetState(#CMB,Random(10000))
    SetGadgetText(#TXT1,GetGadgetText(#CMB))
    SetGadgetText(#TXT2,GetGadgetItemText(#CMB,GetGadgetState(#CMB)))
    If Not GetGadgetText(#TXT1) = GetGadgetText(#TXT2)
      Debug "couille !"
    EndIf
  EndIf
EndProcedure
Procedure Thread(a)
  Repeat
    PostEvent(#PB_Event_Gadget,0,#CMB,#PB_EventType_Change)
    Delay(1)
  ForEver
EndProcedure
Je ne comprend, pas chez moi ça veux pas planter :-/
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonjour à tous
------------------- IMPORTANT A LIRE ABSOLUMENT -------------------------
A. Tout d'abord je vous remercie tous sans exceptions, même ceux qui pensent que Omega a peut être besoin de voir un psychiatre...
B. Il faut qu'on soit d'accord sur un point important. Pour retrouver l'erreur, il faut faire ceci et dans l'ordre svp:
1. Télécharger le dossier complet ici: http://www.yaninformatique.com/omega.zip
2. Décompresser
3. Lancez le programme omega.pb
4. Allez directement au volet Fiche de stock
5. Sélectionner un produit
6. Changer la date début en commençant par (au moins) 14/08/2018
7. Cliquer sur le bouton <<Afficher>>
8. Regarder la liste affichée, chaque ligne contient le document et son n°, cliquer alors sur un n° de BL (normalement le bl sélectionné sera affiché)
9. Regarder le BL affiché, tout est correct sauf le n° de document qui est vide ou erroné !

Si vous retournez vers la fiche de stock et que vous choisirez un autre BL, ça va marcher ! Donc, le problème concerne seulement le 1er BL sélectionné.

J'espère que ce code va vous aider à trouver une explication, je vous remercie tous à l'avance et vous souhaite beaucoup de succès !

N. B. Je viens de remarquer une chose: le GetGadgetText() et le SetGadgetText() marchent bien sur tous les autres combos du programme à l'exception de la combo Numdoc du Bon de livraison.

Amusez-vous bien

Ehh ! N'oubliez pas de me donner votre avis sur ce petit code de gestion commerciale (je l'ai simplifié pour vous remettre uniquement la fenêtre des mouvements principaux)..

Omega
Dernière modification par omega le mar. 14/août/2018 21:04, modifié 1 fois.
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Problème avec ComboBoxGadget

Message par GallyHC »

Bonjour,

www.yaninformatique/omega.zip > tu es sur? A mon avis sans le télécharger ajoute un .com.

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Bonsoir Omega.

Tout d'abord, sans commenté ton application ( qui ne resize pas correctement sur mon écran ) , est vraiment mal codée. je ne voudrais pas à avoir à maintenir
cela.

Regarde :

Image

c'est quoi la variable Rc$ ? la variable L1 ? etc ??? tu as du codé au fur & à mesure sans de "plan" et ajouté des features
déjà, et le "bug" viens de là , c'est que ton "numdoc & numdoc$" à été utilisé plusieurs fois pour différentes chose.
donc, cherche par là. sépare tes numdoc$ en fonctions des procédures que tu appelles numdocBC$ <- dans procedure printbc etc...

utilise des structures, aère ton code, car là, c'est l'avc assuré pour la maintenance. pour ma part, je préfère décédé immédiatement que de maintenir ton code ^^
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonsoir GallyHc
www.yaninformatique/omega.zip > tu es sur? A mon avis sans le télécharger ajoute un .com.
Effectivement, il faut ajouter un .com (désolé et merci pour la remarque)
Bonsoir G-Rom
Tout d'abord, sans commenté ton application ( qui ne resize pas correctement sur mon écran ) , est vraiment mal codée. je ne voudrais pas à avoir à maintenir

C'est vrai que j'ai une longue expérience en développement mais n'empêche que je reste un vrai débutant en Pb G-Rom
J'ai encore beaucoup à apprendre sur pb...
c'est quoi la variable Rc$ ? la variable L1 ? etc ??? tu as du codé au fur & à mesure sans de "plan" et ajouté des features déjà, et le "bug" viens de là , c'est que ton "numdoc & numdoc$" à été utilisé plusieurs fois pour différentes chose.
donc, cherche par là. sépare tes numdoc$ en fonctions des procédures que tu appelles numdocBC$ <- dans procedure printbc etc... utilise des structures, aère ton code ...
La variable Rc$=N° du Registre de Commerce, L1 étant la 1ère ligne : coordonnée X sur imprimante.
Numdoc et Numdoc$ sont déclarées 2 fois: c'est une erreur involontaire, mais est ce que vraiment à cause de ça que j'ai des problèmes G-Rom? Que veux-tu dire par (utilises des structures? à la place de quoi? et comment?)

Merci pour les remarques et les conseils, je vais essayer de les appliquer...
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

@G-Rom
Tout d'abord, sans commenté ton application ( qui ne resize pas correctement sur mon écran ) , est vraiment mal codée. je ne voudrais pas à avoir à maintenir...
cela.
Pourquoi la fenêtre ne se redimensionne pas? Pourtant j'utilise les dimensions de l'écran

Code : Tout sélectionner

ExamineDesktops()
Wlargeur=DesktopWidth(0)
Whauteur=DesktopHeight(0)
OpenWindow(#winmvt, 0,0,0,0, "",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_Maximize)
WLar=Wlargeur-30:WHaut=Whauteur-60 
PanelGadget(#PanelMvt, 10,10, wlar, WHaut)
Ai-je mal utilisé le redimensionnement?
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

@G-Rom
(à toute fin utile)
J'ai enlevé la double déclaration de numdoc$, j'ai retesté le programme, toujours le même problème, donc ça ne provient pas de là...
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Quand je parle de structure, je parle de cela :

Code : Tout sélectionner

Structure Produit
 denomination.s
 reference.s
 prix.l
 etc.i...
endstructure
Cela t'évite d'avoir 50 milles variables qui partent dans tout les sens. des structures & des listes. idem pour l'application :

Code : Tout sélectionner

Structure Application
   windowID.l
   gadget[#MAX_GADGET]
   etc...
endstructure

global MonApplication.Application
C'est plus propre, est on debug plus facilement.

sinon ligne 3198 est ton problème, commente le...
comme ton code est bordélique, tu ne sait plus qui fait quoi et quand. le problème est là.
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

Voici un squelette fait vite fait pour toi :

Code : Tout sélectionner


Enumeration
  #MES_GADGETS
  #MON_BOUTON
  #MAX_GADGET
EndEnumeration


Structure Application
  WindowID.i
  Gadget.i[#MAX_GADGET]
  run.a
  ...
EndStructure

Global MonApplication.Application

Procedure initialize()
  
  With MonApplication
    \WindowID = OpenWindow(...
    
    \Gadget[#MON_BOUTON] = ButtonGadget(...
    \run = #True 
    
    BindGadgetEvent(\Gadget[#MON_BOUTON] , @faitqqchose() )
    ...
    
  EndWith    
  
EndProcedure


Procedure handleEvent()
  
  Repeat
    event = WindowEvent()
    
    If event = #PB_Event_CloseWindow
      MonApplication\run = #False 
    EndIf 
    
    ...
    
    
  Until event = 0
  
EndProcedure



initialize()

While MonApplication\run
  
  handleEvent()
  
Wend



use et abuse des bindEvent , compartimente ton code correctement avec des taches simple.
avoir un Event de plus de 1000 ligne faut être maso ^^
Tes produits possède des caractéristique commune, utilise des structures !

pour ton erreur , comme j'ai touché ton code, pas sur de la ligne mais c'est dans la procedure Mvt_AfficherLesCombos()
quand tu clear ton combo après l'avoir rempli...
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Merci G-Rom pour ces précieuses informations et ce joli code-exemple...
Tes produits possède des caractéristique commune, utilise des structures
Si j'ai bien compris, l'utilisation de la structure va remplacer les variables - produits, c'est ça?

Code : Tout sélectionner

Structure Application
  WindowID.i
  Gadget.i[#MAX_GADGET]
  run.a
  ...
EndStructure
Quant à cette structure Application, je ne pense pas avoir bien compris, j'aurais souhaité (si ce n'est pas trop demandé) de compléter ce bout de code (si c'est possible)

Code : Tout sélectionner

With MonApplication
    \WindowID = OpenWindow(...
    
    \Gadget[#MON_BOUTON] = ButtonGadget(...
    \run = #True 
    
    BindGadgetEvent(\Gadget[#MON_BOUTON] , @faitqqchose() )
    ...
   EndWith 


Sinon, il ne me reste plus qu'à te remercier beaucoup pour ces beaux conseils et astuces...

Merci beaucoup G-Rom
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

C'est confirmé ! C'est effectivement un bug de Purebasic !

Voici les preuves:
1. Le même code (copie-coller) a été exécuté sous plusieurs anciennes versions de Pb:
RESULTAT : aucun bug
2. Le même code (copie-coller) a été exécuté sous la version 5.62 de Pb:
RESULTAT : bug
3. Le même problème a été signalé par Gurj, sur le forum PureBasic en anglais : il a confirmé ce que j'ai dit:
Voici le lien : https://www.purebasic.fr/english/viewto ... =4&t=69019

Bon courage à tous
Win7 (x64) 64 bits Pb 5.72
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Problème avec ComboBoxGadget

Message par G-Rom »

omega a écrit :C'est confirmé ! C'est effectivement un bug de Purebasic !

Voici les preuves:
1. Le même code (copie-coller) a été exécuté sous plusieurs anciennes versions de Pb:
RESULTAT : aucun bug
2. Le même code (copie-coller) a été exécuté sous la version 5.62 de Pb:
RESULTAT : bug
3. Le même problème a été signalé par Gurj, sur le forum PureBasic en anglais : il a confirmé ce que j'ai dit:
Voici le lien : https://www.purebasic.fr/english/viewto ... =4&t=69019

Bon courage à tous
Arrête ta mauvaise foi, c'est ton code qui est pourri. et je t'ai dis pourquoi... si tu ne lis pas...
j'ai PB 5.60 et ton code ne marche pas...

bref , voila en gros comment il faut faire en place de ce que tu fait :

Code : Tout sélectionner

Enumeration
  #ONGLETS
  #COMBO_LISTE_1
  #COMBO_LISTE_2
  #LISTE_STOCK_1
  #LISTE_STOCK_2
  #BOUTON_AFFICHER
  #MAX_GADGET
EndEnumeration

Structure Produit
  denomination.s
  reference.s
  prix.f
  stock.i
EndStructure

Structure Application
  
  windowID.l
  gadget.l[#MAX_GADGET]
  run.a
  
  List MesProduits.Produit()
  
EndStructure

Global MonLogiciel.Application

Procedure SelectioneProduit() ; Declenche par COMBOBOX 2
  REF$ = GetGadgetText( MonLogiciel\gadget[#COMBO_LISTE_2] )
  
    ClearGadgetItems(MonLogiciel\gadget[#LISTE_STOCK_1])
    ClearGadgetItems(MonLogiciel\gadget[#LISTE_STOCK_2])
    
    STATE = GetGadgetState(MonLogiciel\gadget[#COMBO_LISTE_2])
    SetGadgetState(MonLogiciel\gadget[#COMBO_LISTE_1],STATE)
    
    With MonLogiciel
      ForEach \MesProduits() ; utilisation de map serait judicieux, mais c'est pas le sujet...
        If REF$ =  \MesProduits()\reference
          LINE$ = \MesProduits()\denomination + Chr(10) + \MesProduits()\reference + Chr(10) + \MesProduits()\prix + Chr(10) + \MesProduits()\stock 
          AddGadgetItem(\gadget[#LISTE_STOCK_2],-1,LINE$)
          AddGadgetItem(\gadget[#LISTE_STOCK_1],-1,LINE$)
          Break
        EndIf 
      Next
    EndWith
    
    
    
EndProcedure

Procedure AfficheProduit()
  SetGadgetState(MonLogiciel\gadget[#ONGLETS],0)
EndProcedure


Procedure initialize()
  With MonLogiciel
    \windowID = OpenWindow(#PB_Any,0,0,640,480,"")
    \run      = #True 
    
    \gadget[#ONGLETS] = PanelGadget(#PB_Any,0,0,640,480)
    AddGadgetItem(\gadget[#ONGLETS],-1,"Panneau 1")
    
    \gadget[#COMBO_LISTE_1] = ComboBoxGadget(#PB_Any,10,10,256,32)
    \gadget[#LISTE_STOCK_1] = ListIconGadget(#PB_Any,10,52,620,380,"denomination",128)
    
    AddGadgetColumn(\gadget[#LISTE_STOCK_1],1,"Reference",128)
    AddGadgetColumn(\gadget[#LISTE_STOCK_1],2,"Prix",128)
    AddGadgetColumn(\gadget[#LISTE_STOCK_1],3,"Stock",128)
    CloseGadgetList()
    
    OpenGadgetList(\gadget[#ONGLETS])
    AddGadgetItem(\gadget[#ONGLETS],-1,"Fiche des stocks")
    
    \gadget[#COMBO_LISTE_2] = ComboBoxGadget(#PB_Any,640-266,10,256,32)
    \gadget[#LISTE_STOCK_2] = ListIconGadget(#PB_Any,10,52,620,340,"denomination",128)
    \gadget[#BOUTON_AFFICHER] = ButtonGadget(#PB_Any,10,410,256,32,"Afficher")
    
    AddGadgetColumn(\gadget[#LISTE_STOCK_2],1,"Reference",128)
    AddGadgetColumn(\gadget[#LISTE_STOCK_2],2,"Prix",128)
    AddGadgetColumn(\gadget[#LISTE_STOCK_2],3,"Stock",128)
    
    
    BindGadgetEvent(\gadget[#COMBO_LISTE_2], @SelectioneProduit(), #PB_EventType_Change )
    BindGadgetEvent(\gadget[#BOUTON_AFFICHER], @AfficheProduit())
    
    
    CloseGadgetList()
        
    
    ; on créer des produits bidons...
    ;
    AddElement(\MesProduits())
      \MesProduits()\denomination = "Climatisation modele XYZ"
      \MesProduits()\reference    = "ref-1"
      \MesProduits()\prix         = 2500.5
      \MesProduits()\stock        = 2
      
    AddElement(\MesProduits())
      \MesProduits()\denomination = "Veineux d'afrique couleur ebène, pour madame."
      \MesProduits()\reference    = "BOBOCUCU"
      \MesProduits()\prix         = 69.0
      \MesProduits()\stock        = 8
      
    AddElement(\MesProduits())
      \MesProduits()\denomination = "Carte graphique NVIDIA GTX 45696 20go RAM DDR20"
      \MesProduits()\reference    = "CG7854-DESDGDS-45435"
      \MesProduits()\prix         = 899
      \MesProduits()\stock        = 2
      
      
      
    ForEach \MesProduits()
      AddGadgetItem(\gadget[#COMBO_LISTE_1],-1,\MesProduits()\reference)
      AddGadgetItem(\gadget[#COMBO_LISTE_2],-1,\MesProduits()\reference)
    Next
    
      
  EndWith
EndProcedure

Procedure handleEvent()
  Repeat
    event = WindowEvent()
    
    If event = #PB_Event_CloseWindow
      MonLogiciel\run = #False 
    EndIf 
    
  Until event = 0
EndProcedure


initialize()

While MonLogiciel\run = #True 
    handleEvent()
Wend


Le but de ce code, c'est juste pour te faire voir quand je change d'onglet, mes combo se comportent comme il le faut. pas de bug, pas de gestion lourde des events dans un switch de la taille du système solaire...
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Problème avec ComboBoxGadget

Message par omega »

Bonjour G-Rom
Ton code marche bien, il n'y a rien à dire, mais j'avoue qu'il est un peu trop compliqué pour moi, il va falloir que je prenne tout mon temps pour comprendre (mot à mot) ce que tu fais dans chaque ligne... ça va me prendre certainement un temps considérable mais ça vaut quand même la peine.
Je reconnais que mon code est (peut être inutilement) trop volumineux, c'est vrai que je l'ai codé au fur et à mesure.. donc sans aucun plan au préalable... Je vais essayer de le refaire en utilisant les structures comme tu dis.
Cela me sera très utile quand à l'organisation et l'aération de mon code. Tu as raison et je te remercie pour tout. Mais (il y a un MAIS), concernant le bug en question, je ne suis pas tout à fait convaincu, pourquoi ça marche sur Pb4 normalement et sans bug, alors que sur Pb5.62 il y a ce bug ? Je dois préciser que mon programme est opérationnel depuis plus de 6 ans (il a été développé sous Pb4), ce n'est que maintenant (après migration sur Pb5.62) qu'il présente des anomalies ?? Comment expliquer ce phénomène? Je n'ai rien changé à la logique du programme à part la syntaxe ClearGadgetItemList() remplacé par ClearGadgetItems(), Valq() remplacé par Val(), Frame3D remplacé par Frame etc... ).
De toute façon, je vais oublier tout ça puisque personne n'a l'air de me croire ni de me comprendre... Je vais m'occuper maintenant de l'aération de mon code comme tu me l'as conseillé, pour celà, j'aurais besoin de quelques jours de concentration et d'efforts....
Je te remercie beaucoup G-Rom pour tout ce que tu as fait pour moi... C'est très gentil
Merci encore et bonne continuation
Win7 (x64) 64 bits Pb 5.72
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Problème avec ComboBoxGadget

Message par microdevweb »

Whaw,

Chapeau à ceux qui on pris la peine de lire ce code, presque 10.000 lignes dans un seul fichier çà c'est ce que l'on appel de programmation structurée. Un tonne de variables Globales, 27 base de données ? au lieux d'une base et 27 tables.

Hé ben si tu arrive à maintenir tout ça chapeau bas
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
boby
Messages : 261
Inscription : jeu. 07/juin/2007 22:54

Re: Problème avec ComboBoxGadget

Message par boby »

Omega a écrit :Pourquoi la fenêtre ne se redimensionne pas? Pourtant j'utilise les dimensions de l'écran
1) Oui ta fenêtre prend tous l'écran, mais si tu essaie de la déplacer pour la changer d'ecran par exemple, tu te retrouve avec une fenêtre de 0 par 0

Code : Tout sélectionner

OpenWindow(#winmvt, 0,0,0,0, "",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_Maximize)
vue que tu ne lui donne pas de taille...

2) Oui ta fenêtre prend tout l'ecran mais on se retrouve avec un énorme vide puisque tu resize ta fenêttre mais pas son contenu, Si tu ne veux pas gérer le resize, le plus simple c'est de ne pas l'autoriser.

Comment veux tu retrouver quoi que ce soit dans un code comme ça ?
Ton code ne compile pas avec EnableExplicite ! donc tu ne déclare pas tes variables = pas bien !
Un code qui atteind un certain volume peut être découpé en plusieurs petits code, utilise les modules ils sont là pour ça !
Pure basic a (enfin) une gestion des event par callback très simple d'utilisation et natif, utilise bindevent ! La boucle select event n'a plus lieu d'exister c'est illisible et ça gonfle le volume d'un code sans aucune raison...
Toutes tes variables sont déclarées en global, pourquoi ? Si tu as besoin de variables pour tes procédures, déclare les à l'intérieur de ta procédure, "protected ou static" (et non define) en fonction du besoin, ça t'évitera de remonter de 5000 lignes pour revoir les variables que tu as déclaré (et ça t'évitera d'avoir 2 global avec le même nom).
Certaines de tes procédures se terminent pas un label pour i fair appel via un goto à l'intérieur même de ta procédure afin d'en sortir... Pourquoi pas "Procedurereturn" ??? c'est plus simple, ça ne prend pas de mémoire et c'est surtout fait pour...

Code : Tout sélectionner

If Val(wJ$)>=1 And Val(wJ$)<=31
   Result=1
Else
   Result=0
   Goto FinIsDate
EndIf
:arrow:

Code : Tout sélectionner

If Val(wJ$)>=1 And Val(wJ$)<=31
   Result=1
Else
   ProcedureReturn #False
EndIf
Omega a écrit :Je pense que le code est trop long pour une opération si simple.
Hé bah... tu ne manque pas de gueule au moins :roll:

La taille de ton code pourais être /2 juste en supprimant les multiples actions totalement innutil :

Code : Tout sélectionner

Structure BrNumdoc
  Numdoc.s
EndStructure
????? bah déclare juste ta variable en .s à ce moment la.

Code : Tout sélectionner

Procedure xcm(x.f)
result = x * (PrinterPageWidth()/21) ; 21cm A4
ProcedureReturn result
EndProcedure
=

Code : Tout sélectionner

Procedure xcm(x.f)
ProcedureReturn x * (PrinterPageWidth()/21) ; 21cm A4
EndProcedure

Code : Tout sélectionner

;Enlever les espaces
wSt$=""
For u=1 To Len(string$)
      If Mid(string$,u,1)<>Space(1)
       wSt$=wSt$+Mid(string$,u,1)
    EndIf
Next u
On le retrouve plusieurs fois dans ton code par exemple.... Utilise les Macro dans ce cas, ou fait en une procédure.

Code : Tout sélectionner

If CountGadgetItems(#fbl_numdoc)<=0
   ClearGadgetItems(#fbl_numdoc)
Si ton gadget est vide (ou plus que vide ???) alors on le vide <=========== ??? bon bah la c'est bon il est bien vide ton gadget.

Code : Tout sélectionner

   ForEach (facvNumListe())
     numdoc$=facvNumListe()\numdoc
     AddGadgetItem(#facv_numdoc,-1,numdoc$)
   Next
Donc la tu copie ta mémoire dans ta mémoire pour le copier dans ta mémoire... WHAT ?

Code : Tout sélectionner

   ForEach (facvNumListe())
     AddGadgetItem(#facv_numdoc,-1,facvNumListe()\numdoc)
   Next
L'utilisation d'une variable pour y copier le contenu d'une variable pour remplacer ce contenu par un autre contenu (car on est dans une boucle foreach) c'est peut être too much...
Certe ça fonctionne, mais pourquoi faire des actions innutil supplémentaire si on peut s'en passer ??

Bref j'en suis rendu ligne 3000 en scrollant un peut au pif et je suis limite de l'AVC donc je vais m'arréter là, mais le seul conseil que je puisse te donner avant de continuer dans ton code : FAIT DU RANGEMENT !!! (Et utilise EnableExplicite au début de TOUS tes codes... Ca t'évitera bien de problèmes...
Verrouillé