MESSAGE : INDICE EN DEHORS DE LA PLAGE

winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016 - 13 avril 2009 à 10:03
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016 - 16 mai 2009 à 11:47
Bonjour,

Je n'arrive pas a régler le problème suivant :
Je charge dans un treeview un fichier texte, dont voici le code :

'ouverture fichier
Open File For Input As #19
    Do
        'on lit la ligne
        Line Input #19, lin
        'on regarde le nombre d'espace qui correspond au nombre de parents
        currentLevel = Len(lin) - Len(LTrim$(lin))
        txt = LTrim$(lin)
       
        'on redimensionne le tableau si un nouveau niveau existe
        If currentLevel > MaxLvl Then
            MaxLvl = MaxLvl + 1
            ReDim Preserve nodes(MaxLvl) As Node
        End If
           
        'On enregistre dans le tableau le noeud courant et son niveau dans l'arbre
        If currentLevel <> 0 Then
            Set nodes(currentLevel) = twMenu.nodes.Add(nodes(currentLevel - 1).key, tvwChild, "a" & twMenu.nodes.Count, txt)
            nodes(currentLevel).Sorted = True
        Else
            Set nodes(currentLevel) = twMenu.nodes.Add(, , "a" & twMenu.nodes.Count, txt)
            nodes(currentLevel).Bold = True
            nodes(currentLevel).BackColor = vbYellow
            nodes(currentLevel).Sorted = True
        End If
        lastLevel = currentLevel
    Loop While Not EOF(19)
Close #19

Quand je lance le code une 1ere fois, tout va bien. Par contre dans que je le lance une seconde fois, il y a le message INDICE EN DEHORS DE LA PLAGe. ce message fait référénce à la ligne signalée en rouge.

Je dois faire quoi pour pouvoir lancer le code plusieurs fois de suite sans avoir le message d'erreur ? Merci pour votre aide.

Environnement VB6.

Jerome

7 réponses

jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 7
13 avril 2009 à 12:37
Bonjour,

Déjà : ceci :

'on regarde le nombre d'espace qui correspond au nombre de parents
        currentLevel = Len(lin) - Len(LTrim$(lin))
        txt = LTrim$(lin)

est faux ! Trim ne concerne que les espaces éventuels devant et derrière la chaîne, aucun des autres.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 avril 2009 à 13:52
Salut
Dans un ReDim, il n'est pas nécessaire de repréciser le type (risque d'erreur)
Attention à ne jamais utiliser de nom de variabnles pouvant ressembler aux mots clés du langage (Nodes) !

Quand l'erreur survient, que vcalent les variables utilisées da&ns cette ligne ?
   currentLevel
   twMenu.nodes.Count
   txt

Il y a longtemps que je n'ai pas géré de TreeView, mais je ne vois pas pourquoi tu crées un tableau de Nodes, tu les as dans le TreeView, pourquoi refaire du stockage externe ?

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
13 avril 2009 à 14:01
Bonjour Jack,

Le code n'est pas de moi ....
Si tu connais un code + propre pour créer un treeview a partir d'un fichier texte, je suis preneur.

Merci,
Jerome
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
13 avril 2009 à 15:38
Ok, ça ne t'empèche pas de comprendre pourquoi cela ne marche pas.
Pour les techniques liées aux TreeView, suffit de charger quelques exemples en recherchant "treeview" dans la recherche.
Et les réponses à mes questions ?
Si tu veux avancer, il y a un mimumum d'info à fournir, tu crois pas ?

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0

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

Posez votre question
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
13 avril 2009 à 21:28
Jack,

Désolé, je n'avais pas fait attention que tu demandais des infos compléentaires, les voici donc :




   currentLevel = 1
   twMenu.nodes.Count = 2

   txt = Back-Office

En fait, ça doit afficher :

LOGICIEL 1
+ Module Back-Office
      - Fichier 1
      - Fichier 2
....
+ Module TPV
      - Fichier 1
      - Fichier 2
...
LOGICIEL 2
+ Module
.....

En fait, quand ça plante, ça a affiché les logiciels et les modules, mais les lignes correspondant aux fichiers.

Merci
Cdlt
Jerome
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
15 avril 2009 à 15:34
Re
Tu dis que ça plante la deuxième fois : tu essayes de réinsérer les mêmes données ?
Existe t-il un Node d'index 0 (puisque currentLevel = 1) qui possède une Key ?

Le problème dans ton code, c'est que les éléments existent deux fois :
- une fois dans le TreeView
- une autre fois dans le tableau de Nodes
--> Difficile à dépanner/comprendre

Regarde dans l'aide du TreeView + les sources du site, par exemple <celle-ci> au hasard, tu verras comment retrouver un Node dans le TreeView à partir de sa Key --> le but étant de supprimer ce tableau de Nodes.
Si tu as des infos 'personnelles' (info ne faisant pas partie de la structure organisationnelle du TreeView) à stocker dans chaque Node, il y a la propriété Tag de chaque Node dans lequel tu peux stocker ce que tu veux, par exemple ton Level.
Par contre, quand tu rechercheras un Level parmi les Tag des Nodes de ton TreeView, il faudra parcourrir chaque Node, genre
   Dim monNode
   For Each monNode in TreeView.Nodes
      If monNode.Tag = monLevel - 1 Then
         ' Ici ton insertion du nouveau Node
         Exit For
      End If
   Next

A quoi te sert lastLevel ?

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

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
winvsmac Messages postés 84 Date d'inscription samedi 26 mai 2007 Statut Membre Dernière intervention 14 décembre 2016
16 mai 2009 à 11:47
Merci Jacq pour tes infos, mais ça reste trop complexe à mon niveau, je ne comprends pas tout.
0