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 :

La méthode index [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut La méthode index
    Bonjour à tous,

    Je cherche des explications sur la méthode index:

    j'ai fait ce petit code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For i = 2 To UBound(a, 1)
            If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then
                k = Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)
                For j = 1 To 6
                    b(j, k) = a(i, j)
                Next j
            End If
    next i
    Je voudrais une explication sur ce que fait index et surtout si je l'utilise bien car je ne comprend pas grand chose à l'aide excel sur cette méthode...

    pourquoi cette syntaxe ne fonctionne pas?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     k = Application.Match(a(i, 2), b(), 0)
    est ce que le fait de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(b(), 2, 0)
    veut bien dire qu'il faut faire la recherche uniquement dans la première dimension de mon tableau b avec comme valeur 2 en gros dans b(2,0), b(2,1) b(2,2) b(2,3) etc... ??

    En fait je vois que cette syntaxe fonctionne mais je voudrais savoir précisement ce qu'elle fait.... merci d'avance

    bonne journée


    PS: le code complet si cela vous aide à comprendre ce qu'est b() et a()

    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
    Sub Transfert()
    Dim a() As Variant
    Dim b() As Variant
    'Workbooks.Open Filename:="\\frmant02\ctrlbact\Test\Recap.xlsm"
    With ThisWorkbook.Worksheets("Test")
        a = .Range("a1").CurrentRegion.Value
        b = Application.Transpose(Workbooks("Recap").Worksheets("Test").Range("a1").CurrentRegion.Value)
        For i = 2 To UBound(a, 1)
            If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then
                k = Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)
                For j = 1 To 6
                    b(j, k) = a(i, j)
                Next j
            Else
                ReDim Preserve b(UBound(b, 1), UBound(b, 2) + 1)
                For j = 1 To 6
                    b(j, UBound(b, 2)) = a(i, j)
                Next j
            End If
        Next i
    End With
    Workbooks("Recap").Worksheets("Test").Range("a1:f100").ClearContents
    Workbooks("Recap").Worksheets("Test").Range("a1").Resize(UBound(b, 2), UBound(b, 1)).Value = Application.Transpose(b())
    End Sub

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour !

    Index n'est pas une méthode mais une fonction de formule de feuille de calculs d'Excel !
    Donc toute information utile se trouve déjà dans l'aide d'Excel (pas celle du VBA) …

    Ensuite, il serait opportun d'expliquer ce que tu cherches à réaliser !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  3. #3
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    D'accord merci

    C'est pour ca que je trouvais rien sur l'aide vba. Je vais aller voir directement sur la formule merci

    En fait , et peut etre que je monte une usine à gaz pour rien mais:
    j'ai deux classeurs différent A et B avec la même structure mais pas les même données
    je cherche à ce que quand A est modifié, les infos viennent s'ajouter dans le classeur B. En gros A est le ficheir de travai let B le fichier récapitulatif afin d'éviter le partage du classeur B car beaucoup de personne travaillent sur le même fichier. Je pensai donc faire des classeurs séparés et faire un transfert via un bouton d'ou mon code que je commente pour aider à comprendre:

    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
    Sub Transfert()
    Dim a() As Variant 'varaible tableau du classeur A
    Dim b() As Variant 'varaible tabeau du classeur B
    'Workbooks.Open Filename:="\\frmant02\ctrlbact\Test\Recap.xlsm" 'ouvre classeur B
    With ThisWorkbook.Worksheets("Test") 'avec la feuille test du classeur A
        a = .Range("a1").CurrentRegion.Value 'definit a
        b = Application.Transpose(Workbooks("Recap").Worksheets("Test").Range("a1").CurrentRegion.Value) 'definit b
        For i = 2 To UBound(a, 1) 'variable i pour boucler sur a (sur les code référence)
            If Not IsError(Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0)) Then 'si on trouve a dans b alors
                k = Application.Match(a(i, 2), Application.Index(b(), 2, 0), 0) 'on rempli b a partir de a
                For j = 1 To 6
                    b(j, k) = a(i, j)
                Next j
            Else 'si on trouve pas a dans b on crée les données dans b
                ReDim Preserve b(UBound(b, 1), UBound(b, 2) + 1)
                For j = 1 To 6
                    b(j, UBound(b, 2)) = a(i, j)
                Next j
            End If
        Next i
    End With
    Workbooks("Recap").Worksheets("Test").Range("a1:f100").ClearContents
    Workbooks("Recap").Worksheets("Test").Range("a1").Resize(UBound(b, 2), UBound(b, 1)).Value = Application.Transpose(b())
    End Sub

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    je n'en suis pas sur mais je ne crois pas que match renvoie une erreur en cas de réponse négative mais plutôt zero
    parti de la ton test "iserror" est hors contexte donc tout le reste plante

    methode index

    application.index(tableau de référence(plage.value ou variable tableau, ligne ,colonne)

    pour te familiariser avec la fonction index je te propose des petites démos de code afin que tu puisse déterminer correctement la nuance en utilisant le 2 ou 3 eme argument
    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
    quelque exemples 
    Sub tt()
        newarray = Array(100, 200, 300, 400, 500, 600, 700, 800, 900, 1000, 1100, 1200, 1300, 1400, 1500)
        tableau = Range("A1:C15").Value
        MsgBox UBound(tableau, 1)
        'Récupérer la colonne 3 dans un tableau a 2 dim
        Vecteur = Application.WorksheetFunction.Index(tableau, 0, 3)
        Debug.Print Vecteur(1, 1)
        'Récupérer la ligne 1 dans un tableau a 1 dim (array)
        Vecteur = Application.WorksheetFunction.Index(tableau, 1, 0)
        Debug.Print Join(Vecteur, ",")
     
        'récupérer une colonne d'un tableau dans un array a 1 dimention
        Vecteur = Application.Transpose(Application.Index(tableau, , 2))
        Debug.Print Join(Vecteur, ",")
        'injecter un array  1 dim dans un colonne d'un tableau a 2 dim
        colonne = Application.WorksheetFunction.Index(tableau, 0, 3)
        colonne = Application.Transpose(newarray)
        Debug.Print colonne(1, 1)
        Cells(17, 1).Resize(UBound(tableau), 3) = tableau
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Match - la fonction EQUIV de formule de feuille de calculs d'Excel vf - renvoie forcément une erreur sans correspondance !

    La raison pour laquelle mieux vaut éviter WorksheetFunction et la tester directement ou l'affecter à une variable Variant.

    En dehors de IsError, le résultat peut aussi être vérifié via IsNumeric

  6. #6
    Membre chevronné
    Homme Profil pro
    autodidacte
    Inscrit en
    Novembre 2013
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 517
    Par défaut
    bonjour et merci à tous les deux pour vos explications.

    C'est bcp plus clair +1


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

Discussions similaires

  1. Méthodes d'indexation de fichiers
    Par tcheffa dans le forum Général Java
    Réponses: 3
    Dernier message: 10/08/2011, 16h05
  2. Réponses: 2
    Dernier message: 23/06/2011, 17h03
  3. Index de méthode de message dupliqué
    Par lemarquisien dans le forum Web & réseau
    Réponses: 8
    Dernier message: 14/05/2009, 12h33
  4. Méthodes .Index et .Seek et migration vers SQL Server.
    Par Cerberus26 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/09/2006, 13h26
  5. Méthodes .Index et .Seek et migration vers SQL Server.
    Par Cerberus26 dans le forum Access
    Réponses: 3
    Dernier message: 15/09/2006, 11h37

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