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 :

Tableau de taille non prédéfinie


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Points : 40
    Points
    40
    Par défaut Tableau de taille non prédéfinie
    Bonjour !
    J'aimerais créer un tableau de taille non prédéfinie pour pouvoir le redimensionner après (ne sachant pas combien d'éléments je vais mettre dedans). Mon code est le suivant :


    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
    43
    44
    45
    Option Explicit
    Public MSN() As Integer
    
    Sub listes()
    
        Dim tbl As Range, tbl2 As Range, cel As Range, cel2 As Range
        Dim n As Integer
        
        Set cel = ThisWorkbook.Worksheets("Sheet1").Range("A1")
        Set cel2 = ThisWorkbook.Worksheets("Sheet3").Range("A1")
        
        'Selection des msn; copier coller en feuille 3
        Set tbl = cel.CurrentRegion
        Set tbl = tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, 1)
        tbl.Copy Destination:=cel2
        
        'Suppression des doublons
        n = 1
        Do While Cells(n, 1) <> ""
        If Cells(n, 1) = Cells(n + 1, 1) Then
        Rows.Item(n).Delete
        Else
        n = n + 1
        End If
        Loop
        
        'Rentrée des données dans un tableau
        n = 1
        MSN(1) = cel2
        Do While cel2.Offset(n, 0) <> ""
        MSN(n+1) = cel2.Offset(n, 0)
        n = n + 1
        Loop
        
        'Calcule et redimensionne longueur du tableau
        Set tbl2 = cel2.CurrentRegion
        ReDim Preserve MSN(tbl2.Rows.Count)
        
        'Entre ces données dans la listbox adéquat
        UserForm1.ListBox1.List = MSN
        
        '"Nettoie" la feuille 3
        tbl2.ClearContents
         
    End Sub
    Seulement ce qu'il y a en gras ne fonctionne pas ("L'indice n'appartient pas à la selection"...). Est-ce que les indices des éléments du tableau commencent bien par 1 ? Est-ce que je peux utiliser ces indices alors que je n'ai pas donné de dimension à mon tableau ?
    Ou plus simplement comment fait-on pour remplir un tableau sans taille ... ?

  2. #2
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut,

    ton redim preserve est mal placé.

    Il faut redimensionner à une dimension au moins egale à l'indice à utiliser avant l'usage.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    ?? Vous pouvez expliciter ?

    Ok, je viens de comprendre où il fallait mettre le reDim. J'ai toujours pas compris la fin de votre 2e phrase mais mon code marche... C'est l'essentiel !

  4. #4
    Candidat au Club
    Inscrit en
    Août 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Août 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Pour info, la numerotation des tableaux commence a 0.

    Par exemple, si tu declares
    tab contiendra 3 cases: tab(0), tab(1) et tab(2)

    L'option base te permet de choisir si la numerotation commence a 0 ou a 1
    e.g., si tu places
    en haut de ton code, la numerotation commencera a 1.

    Je te recommande fortement de choisir des le debut le type de numerotation et de t'y tenir, sinon on se melange vite les pinceaux

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Merci pour l'info bryce83; je suivrai ton conseil...

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Il faut redimensionner à une dimension au moins egale à l'indice à utiliser avant l'usage.
    cela signifie que si i est superieur à la taille de MSN (Ubound(msn)) alors il faut redimensionner la table MSN avant de pouvoir utiliser l'indice I qui est hors sélection.

    Redim preserve MSN(i)
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 46
    Points : 40
    Points
    40
    Par défaut
    Ok ! Merci beaucoup !!

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

Discussions similaires

  1. [XL-2010] Déclarer un tableau de taille non connue
    Par raphael.abulker dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2014, 09h45
  2. Tableau de taille non fixe
    Par nouvelinscrit dans le forum C#
    Réponses: 8
    Dernier message: 09/07/2010, 11h48
  3. Réponses: 24
    Dernier message: 26/04/2007, 15h20
  4. [c++] Tableau avec taille initiale dynamique
    Par mister3957 dans le forum C++
    Réponses: 15
    Dernier message: 22/11/2005, 11h33
  5. Tableau et taille memoire
    Par timothee95 dans le forum C++
    Réponses: 5
    Dernier message: 07/11/2005, 00h02

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