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 :

[VBA Excel] Un tableau dynamique dans un type utilisateur?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut [VBA Excel] Un tableau dynamique dans un type utilisateur?
    Bonjour,

    Je souhaiterais savoir si, dans VBA pour Excel,
    Il est possible de créer un tableau dynamique dans un type défini par
    l'utilisateur (dans un module simple par exemple), par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Public Type T_Tab
        tab()   As TroisVal
        index   As Integer
    End Type
    Pour information :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Type TroisVal
        v1   As Integer
        v2   As Integer
        v3   As Integer
    End Type
    Merci encore.
    Sébastien.

  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 144
    Points
    20 144
    Par défaut
    bonsoir

    je ne suis pas sur d'avoir bien compris mais tu peux essayer cette syntaxe


    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
    Option Explicit
    Option Base 1
     
    Public Type TroisVal
        v1 As Integer
        v2 As Integer
        v3 As Integer
    End Type
     
    Public Type T_Tab
        Tableau As TroisVal
        index As Integer
    End Type
     
     
    Sub Test()
        Dim xTab(1 To 2, 1 To 5) As T_Tab
        Dim Tv  As TroisVal
        Dim i As Integer
     
        For i = 1 To 5 'remplissage tableau
            Randomize
            Tv.v1 = Int((50 * Rnd) + 1)
            Tv.v2 = Int((50 * Rnd) + 1)
            Tv.v3 = Int((50 * Rnd) + 1)
     
            xTab(1, i).index = i
            xTab(2, i).Tableau = Tv
        Next i
     
        'controle le résultat du 3eme index
        Tv = xTab(2, 3).Tableau
        MsgBox "Index : " & xTab(1, 3).index & _
        vbCrLf & "v1 : " & Tv.v1 & _
        vbCrLf & "v2 : " & Tv.v2 & _
        vbCrLf & "v3 : " & Tv.v3
    End Sub


    bonne soiree
    michel

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut [VBA Excel] Un tableau dynamique dans un type utilisateur?
    Merci Michel,

    C'est bien ceci que je souhaitais.

    Le fait que je fasse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Type T_Tab
        Tableau() As TroisVal    ' <-- avec parenthèses
        index As Integer
    End Type
    Ca ne lui plaisait pas!

    J'ai tenté de laisser dans la définition de la structure T_Tab, l'attribut Tableau sans parenthèses et ais fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ReDim mon_tab(2) as T_Tab
    ReDim mon_tab(0).Tableau(2) as TroisVal     ' <-- ça, il aime pas du tout !!
    Qu'en penses-tu ??
    Sinon, je prend note pour ton post et merci encore !!
    Sébastien.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    J'ai testé ce que tu as fait Michel,
    Ca ne marche pas chez moi!

    Il ralle quand il vois ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xTab(2, i).Tableau = Tv
    Donc quand on passe un pointeur (Tableau n'en est pas un!)

    Sébastien.

  5. #5
    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 144
    Points
    20 144
    Par défaut
    rebonsoir

    Effectivement le terme Tableau n'etait pas tres judicieux de ma part, mais ça fonctionne tout de meme chez moi (testé avec Excel2002)

    tu as utilisé la macro tel quel ? tu as fais des modifications ?
    quel est le message d'erreur ?

    j'ai peut etre mal compris ta demande initiale...


    bonne soiree
    michel

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Bonjour Michel,
    Voilà comment je procède:
    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
    ' DEFINITION dans un module simple
     
    Public Type T_Index
        x    As Integer
        y    As Integer
        fait As Integer
    End Type
     
    Public Type T_Tab
        tab     As T_Index
        index   As Integer
        col     As Integer
    End Type
     
    Public wsBDLOC_tab_struct_plus()            As T_Tab
    Public wsBDLOC_tab_struct_plus_i            As Integer
     
    ' CODE dans une feuille
     
    Public Function InsererIndex(....)
        ReDim index(0) As T_Index
        index(0).x = x
        index(0).y = y
        index(0).fait = fait
     
        If (wsBDLOC_tab_struct_plus_i <= 0) Then
            ReDim wsBDLOC_tab_struct_plus(0) As T_Tab
            Dim table As T_Tab
            table.col = col_BDLOC
            table.index = 0
            table.tab = index         ' <-------- ça, il aime PAS !!
        End If
     
    End Function
    Il me dit dans une MSG BOX :
    Seuls les types définis par l'utilisateur et qui sont définis dans les modules d'objets publics peuvent être convertis depuis ou vers un variant, ou passés à des fonctions à liaison tardive.

    Merci encore!
    Sébastien.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 195
    Points : 82
    Points
    82
    Par défaut
    Re,

    Cela résoudrait mon problème si je savais comment manipuler COMPLETEMENT un tableau 2D sans qu'il plante!

    lorsque l'on fait, AVEC L'OPTION PRESERVE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim Preserve tab(x,y) as XXXXX
    Il plante! Il n'accepte pas de pouvoir redimensionner (avec preserve) le 'x' !!!! (on ne peux que redimensionner le 'y') !!

    Sais - tu comment procéder ??
    Sébastien.

  8. #8
    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 144
    Points
    20 144
    Par défaut
    rebonsoir

    sauf erreur de ma part , on ne peut redéfinir que la derniere dimension d'un tableau



    pour la ligne qui bloque, tu peux essayer



    bonne soirée
    michel

Discussions similaires

  1. Réponses: 3
    Dernier message: 29/12/2014, 18h30
  2. tableau dynamique dans un type de données
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/09/2013, 10h55
  3. Pb de chemin en VBA excel sur tableau croisé dynamique
    Par hiline6 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/02/2007, 14h23
  4. [VBA-Excel] Faire un filtre dans un tableau croisé dynamique
    Par SFrane dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/11/2006, 15h05
  5. [VBA excel]Inserer un graphique dans un formulaire
    Par girardeau dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2005, 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