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 :

Créer un tableau contenant un tableau? [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Créer un tableau contenant un tableau?
    Bonjour,

    j'ai créé un type de variable me permettant de stocker toute les informations facilement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Type transaction
        nom As String
        nb_mot_cle As Integer
        mot_cle() As String
        lien As String
    End Type
    Aucun soucis pour le nom, nb_mot_cle ou lien par contre il m'est impossible de redimensionner/utiliser mot_cle().
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub correction()
     
     Dim transaction_correction() As transaction
     
     ReDim Preserve transaction_correction(0).mot_cle(0)
     
    End Sub
    J'obtiens Erreur d’exécution '9' : l'indice n’appartient pas à la selection.

    Ce code marche par contre:

    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
     
    Public Type transaction
        nom As String
        nb_mot_cle As Integer
        mot_cle(100) As String
        lien As String
    End Type
     
    Sub main()
     
     Dim transaction_correction() As transaction
     
     ReDim Preserve transaction_correction(0)
     transaction_correction(0).mot_cle(0) = "salut"
     
    End Sub
    Seulement j'ai besoin de garder un taille variable pour le tableau mot_cle().
    Est-il possible en VBA de créer ce que j'essaye de faire? Je ne fait pas ce qu'il faut pour redimensionner?

    Merci de votre aide!

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu veux redimensionner un tableau qui n'existe pas encore, en préservant ces données ... c'est normal que ça plante

    il faut dimensionner le tableau la première fois ... et les fois d'après tu peux Redim Preserve

    essaye ça pour bien comprendre (c'est une méthode parmi tant d'autres), j'ai aussi supprimé des parenthèses qui n'avaient pas lieu d'être

    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
    Public Type transaction
        nom As String
        nb_mot_cle As Integer
        mot_cle() As String
        lien As String
    End Type
     
     
    Sub correction()
     
     Dim transaction_correction As transaction
     Dim Existe As Boolean
     
     With transaction_correction
        For i = 1 To 2
            If Not Existe Then
                ReDim .mot_cle(0)
                .mot_cle(0) = "toto"
                Existe = True
                MsgBox .mot_cle(UBound(.mot_cle))
            Else
                ReDim Preserve .mot_cle(UBound(.mot_cle) + 1)
                .mot_cle(UBound(.mot_cle)) = "nouveau toto"
                MsgBox .mot_cle(UBound(.mot_cle))
            End If
        Next i
     End With
     
    End Sub

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Points : 1 562
    Points
    1 562
    Par défaut
    Bonjour,

    Sauf erreur, comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim mot_cle() As String
    , vous ne pouvez pas l'utiliser tel quel pour le redimensionnement ....
    Voir également la syntaxe du Redim par l'aide .... votre code me semble erroné

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim LotIDAR(0 To WshTotRec, 0 To 10)
    Attention, avec PRESERVE, le ReDim ne marche que sur la dimension la plus élevée du tableau
    "Idéalement nous sommes ce que nous pensons. Dans la réalité, nous sommes ce que nous accomplissons." A.Senna
    et n'oubliez-pas de développer des .... sourires ^_^

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2015
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    J'ai fini par trouver un solution simple: le faire en 2 fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Public Type transaction
        nom As String
        nb_mot_cle As Integer
        mot_cle() As String
        lien As String
    End Type
     
    Sub main()
     
     Dim transaction_correction() As transaction
     
     ReDim transaction_correction(0)
     ReDim transaction_correction(0).mot_cle(0)
    End Sub
    De cette façons ça marche.

    Merci pour votre aide!

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

Discussions similaires

  1. [XL-2010] Créer un TCD Excel à partir d'un tableau contenant des combobox
    Par facteur dans le forum Excel
    Réponses: 5
    Dernier message: 30/01/2015, 16h49
  2. Réponses: 12
    Dernier message: 12/02/2013, 11h35
  3. [XL-MAC 2011] créer un tableau contenant un tableau
    Par Aurore24 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/01/2012, 18h24
  4. Réponses: 5
    Dernier message: 19/07/2007, 13h06
  5. Réponses: 9
    Dernier message: 22/09/2005, 11h52

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