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] Problèmes avec des tableaux dynamiques à deux dimensions et ReDim


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut [VBA/EXCEL] Problèmes avec des tableaux dynamiques à deux dimensions et ReDim
    Bonjour,

    J'ai un soucis avec des tableaux dynamique à deux dimensions. Je les ait déclarer comme suit dans mon programmes :
    Dim tab() As Variant

    puis dans mon algo, je récupère un entier et je fait : Redim tab(int,int). J'ai vérifié que mon entier avait bien une valeur différente de null et de 0.

    Le reste de mon algo alimente ce tableau. Malheureusement, il semble qu'aucunne données ne soit inscrite dans le tableau. Si je mets des tailles fixes : Dim tab(100,100) par exemple, mon programme fonctionne correctement.

    J'ai également vérifié que je rentrais pas plus de valeur que le tableau était grand (pas de débordement, si mon entier vaut 30, je ne peux pas rentrer plus de 30 valeurs).

    Je précise que le Redim se fait en début de programme quand le tableau ne contient aucune valeur (pas d'écrasement donc).

    Quelqu'un peut-il m'aider?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    1 - Dans un tableau on ne peut redimensionner que la derniére valeur
    2 - Ton tableau à 2 dimensions, donc tu dois fixer la premiére et redim la derniére

    Starec

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    bien sur que cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function testredim(ligne, colonne) As Boolean
    Dim a As Variant
    Dim b() As Variant
    ReDim a(1 To ligne, 1 To colonne)
    MsgBox ("tableau crée avec " & UBound(a, 1) & " lignes et " & UBound(a, 2) & " colonnes")
    ReDim b(1 To ligne, 1 To colonne)
    b(ligne, colonne) = "tableau crée avec " & UBound(b, 1) & " lignes et " & UBound(b, 2) & " colonnes"
    MsgBox (b(ligne, colonne))
    End Function
    cherche ton erreur ailleurs


    nb Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau. Mais sinon on peut redimer (pardon) ce qu'on veut
    Elle est pas belle la vie ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Re

    Merci Random, comme j'utilise toujours mes tableaux avec PRESERVE, je ne savais pas. Je dormirais encore moins bête ce soir.

    Starec

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    on peut même faire un redimetpreserve sans problème
    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
     
    Function redimetpreserve(ligne, colonne) As Boolean
    Dim boucle1 As Long, boucle2 As Long
    Dim a As Variant
    Dim b() As Variant
    ReDim a(1 To ligne, 1 To colonne)
    For boucle1 = 1 To ligne
    For boucle2 = 1 To colonne
    a(boucle1, boucle2) = ((boucle1 - 1) * colonne) + boucle2
    Next boucle2
    Next boucle1
    For boucle1 = 1 To ligne
    For boucle2 = 1 To colonne
    Debug.Print (a(boucle1, boucle2))
    Next boucle2
    Next boucle1
    ReDim b(ligne * 2, colonne * 2)
    For boucle1 = 1 To ligne
    For boucle2 = 1 To colonne
    b(boucle1, boucle2) = (a(boucle1, boucle2))
    Next boucle2
    Next boucle1
    a = b
    For boucle1 = 1 To ligne
    For boucle2 = 1 To colonne
    Debug.Print (a(boucle1, boucle2))
    Next boucle2
    Next boucle1
    End Function
    Elle est pas belle la vie ?

  6. #6
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par random
    bien sur que cela fonctionne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Function testredim(ligne, colonne) As Boolean
    Dim a As Variant
    Dim b() As Variant
    ReDim a(1 To ligne, 1 To colonne)
    MsgBox ("tableau crée avec " & UBound(a, 1) & " lignes et " & UBound(a, 2) & " colonnes")
    ReDim b(1 To ligne, 1 To colonne)
    b(ligne, colonne) = "tableau crée avec " & UBound(b, 1) & " lignes et " & UBound(b, 2) & " colonnes"
    MsgBox (b(ligne, colonne))
    End Function
    cherche ton erreur ailleurs


    nb Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau. Mais sinon on peut redimer (pardon) ce qu'on veut
    J'ai déclaré mes tableaux comme suit : tab() as variant etc...

    puis avant de commencer à les remplir je fais :

    ReDim tabFormation(1 To nbColab, 1 To nbColab) As Variant
    ReDim tabMaladie(1 To nbColab, 1 To nbColab) As Variant
    etc...

    nbColab = 30 dans mon programme.

    Eh bien si je veux inserer une valeur dans tabFormation(5,0) : problème d'indice.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    bien si je veux inserer une valeur dans tabFormation(5,0)
    hum hum
    ReDim tabMaladie(1 To nbColab, 1 To nbColab) As Variant
    le 5,0 n'existe pas essaye 5,1 on sait jamais
    Elle est pas belle la vie ?

Discussions similaires

  1. Problème avec des tableaux de string
    Par Electroniktor dans le forum C++
    Réponses: 2
    Dernier message: 15/03/2008, 15h29
  2. Problème avec des tableaux
    Par nawake dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/10/2007, 20h54
  3. [VBA-E]Problème avec des ToggleButton
    Par dilkas dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2007, 11h15
  4. [VBA-EXCEL] problème avec ma comparaison
    Par sebneb dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/02/2007, 13h19
  5. [VBA-E] Problème avec des dates !
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2006, 13h12

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