VBA Tableau

Résolu
Bonjour,

voilà je fais une petite macro sous excel, et à un moment je dois utilisé un tableau de dimension 2!

'création de tableau
Type Tableau
  ligne() As Integer
  numéro() As Integer
End Type

Dim tab1() As Tableau
ReDim tab1(J)


et lorsque je souhaite lancer ma macros ! j'ai une erreur du type erreur de compilation , instruction incorrecte dans une précedure
en me soulignant ma ligne en gras !
si quelqu'un pourrais m'aider merci

7 réponses

  1. C'est normal!

    regarde dans l'aide de excel

    avec les mots clé : Preserve redim tableau
    tu verras qu'il n'est pas possible de redimensionner un tableau à 2 dimensions.
    pour une dimension unique on peut faire comme ça mais il y a d'autres méthodes.
    Public ListeUnites() As String
    sub test()

    For i = 0 To nbrlig - 1
    ReDim Preserve maListe(i + 1)
    ' le tableau contient le code monétaire, un séparateur, la désignation
    maListe(i) = Range("A3").Offset(i, 0).Value
    Next i
    end Sub
    1. slt biddouilleur et merci d'essayer de m'aider

      j'avais cherché justement comment redimensioner

      j'ai trouvé

      redim tab(0)
      redim preserve tab(2)
      
      tab(1).var1 = 4
      tab(2).var2 = 5


      mais je savais pas en quoi sa consisté si tu peus m'expliqué le principe ca serrais sympa :)
  2. Bonjour,

    Le mot réservé [ Preserve ] permet de conserver les données déjà insérer
    dans le tableau au moment du redimensionnement.

    Tel que spécifié, Excel ne permet pas de redimmensionner un tableau
    défini dans un type.

    Il est possible par contre de dimensionner l'intérieur d'un type selon une
    constante.

    Exemple :

    Option Explicit
    
    ' Création de tableau
    Type Tableau
      Ligne As Integer
      Numero As Integer
    End Type
    
    Type Balance
            Nombre(5) As Integer
    End Type
    
    Dim Bloc() As Balance
    Dim Tab1() As Tableau
    '
    
    Sub Essai()
    
        Dim J As Long, Message As String
        
        For J = 1 To 2
            ReDim Preserve Tab1(J)
            Tab1(J - 1).Ligne = (50 * J)
            Tab1(J - 1).Numero = (100 * J)
        Next J
        
        For J = 1 To 2
            ReDim Preserve Bloc(J)
            Bloc(J - 1).Nombre(0) = (10 * J)
            Bloc(J - 1).Nombre(1) = (20 * J)
            Bloc(J - 1).Nombre(2) = (30 * J)
            Bloc(J - 1).Nombre(3) = (40 * J)
            Bloc(J - 1).Nombre(4) = (50 * J)
        Next J
        
        Message = ""
        For J = 1 To 2
            Message = Message & Str(Bloc(J - 1).Nombre(0)) & vbLf
            Message = Message & Str(Bloc(J - 1).Nombre(1)) & vbLf
            Message = Message & Str(Bloc(J - 1).Nombre(2)) & vbLf
            Message = Message & Str(Bloc(J - 1).Nombre(3)) & vbLf
            Message = Message & Str(Bloc(J - 1).Nombre(4)) & vbLf
        Next J
        
        MsgBox Message
        
    End Sub
    '
    


    Lupin
    1. slt lupin!
      hélas je comprend pas le fait de créer balance et bloc !

      un petit exemple

      Public list()
      
      Type Tableau
        ligne() As Integer
        numero() As Variant
      End Type
      Sub test()
      
      Worksheets(2).Activate
      
      'création de tableau
      Dim tab1() As Tableau
      
      ReDim tab1(10, 2)
      For I = 2 To F = 10
      
      tab1(I).ligne = 8
      tab1(I).numero = hu12hu
      
      Next I
      End Sub
      
      1. et je pense pas avoir besoin d'utiliser la fonction préserve !
        pour ce qui est tu petit bout de code plus c' est un exemple en bcp plus petit de ce que je voufrais faire!
        mais mm ceelui ci ne fonctionne pas :(
    2. re :

      Voilà quelques explications, enfin j'espère que tu comprendras :-)

      Option Explicit
      
      Public List()
      
      Type Tableau
          ' Ici tu déclare 2 variables de type
          ' tableau () à l'intérieur d'un type
          ' C'est à mon avis ce qui ne va pas !
          Ligne() As Integer
          Numero() As Variant
          ' Il faut déclarer le dimensionnement
          ' des 2 variables avec une constante
          'Ligne(2) As Integer
          'Numero(2) As Variant
      End Type
      '
      
      Sub test()
      
          Dim F As Long
      
          Worksheets(2).Activate
      
      
          'création de tableau
          Dim tab1() As Tableau
      
          ReDim tab1(10)
          
          ' Ici tu viens de redimensionner tab1 à 10 donc de [ 0 à 9 ]
          ' F = 9
          For I = 2 To F
              ' Ici tu accède à la variable Ligne
              ' sans en préciser la position dans
              ' le tableau
              tab1(I).Ligne = 8
              tab1(I).Numero = hu12hu
              ' On devrait trouver quelque chose
              ' comme ceci :
              'tab1(I).Ligne(0) = 8
              'tab1(I).Numero(0) = hu12hu
              'tab1(I).Ligne(1) = 8
              'tab1(I).Numero(1) = hu12hu
          Next I
          
      End Sub
      '
      

      Lupin
      1. d'accord lupin! j'ai du m'enbrouiller !
        je voulais juste créer un tableau de 2 colonne et de 68 lignes par exemple

        donc si je fait ca ! c'est bon ?

        Type Tableau
          
            Ligne As Integer
            Numero As Variant
        
        End Type
        
        sub test()
        
         Dim tab1() As Tableau
        
            ReDim tab1(2,68)


        au faite je pense que la premiére erreur du un premier post vient du fait que je créer le type du tableau et le tableau dans un sub! c'est bien ce ?

        encore merci Mr Lupin
    3. re :

      Un tableau à 2 colonnes et 68 lignes

      Option Explicit
      
      Type Tableau
          Ligne As Integer
          Numero As Variant
      End Type
      '
      
      Sub test()
      
          Dim tab1() As Tableau
          Dim I As Long
      
          ReDim tab1(68)
      
          For I = 0 To 67                            ' 68 Lignes
              tab1(I).Ligne = 8                     ' Colonne 1
              tab1(I).Numero = hu12hu         ' Colonne 2
          Next I
      
      End Sub
      '
      

      Lupin