[Rés]Incrémentation, redimenssionnement, valeur d'une liste modifiable

Incrémentation, redimenssionnement, valeur d'une liste modifiable [Rés] - VB/VBA/VBS - Programmation

Marsh Posté le 04-01-2014 à 14:57:43    

Bonjour,  
 
 J'ai les structure suivantes :  
 

Code :
  1. Type dataTab_sup
  2.     id As String
  3.     name As String
  4.     localisation As String
  5.     type_sup As String
  6.     ipAddr As String
  7.     numLicense As String
  8.     memPhi As String
  9.     dateAcqui As String
  10.     dd As String
  11.     os As String
  12.     resEcran As String
  13.     printer As String
  14. End Type
  15. Type local_sup
  16.     id As Integer
  17.     name As String
  18.     dataTab_s() As dataTab_sup
  19. End Type
  20. Type batiment_sup
  21.     id As Integer
  22.     name As String
  23.     local_s() As local_sup
  24. End Type


 
A la suite je déclare la variable suivante :
 

Code :
  1. Public tab_bat_sup() As batiment_sup


 
 J'ai un formulaire que je vous joins
http://cjoint.com/?0Aeo5gXhzTT
 Dans ce formulaire j'ai le code suivant :  
 

Code :
  1. Option Explicit
  2. Public indice_bat As Integer
  3. 'Initialisation du formulaire
  4. Private Sub UserForm_Initialize()
  5.     Dim cmp As Integer
  6.     On Error GoTo fin:
  7.     If UBound(tab_bat_sup) <> -1 Then
  8.         'Ajout dans la liste déroulante modifiable tous les batiments déjà créés
  9.         For cmp = 0 To UBound(tab_bat_sup)
  10.             bat_sup.AddItem tab_bat_sup(cmp).name, cmp
  11.         Next cmp
  12.     End If
  13. fin:
  14. End Sub
  15. Private Sub Suivant_bat_sup_Click()
  16.     Unload Me
  17.     Loc_form_sup.Show
  18. End Sub
  19. Private Sub Ajouter_bat_sup_Click()
  20.     'Variable statique qui permet de savoir le numero du batiment que l'on souhaite ajouter
  21.     Static i As Integer
  22.     'Variable statique initialisée à 0
  23.     ReDim Preserve tab_bat_sup(i)
  24.     tab_bat_sup(i).id = i
  25.     tab_bat_sup(i).name = CStr(bat_sup.Value)
  26.     indice_bat = i
  27.     'Incrémentation du compteur
  28.     i = i + 1
  29. End Sub


 
 
 Le but de ce code est d'enregistrer les informations saisies dans la structure et d'ajouter les noms de bâtiments dans la liste modifiable.
 
 Seulement voila ma variable i ne s'incrémente pas ! Impossible de redimensionner le tableau ! Impossible d'affecter la valeur saisie dans la liste !
 
 Une variable statique est censée garder sa valeur à chaque appel de fonction cela ne veut pas dire que l'on ne peut pas y toucher --'. J'ai vu des exemples sur le forum qui me le prouve !
 
 
 Merci d'avance  
 
 Cordialement  
 
 Winflow


Message édité par rohffr le 05-01-2014 à 18:32:15
Reply

Marsh Posté le 04-01-2014 à 14:57:43   

Reply

Marsh Posté le 04-01-2014 à 15:28:44    

 
           Bonjour,
 
           statique oui mais peut-être plus lorsque l'Userform est déchargé !
 
           Tester  Me.Hide  à la place de  Unload Me  pour voir …
 

Reply

Marsh Posté le 04-01-2014 à 16:13:57    

Yes ! Comment fermer le formulaire sans perdre les données ? Parce que Hide ...

Reply

Marsh Posté le 04-01-2014 à 17:22:52    

 
           Pour fermer définitivement c'est bien  Unload  …
 
           Ouvrir la fenêtre des Variables locales puis placer un point d'arrêt et suivre le code et les variables via la touche F8
           afin de comprendre comment fonctionne VBA …
 

Reply

Marsh Posté le 04-01-2014 à 18:15:44    

i passe bien de 0 à 1 et après cela me dit qu'elle est hors contexte ce qui est vrai puisqu'elle est interne à la fonction

Reply

Marsh Posté le 04-01-2014 à 19:25:47    

j'ai regardé avec ce que tu m'as dit, mais comme je l'ai dit plus haut i n'est visible que dans la fonction d'ajout ...

Reply

Marsh Posté le 04-01-2014 à 23:37:31    

 
           Oui tout à fait normal comme elle est déclarée à l'intérieur de la procédure …
 
           Si cette variable i ne sert qu'à redimensionner la variable tableau d'après le peu de code posté,
           en fait, avec quelque peu de logique, elle n'est absolument pas nécessaire ‼
 
           Une piste ?   Regarder du côté de la fonction  UBound  par exemple …
 

Reply

Marsh Posté le 05-01-2014 à 12:43:13    

la variable i sert à savoir combien de fois on passe dans cette fonction et combien il y a de batiments je pense qu'elle est tout à fait nécessaire pour savoir où j'en suis dans les ajouts et seulement dans un second temps elle me sert à redimensionner mon tableau ...

Reply

Marsh Posté le 05-01-2014 à 17:20:35    

 
           En clair, d'une manière générale, pour incrémenter la dimension d'un tableau il n'y a pas besoin de variable
           vu que sa dimension est connue …
 

Reply

Marsh Posté le 05-01-2014 à 18:30:06    

je pense avoir réglé mon problème en utilisant une variable globale (pas bien) si jamais cela ne fonctionne pas comme je l'espérais j'utiliserais la technique du Ubound()+1 que tu m'as suggéré

Reply

Marsh Posté le 05-01-2014 à 18:30:06   

Reply

Marsh Posté le 05-01-2014 à 18:30:59    

en tout cas merci beaucoup =)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed