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 :

Tableaux, transferts & erreur d'indice


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut Tableaux, transferts & erreur d'indice
    yo

    Je cherche a recopier tous les elements d'un premier tableau tabComboBoxesWIP dans un second tableau tabTMP, et ce une fois par occurences rencontrees dans tabComboBoxesWIP.

    Quand je lance cette copie depuis mon programme, j'obtiens cette erreur: "L'indice n'appartient pas a la selection". J'ai localise celle-ci ligne 32, mais je n'en connais pas les raisons...

    Le code:
    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
     
    Dim tabComboBoxesWIP As Variant
    Dim tabTMP As Variant
     
    Sub fillDestinationsInitialize(fileToLookInto As String, comboBoxToFill As Control, nColPlage As Integer, nbRowBeginning As Integer)
        ' charge la liste de choix a l'entree dans le champ
        Dim i As Integer
        Dim j As Integer
        Dim maxTabSRows As Integer
        Dim comboBoxValueTmp As String
        Dim Wk As Workbook
        Dim Ws As Worksheet
        Dim tokenAlreadyIn As Boolean
        i = j = maxTabSRows = 0
        tokenAlreadyIn = False
     
        comboBoxToFill.Clear
     
        Set Wk = Workbooks.Open(fileName:=fileToLookInto)
        maxTabSRows = ActiveSheet.UsedRange.Rows.Count
        Set plage = ActiveSheet.Range(Cells(1 + nbRowBeginning, nColPlage), Cells(maxTabSRows, nColPlage))
     
        tabComboBoxesWIP = plage
     
        ActiveWorkbook.Close
     
        ReDim tabTMP(1)
     
        For i = LBound(tabComboBoxesWIP) To UBound(tabComboBoxesWIP)
            For j = LBound(tabTMP) To UBound(tabTMP)
                If tabTMP(j) <> tabComboBoxesWIP(i) Then
                    ReDim Preserve tabTMP(UBound(tabTMP) + 1)
                    tabTMP(UBound(tabTMP)) = tabComboBoxesWIP(i)
                Else
                    Exit For
                End If
            Next j
        Next i
     
        Application.ScreenUpdating = True
    End Sub
    Quelqu'un pourrait m'expliquer la source de mon erreur ?

    Merci.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    Je crains que l'erreur ne provienne du couple:

    - Set Plage = Range.... (bi-dimensionnel selon Excel/VBA)
    - tabComboBoxesWIP(i) (Mono-dimensionnel)

    Tu n'as pas un message indiquant que le nombre de dimensions du Tableau est mauvais ?
    Une array en VBA possède une sorte de mode automatique qui permet de se redimensionner en fonction d'une plage de cellule. C'est une safearray pour éviter les erreurs de taille entre tableau d'un coté et plage de cellule de l'autre.

    Essaie d'enlever le l'indice i et sa parenthèse pour voir si ça passe. Par contre, tu auras 2 dimensions de créés, 1 pour les lignes, 1 autres pour les colonnes.

    A+

  3. #3
    Membre actif
    Inscrit en
    Juin 2013
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Juin 2013
    Messages : 38
    Par défaut
    Merci de la reponse, mais le programme persiste a localiser l'erreur a la ligne 32: "l'indice n'appartient pas a la selection".
    De plus, je ne comprends pas en quoi plage serait a deux dimensions...

    Je ne vois pas.

  4. #4
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = LBound(tabComboBoxesWIP,1) To UBound(tabComboBoxesWIP,1)

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    En ligne 32

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par wipMan Voir le message
    De plus, je ne comprends pas en quoi plage serait a deux dimensions...
    Salut,

    Lorsque tu associe un tableau à une plage de cellules Excel, la SafeArray créée 2 dimensions si la range présente plus d'une cellule et ce même si la range ne possède qu'une seule colonne.
    1 dimension pour les lignes et 1 dimension pour les colonnes, du coup, si tu associe tabComboBoxesWIP avec une Range ("A1:A100"), tu te retrouve avec un tableau tabComboBoxesWIP(Nligne,Ncolonne) soit ici tabComboBoxesWIP(1 To 100, 1 To 1).

    Pour boucler sur un seul élément à la fois, il faut préciser le Numéro de ligne(dim 1) et le n° de colonne(dim2) (coordonnée X, Y d'une case tableau en quelque sorte), même si il n'y a qu'une seule colonne, à savoir ici :
    tabComboBoxesWIP(1,1), puis
    tabComboBoxesWIP(2,1)
    tabComboBoxesWIP(3,1) etc...

    C'est comme ça que fonctionne les Array sur Excel/VBA, peut être pas comme sur les autres langages de programmation.
    Dernière modification par Invité ; 13/08/2013 à 20h21.

Discussions similaires

  1. [Tableaux] Message d'erreur déroutant
    Par Damzz dans le forum Langage
    Réponses: 2
    Dernier message: 27/04/2006, 02h04
  2. [Tableaux] Transfert d'arguments
    Par Ricou13 dans le forum Langage
    Réponses: 5
    Dernier message: 27/03/2006, 21h42
  3. [Tableaux] Recuperer le plus grand indice d'un tableau
    Par schnito dans le forum Langage
    Réponses: 4
    Dernier message: 31/01/2006, 20h01
  4. Réponses: 2
    Dernier message: 07/12/2005, 18h32
  5. [Tableaux] message d'erreur
    Par ista9im dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2005, 19h56

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