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 :

Tableau multidimensionnel : principe de base?


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut Tableau multidimensionnel : principe de base?
    Salut

    Je viens de decouvrir les tableaux multidimensionnels ; j'ai lu attentivement ce que je trouvais ici :

    http://www.anthony-vba.kefra.com/vba...ensional_Array

    http://silkyroad.developpez.com/vba/tableaux/

    et tant que je restais sur 2 dimensions, ca allait tres bien.
    Mais là j'ai besoin d'un 3eme niveau, et ca coince.

    - 1er niveau : nom de repertoire et sous repertoire : objFolder.Name
    Nb de objFolder : 130

    - 2eme niveau : noms de fichiers contenu dans objFolder : objFile.Name
    Nb de objFile par objFolder : 2

    - 3eme niveau : chemin de objFile : objFile.Path
    Nb de chemin par objFile : 1

    Je dimensionne donc mon tableau avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Base 1
      Redim arrFiles(130,2,1)
    Mes questions :
    Comment charger mes objFolder.Name (1er niveau) separement ?
    Comment charger mes objFile.Name (2eme niveau) separement ?
    Comment charger mes objFile.¨Path (3eme niveau) separement ?

    Je tente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      arrFiles(1,0,0) = objFolder.Name
      arrFiles(1,1,0) = objFile.Name
      arrFiles(1,1,1) = objFile.Path
    puis pour le 2eme fichier du repertoire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    arrFiles(1,2,0) = objFile(2).Name
    arrFiles(1,2,1) = objFile(2).Path
    mais ca ne lui plait pas du tout....

    Je crois que la structure de multidimensionnel m'echappe et je n'arrive pas à isoler le 1er niveau

    Est ce que quelqu'un pourrait m'eclaire ?

    D'avance merci tout plein

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Comme tu explique ru n'a pas 3 niveaux mais trois variables dans la 2ème dimention.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Base 1
    Redim arrFiles(130,3)
    Mes questions :
    Comment charger mes objFolder.Name (1er niveau) separement ?
    Comment charger mes objFile.Name (2eme niveau) separement ?
    Comment charger mes objFile.¨Path (3eme niveau) separement ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    arrFiles(1,1) = objFolder.Name
    arrFiles(1,2) = objFile.Name
    arrFiles(1,3) = objFile.Path
    A+

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous
    LeForestier, je crois qu'il y a une p'tite erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    dim ArrFiles()
    '....................
    Redim ArrFiles(3,1)
    ArrFiles(1,1) = objFolder.Name
    ArrFiles(2,1) = objFile.Name
    ArrFiles(3,1) = objFile.Path
    '........
    Redim preserve ArrFiles(3,2)
    '........ etc
    Seul le dernier indice peut être modifié
    A+

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut
    Hello

    Merci pour vos reponses mais je ne suis pas sure de bien comprendre.
    Le tableau multidimensionnel ne permet pas de stocker des valeurs et des sous valeurs ?

    Je voudrais conserver la structure Repertoire (contient) Fichiers & Path, c'est pour ca que je parlais de niveau.

    Repertoire1
    - Fichier A - Path A
    - Fichier B - Path B
    Repertoire2
    - Fichier C - Patch C
    Repertoire3 (0 fichiers)

    .....

    Le Forestier, dans le tableau à 2 dimensions, comment est ce que je vais charger le 2eme fichier d'un repertoire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    arrFiles(1,1) = objFolder.Name
    arrFiles(1,2) = objFile.Name
    arrFiles(1,3) = objFile.Path
    Gorfael, je comprends ton exemple.
    Dans mon code, les dimensions sont connues avant le chargement du tableau, pour eviter les probleme de Preserve.
    - nb de repertoires et sous repertoires
    - nb de fichiers

    Mais quand je vais vouloir recuperer la colonne 1, je vais avoir des noms de folders et de fichiers confondus.

    Le resultat que je voudrais obtenir au final :

    http://lh4.ggpht.com/_7_mWyUTDzaY/Sl...bleauMulti.JPG

    Mais comment est ce que je reference :

    • la case A4 ? Logiquement, je voudrais un (1,0,0)
    • la case B5 ? Logiquement, je voudrais un (1,1,0)
    • la case C5 ? Logiquement, je voudrais un (1,1,1)
    • la case B6 ? Logiquement, je voudrais un (1,2,0)
    • la base C6 ? Logiquement, je voudrais un (1,2,1)


    Le but est de comparer la structure de 2 folders sources, et de trouver ou non les equivalences de fichiers.
    J'ai donc 2 tableaux structurés de la meme maniere arrFilesNew et arrFilesOld.
    Que j'affiche dans un userform contenant 2 listbox de chacune 3 colonnes.

    Ma question c'est vraiment de savoir si les tableaux multidimensionnels permettent de stocker en conservant une structure sur plusieurs niveaux.

    Je suis peut etre passé à côté de vos reponses, est ce que c'est possible de reexpliquer un poil ?

    Merci, merci

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Citation Envoyé par Gorfael Voir le message
    Salut à tous
    LeForestier, je crois qu'il y a une p'tite erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim ArrFiles()
    '
    Redim preserve ArrFiles(3,2)
    '........ etc
    Seul le dernier indice peut être modifié
    A+
    Salut Gorfael, où vois-tu qu'il est question de Redim Preserve...
    Note que j'avais écrit la remarque dans mon poste et que je l'ai enlever pour pas l'induire en erreur.

    Pour la réponse..
    Ca ne correspond plus à ce que tu explique dans ton premier poste...
    et 1° Pas besoin de déclarer le tableau et ensuite le valider puisque c'est dans la même sub.
    Dim arrFiles(130,2,2)

    Repertoire=1
    arrFiles(1,1,1) = Fichier A
    arrFiles(1,1,2) = Path A
    arrFiles(1,2,1) = Fichier B
    arrFiles(1,2,2) = Path B

    Repertoire=2
    arrFiles(2,1,1) = Fichier A
    arrFiles(2,1,2) = Path A
    arrFiles(2,2,1) = Fichier B
    arrFiles(2,2,2) = Path B
    etc..
    A+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 54
    Par défaut
    Ok merci Le Forestier

    Avec l'aide de vos reponses,

    Ce que je comprends, c'est qu'on ne peut charger des valeurs que dans la derniere dimension.

    Alors j'ai opté pour un compromis inspiré de vos exemples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    arrFiles(1,1,1) = Nom du repertoireA
    arrFiles(1,1,2) = Nom du fichier1
    arrFiles(1,1,3) = Path du fichier1
     
    arrFiles(1,2,2) = Nom du fichier2
    arrFiles(1,2,3) = Path du fichier2
    arrFiles(2,1,1) = Nom du repertoireB
     
    ....

    Ca m'oblige à charger ensuite mes ListBox ligne par ligne,

    mais l'essentiel c'est que ca fonctionne.

    Merci à vous deux pour votre aide

    Bon week end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/11/2005, 23h36
  2. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 10h03
  3. [principe de base] Objets composés d'objets
    Par brousaille dans le forum JDBC
    Réponses: 11
    Dernier message: 09/02/2005, 19h13
  4. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 12h29
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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