IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème avec un TreeView VBA


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Problème avec un TreeView VBA
    Bonjour,
    Je suis nouveau sur ce forum et j'aimerais avoir de l'aide sur l'élaboration d'un treeview en VBA!
    Le code est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub UserForm_Initialize()
    Dim Base, n
    Dim Départ(1 To 15)
    Set tw = Me.MonArbre2
     
    'Initialisation des variables
    [BaseArticles].Sort key1:=[BaseArticles].Cells(1, 4)
    n = [BaseArticles].Rows.Count
    Base = [BaseArticles]
     
    'Initialisation de la racine de l'arbre
    'tw.Nodes.Add(noeud_père, twchild, création_noeud_courant, libellé_noeud)
    tw.Nodes.Add(, , "NoeudInit", "Début").Expanded = True
     
    '---Noeud Catégorie
    For i = 1 To n
        If IsError(Application.Match(Base(i, 4), Départ, 0)) Then
        tw.Nodes.Add("NoeudInit", twChild, "NoeudCat" & Base(i, 4), Base(i, 4)).Expanded = True
            'Vérifie le nombre de boucle nécessaire au total
            nd = nd + 1
            Départ(nd) = Base(i, 4)
        End If
    Next i
     
    '---Noeud Produit
    For i = 1 To n
        tw.Nodes.Add("NoeudCat" & Base(i, 4), twChild, "NoeudProduit" & Base(i, 1), Base(i, 2)).Expanded = True
    Next i
    End Sub

    D'autre part [BaseArtciles] est défini en zone. Et je ne comprend pas pourquoi dans mon formaulaire sa ne me prend pas en comtpe les noeuds.
    Merci d'avance à tous ceux qui pourrons me répondre!

    Bonne fin de journée

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    bonsoir

    ça ne va pas être aisé de répondre sans voir la structure de ta feuille Excel.

    En attendant, un exemple qui utilise Excel pour alimenter un TreeView:
    http://silkyroad.developpez.com/VBA/XlOrganigramme/


    bonne sorée
    michel

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Aidez Moi !!! Tree View VBA Excel
    Sa me paraît trop compliquer le tutorial!
    Je cherche à faire dans un premier temps une arborescence simple même si tout est faisable en vba!
    Je me en fichier zip mon dossier, si quelqu'un peut m'expliquer ce serait cool

    Merci d'avance
    Bonsoir
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    je ne peux pas lire les fichiers .rar


    michel

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Pourtant c'est comme un zip, le problème c'est que ici je ne peux pas mettre de fichier.xls excel normal je sais pas pourquoi.
    Euh alors je vais te faire un copier:
    Voilà la page excel :

    Numéro Désignation Prix Catégorie
    4 Banania 2,00 € Chocolat
    5 Crunch 3,00 € Chocolat
    6 Milka 2,00 € Chocolat
    7 Ferrero 4,00 € Chocolat
    1 Kellogs 3,00 € Cornlakes
    2 Coco pops 3,50 € Cornlakes
    3 Clusters 4,00 € Cornlakes
    8 Banane 1,00 € Fruit
    9 Pomme 1,00 € Fruit
    10 Raison 2,00 € Fruit
    11 Fraise 3,00 € Fruit
    12 Framboise 3,00 € Fruit
    17 Pantalon 40,00 € Habits
    18 Veste 35,00 € Habits
    19 Chemise 60,00 € Habits
    13 PC 1 000,00 € Hifi
    14 Télévision 500,00 € Hifi
    15 Radio 50,00 € Hifi
    16 DVD 100,00 € Hifi



    Voilà le code VBA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub UserForm_Initialize()
    Dim Base, n
    Dim Départ(1 To 15)
    Set tw = Me.MonArbre2
     
    'Initialisation des variables
    [BaseArticles].Sort key1:=[BaseArticles].Cells(1, 4)
    n = [BaseArticles].Rows.Count
    Base = [BaseArticles]
     
    'Initialisation de la racine de l'arbre
    'tw.Nodes.Add(noeud_père, twchild, création_noeud_courant, libellé_noeud)
    tw.Nodes.Add(, , "NoeudInit", "Début").Expanded = True
     
    '---Noeud Catégorie
    For i = 1 To n
        If IsError(Application.Match(Base(i, 4), Départ, 0)) Then
        tw.Nodes.Add("NoeudInit", twChild, "NoeudCat" & Base(i, 4), Base(i, 4)).Expanded = True
            'Vérifie le nombre de boucle nécessaire au total
            nd = nd + 1
            Départ(nd) = Base(i, 4)
        End If
    Next i
     
    '---Noeud Produit
    For i = 1 To n
        tw.Nodes.Add("NoeudCat" & Base(i, 4), twChild, "NoeudProduit" & Base(i, 1), Base(i, 2)).Expanded = True
    Next i
    End Sub

    Encore merci
    et bonne soirée

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    rebonsoir

    je ne comprend pas pourquoi dans mon formaulaire sa ne me prend pas en comtpe les noeuds.
    C'est à dire?
    C'est quoi la logique d'arborescence, à part les catégories de la colonne D?


    michel

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    S'il s'agit d'afficher les autres données sur la même ligne, tu peux tester:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub UserForm_Initialize()
    Dim Tw As TreeView
    Dim Base
    Dim n As Integer, i As Integer, Nd As Integer
    Dim Départ(1 To 15)
    Set Tw = Me.MonArbre2
     
    'Initialisation des variables
    [BaseArticles].Sort key1:=[BaseArticles].Cells(1, 4)
    n = [BaseArticles].Rows.Count
    Base = [BaseArticles]
     
    'Initialisation de la racine de l'arbre
    'tw.Nodes.Add(noeud_père, twchild, création_noeud_courant, libellé_noeud)
    Tw.Nodes.Add(, , "NoeudInit", "Début").Expanded = True
     
    '---Noeud Catégorie
    For i = 1 To n
        If IsError(Application.Match(Base(i, 4), Départ, 0)) Then
        Tw.Nodes.Add("NoeudInit", tvwChild, "NoeudCat" & Base(i, 4), Base(i, 4)).Expanded = True
            'Vérifie le nombre de boucle nécessaire au total
            Nd = Nd + 1
            Départ(Nd) = Base(i, 4)
        End If
    Next i
     
    '---Noeud Produit
    For i = 1 To n
        Tw.Nodes.Add("NoeudCat" & Base(i, 4), tvwChild, "NoeudProduit" & Base(i, 1), _
            Base(i, 2) & "  -  " & Base(i, 3) & "  (" & Base(i, 1) & ")").Expanded = True
    Next i
    End Sub


    bone soirée
    michel

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Explications
    Il s'agirait en faite de partir du point de départ puis de faire afficher les différentes catégories, puis pour chacune d'entres elle les produits correspondants et enfin d'afficher le prix dans un TextBox du formulaire (même si cette dernière n'est pas indispensable de suite il me faudra quand même le faire).
    Voilà en espérant avoir bien expliquer!

    Je veux donc une subdivision entre les catégories et les produits, et non pas les mettre tout sur la même ligne.

    merci

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    rebonsoir

    Tu as testé la macro dans mon précédent message?


    en complément, cette nouvelle procédure permet de géer l'affichage du prix lorsque l'on clique sur le noeud:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    Private Sub UserForm_Initialize()
    Dim Tw As TreeView
    Dim Base
    Dim n As Integer, i As Integer, Nd As Integer
    Dim Départ(1 To 15)
    Dim twNode As Node
     
    Set Tw = Me.MonArbre2
     
    'Initialisation des variables
    [BaseArticles].Sort key1:=[BaseArticles].Cells(1, 4)
    n = [BaseArticles].Rows.Count
    Base = [BaseArticles]
     
    'Initialisation de la racine de l'arbre
    'tw.Nodes.Add(noeud_père, twchild, création_noeud_courant, libellé_noeud)
    Tw.Nodes.Add(, , "NoeudInit", "Début").Expanded = True
     
    '---Noeud Catégorie
    For i = 1 To n
        If IsError(Application.Match(Base(i, 4), Départ, 0)) Then
        Tw.Nodes.Add("NoeudInit", tvwChild, "NoeudCat" & Base(i, 4), Base(i, 4)).Expanded = True
            'Vérifie le nombre de boucle nécessaire au total
            Nd = Nd + 1
            Départ(Nd) = Base(i, 4)
        End If
    Next i
     
    '---Noeud Produit
    For i = 1 To n
        Set twNode = Tw.Nodes.Add("NoeudCat" & Base(i, 4), tvwChild, "NoeudProduit" & Base(i, 1), _
            Base(i, 2))
     
            'mise en mémoire du prix dans le Tag
            With twNode
                .Expanded = True
                .Tag = Base(i, 3)
            End With
    Next i
    End Sub
     
     
     
    'Affiche le contenu du Tag (prix) dans le TextBox1 lorsque l'on
    'clique sur le noeud.
    Private Sub MonArbre2_NodeClick(ByVal Node As MSComctlLib.Node)
        TextBox1 = Node.Tag
    End Sub



    michel

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci vraiment à ce que tu fais pour m'aider, en vain je crois que je n'y arriverais pas, sa ne doit pourta&nt pas être si compliqué que sa mais je bloque, on me dis des erreurs et puis sa ne marche pas, je ne peux pas voir les noeuds, sa me met tout à la suite dans mon userform! c'est vraiment la galère.
    C'est dommage mais je crois que je vais en rester là.

    Maintenant si tu as un petit exemple qui marche met le moi en pièce jointe que je vois comment sa fonctionne ce serait vraiment sympa!

    Merci encore à très vite

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 150
    Points
    20 150
    Par défaut
    bonjour

    Tu peux tester le classeur en pièce jointe


    michel
    Fichiers attachés Fichiers attachés

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci pour le document, effectivement ton arbre marche très bien, je souhaitais arriver à quelque chose dans ce genre pour commencer avant d'aller à des problèmes plus concret mais aussi plus difficile!
    Mais ce qui me parait bizarre c'est que lorsque j'exporte par exemple le userform dans un autre classeur et que je copie exactement la même chose base et userform sa me met pour cette procédure ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    'Affiche le contenu du Tag (prix) dans le TextBox1 lorsque l'on
    'clique sur le noeud.
    Private Sub MonArbre_NodeClick(ByVal Node As MSComctlLib.Node)
        TextBox1 = Format(Node.Tag, "##,##0.00")
    End Sub
    erreur de compilation type non défini par l'utilisateur!!!
    C'est qaudn mêem fou que sa marche dans ton classeur et pas dans le mien! Sa peut venir d'où???

    Merci

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 239
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 239
    Points : 555
    Points
    555
    Par défaut
    Salut,

    Je vois que tu n'as pas mis MonArbre2mais MonArbre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub MonArbre2_NodeClick(ByVal Node As MSComctlLib.Node)
        TextBox1 = Format(Node.Tag, "##,##0.00")
    End Sub
    Alors qu'il est défini dans la procédure supérieure

    A+

Discussions similaires

  1. Problème avec VLookup sous VBA
    Par julio26 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 20/07/2007, 15h03
  2. Problème avec une instruction VBA
    Par Jpeg69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/05/2007, 13h58
  3. Problème avec un treeview
    Par adicor dans le forum MFC
    Réponses: 8
    Dernier message: 01/12/2006, 23h59
  4. Problème avec open() [Excel VBA]
    Par heddicmi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 17h21
  5. Problème avec Virtual Treeview
    Par bisounoursbleu dans le forum Composants VCL
    Réponses: 6
    Dernier message: 06/12/2004, 16h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo