Posez votre question Signaler

VBA Tableau [Résolu]

dy - Dernière réponse le 22 nov. 2008 à 09:05
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
Lire la suite 

VBA Tableau »

10 réponses
Réponse
+0
moins plus
up !xD
Ajouter un commentaire
Réponse
+0
moins plus
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
dy - 21 nov. 2008 à 11:27
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 :)
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
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
dy - 21 nov. 2008 à 14:55
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 :(
Ajouter un commentaire
Réponse
+0
moins plus
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
dy - 21 nov. 2008 à 16:56
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
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
excellent je le garde
Ajouter un commentaire
Ce document intitulé « VBA Tableau » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
5 extensions si vous voulez revenir à l'ancien Facebook