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 tableaux de variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Par défaut VBA tableaux de variable
    Bonjour à toutes et à tous,

    Voilà j'ai un onglet ( Feuil1) dans lequel se trouve des données (un tableau ≠ tableau de variable)

    Je souhaite intégrer ces données dans un tableau de variable par une boucle.

    J'ai donc fait:

    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
     
    Sub tab_varA()
     
    'Définition du tableau
    Dim tab_exemple()
     
    'Déclaration
    Dim dern_ligne As Variant
    Dim dern_col As Variant
    Dim i As Variant
     
    'définition des limites du tableau
    dern_ligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
    dern_col = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column
     
    'Enregistrement des valeurs dans le tableau
    For i = 0 To dern_ligne
        For j = 0 To dern_col
            tab_exemple(i, j) = Feuil1.Cells(i + 1, j + 1)
        Next
    Next
     
    End Sub
    Mais ça ne marche pas, j'ai un message d'erreur "l'indice n'appartient pas à la sélection",

    Si quelqu'un a une idée de l'erreur à corriger, je suis preneur.

    Merci à tous.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par manufer Voir le message
    Bonjour,

    Si vous voulez utiliser la matrice en dehors de la procédure tab_varA, il faut au moins la déclarer Private (ou Dim) en tête de module, voire Public si utilisée dans un autre module.
    Attention, dans l'exemple, les colonnes et lignes sont inversées car j'utilise Preserve dans le redimensionnement de la matrice.

    A tester :
    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
    38
    39
    40
    41
    42
     
    Option Explicit
     
    Public tab_exemple() As Variant
     
    Sub Testtab_varA()
     
    Dim I As Long
     
        tab_varA
     
         For I = LBound(tab_exemple, 2) To UBound(tab_exemple, 2)
            Debug.Print tab_exemple(0, I) & ", " & tab_exemple(1, I)
         Next I
     
     
    End Sub
     
    Sub tab_varA()
     
    'Déclaration
    Dim Dern_ligne As Long, Dern_col As Long, I As Long, J As Long
     
        Erase tab_exemple
     
        'définition des limites du tableau
        With Feuil1
             Dern_ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
             Dern_col = .Cells(1, .Columns.Count).End(xlToLeft).Column
     
             'Enregistrement des valeurs dans le tableau
             For I = 0 To Dern_ligne - 1
                 ReDim Preserve tab_exemple(Dern_col - 1, I)
                 For J = 0 To Dern_col - 1
                     tab_exemple(J, I) = .Cells(I + 1, J + 1)
                 Next J
             Next I
     
        End With
     
     
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Par défaut Suite
    Je crois avoir trouvé une piste:

    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
     
    Sub tab_varA()
     
    'Définition du tableau
    Dim tab_exemple()
     
    'Déclaration
    Dim dern_ligne As Variant
    Dim dern_col As Variant
    Dim i As Variant
    Dim j As Variant
     
     
     
    'définition des limites du tableau
    dern_ligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
    dern_col = Feuil1.Cells(1, Columns.Count).End(xlToLeft).Column
     
    ReDim tab_exemple(dern_ligne, dern_col)
     
    'Enregistrement des valeurs dans le tableau
    For i = 0 To dern_ligne
        For j = 0 To dern_col
            tab_exemple(i, j) = Feuil1.Cells(i + 1, j + 1)
            MsgBox tab_exemple(i, j)
     
        Next
    Next
     
    End Sub
    Mais j'ai encore un petit problème sur la dernière colonne sur laquelle je boucle.

  4. #4
    Membre confirmé
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Par défaut
    Merci Eric KERGRESSE,

    Je vais essayer.

  5. #5
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    1- pourquoi une boucle?

    2- Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ReDim tab_exemple(dern_ligne, dern_col)
    For i = 0 To dern_ligne
        For j = 0 To dern_col
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ReDim tab_exemple(0 To dern_ligne - 1, 0 To dern_col - 1)
    For i = 0 To dern_ligne - 1
        For j = 0 To dern_col - 1
    En effet, si, dans l'exemple, dern_ligne = 10, tu va boucler de la ligne 1 à la 10.
    Et tu vas donc mettre ces valeurs dans ta variable tableau, aux indices : de 0 à 9...

  6. #6
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Pourquoi une boucle quand VBA le fait en une ligne ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tab_exemple = Feuil1.Cells(1, 1).Resize(dern_ligne, dern_col).Value

  7. #7
    Membre confirmé
    Homme Profil pro
    gestion
    Inscrit en
    Mai 2017
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : gestion

    Informations forums :
    Inscription : Mai 2017
    Messages : 163
    Par défaut
    Ah cool,

    Il est vrai que si je peux faire en une ligne de code ce que je faisais avec 4 ou 5 lignes c'est meilleur.

    Ce que vous m'avez transmit fonctionne très bien merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/08/2010, 16h20
  2. [VBA-E]Problème Variable/Graphique
    Par 47-47 dans le forum Macros et VBA Excel
    Réponses: 32
    Dernier message: 21/02/2006, 10h34
  3. [Tableaux] Récuperer variable dans une fonction
    Par amarcil dans le forum Langage
    Réponses: 12
    Dernier message: 12/02/2006, 10h56
  4. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  5. [VBA excel] une variable pour 2 classeurs
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/01/2006, 09h42

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