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 :

Dimensionner tableau 3d [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 34
    Par défaut Dimensionner tableau 3d
    Bonjour,

    Je souhaite déclarer un tableau en 3 dimensions dont la taille dépend de 3 valeurs précédemment calculées.
    Pour initialiser un tableau, il faut utiliser des constantes, or les dimensions utilisées doivent être préalablement calculées dans mon cas et ne sont en aucun cas connues par avance.
    Quelque soit ma façon de procéder, j'ai rencontré des erreurs du type "Constant expression required" en initialisant mon tableau.
    La fonction ReDim n'est pas viable dans mon cas puisque toutes les dimensions doivent être modifiées et non juste la dernière si j'initialise mon tableau sans ses dimensions finales.
    Mon problème se résume donc en cette question: existe-t-il une méthode pour redimensionner un tableau de 3 dimensions ou pour créer des constantes dotées de valeurs préalablement calculées, pourquoi pas dans une autre fonction ,qui serviraient à dimensionner mon tableau lors de sa déclaration?

    Voici une de mes tentatives
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        'Détermination du nombre de i
        Range("F2").Select
        Do While Not (IsEmpty(ActiveCell))
            length_i = length_i + 1
            Range("F" & length_i + 2).Select
        Loop
        'Création d'une constante contenant le nombre de i
        Const l_i as Integer = length_i
     
        '###Même méthode pour les 2 autres dimensions du tableau ###
     
        'Création du tableau
        Dim tTab(1 to l_i, 1 to l_j, 1 to l_k) as integer
    Merci d'avance pour vos réponses

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Tu peux redimensionner un tableau en l'écrasant en utilisant Redim...

    Si tu veux préserver les valeurs écrites c'est Redim Preserve, mais tu ne pourras redimensionner que la dernière dimension dans ce cas là.

    Le redimensionnement coûte cher en temps, je te conseille te trouver tes paramètres et de ne redimensionner qu'une fois, puis de le remplir par la suite.

    En résumé: Tu peux effectivement utiliser Redim, je ne vois pas où serait ton problème.

    Si tu veux calculer tes variables de longueur de dimensions dans une fonction et les passer en array à ton sub, c'est possible, sinon par l'intermédiaire de variables globales aussi, sinon tu peux les écrire dans des feuilles ou dans le registre ou dans ta tête puis les entrere en msgbox, les publiposter sur un serveur pour aller les récupérer par la suite, les entrer dans une BD relationnelle et aller les chercher ou alors tout simplement faire un tableau géant qui englobera toutes les possibilités de ton tableau et n'en utiliser qu'une partie.

    Comme tu vois, tu as le choix

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 34
    Par défaut
    Merci EngueEngue pour ta réponse rapide!

    Concernant Redim j'avais fait quelques recherches avant de poster et j'ai lu quelque part que l'on ne pouvait modifier que la dernière dimension, après avoir écumé l'internet je ne sais pas si je pourrais retrouver ce passage
    Du coup si ça fonctionne pour toutes les dimensions d'un tableau c'est nickel!
    Merci pour toutes ces suggestions, si Redim n'est pas la solution optimale je vais plutôt passer par une de tes méthodes.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Redim te permet de redimensionner toutes les dimensions
    Redim Preserve uniquement la dernière.

    Redim Preserve sert à redimensionner un tableau déjà rempli en "préservant" les données de celui ci.

  5. #5
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    quelque soit le nombre de dimensions d'un tableau, pour l'alimenter avec des variables, il faut le déclarer non dimensionné et faire un ReDim ensuite...

    genre :
    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
    Sub Gogo(ParamDim1 As Byte, ParamDim2 As Byte, ParamDim3 As Byte)
    Dim OrmonthTab() As Variant
     
    ReDim OrmonthTab(ParamDim1, ParamDim2, ParamDim3)
     
    Stop 'visualisation fenêtre Variables Locales si voulu
    End Sub
     
     
    Sub AlimentationDesDim()
    Dim Blabla1 As Byte
    Dim Blabla2 As Byte
    Dim Blabla3 As Byte
     
    ' Code
    'Code
    Blabla1 = 10
    Blabla2 = 8
    Blabla3 = 6
    Call Gogo(Blabla1, Blabla2, Blabla3)
    ' Code ?
    End Sub
    vois ce Tuto ainsi que le lien vers les commandes de tableau qui y est incorporé
    Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel

    cordialement,

    Didier

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 34
    Par défaut
    @EngueEngue: en effet j'avais une petite incompréhension sur ReDim, tout est plus clair maintenant grâce à toi
    @Ormonth: Merci pour tes indications et ton très bon tuto

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

Discussions similaires

  1. [AC-2000] Dimensionnement tableau Excel depuis Access
    Par Gabout dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/10/2011, 20h17
  2. Dimensionnement tableau et compilation
    Par Blutch65 dans le forum Débuter
    Réponses: 3
    Dernier message: 06/06/2011, 21h45
  3. Dimensionner tableau word à l'aide d'une macro
    Par yannick113 dans le forum VBA Word
    Réponses: 4
    Dernier message: 07/12/2010, 11h14
  4. dimensionnement tableau latex
    Par l'acqua dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 4
    Dernier message: 30/07/2008, 10h50
  5. Réponses: 7
    Dernier message: 19/01/2006, 18h57

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