MESSAGE : INDICE EN DEHORS DE LA PLAGE

Signaler
Messages postés
84
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
14 décembre 2016
-
Messages postés
84
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
14 décembre 2016
-
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

Messages postés
1566
Date d'inscription
mardi 26 décembre 2000
Statut
Membre
Dernière intervention
5 avril 2013
6
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.
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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)
Messages postés
84
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
14 décembre 2016

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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)
Messages postés
84
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
14 décembre 2016

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
78
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)
Messages postés
84
Date d'inscription
samedi 26 mai 2007
Statut
Membre
Dernière intervention
14 décembre 2016

Merci Jacq pour tes infos, mais ça reste trop complexe à mon niveau, je ne comprends pas tout.