VBA utilisation de tableaux

Bonjour à tous,

Afin de comparer deux colonnes faisant beaucoup beaucoup de lignes, j'aimerais utiliser un tableau.

J'aimerais que mon programme se fixe sur la cellule A2 par exemple, qu'il compare cette valeur avec l'ensemble des valeurs de la colonne B et que si une valeur est égale, alors qu'il fasse une série d'actions que je coderai plus tard. Ensuite il passe à la cellule A3 et rebellote.

A noter que les colonnes n'ont pas la même taille.

Voici mon code pour l'instant :

Sub test_tablo()

Dim tablo(100, 1)

For i = 0 To 10
    tablo(i, 0) = Range("A" & i + 2) 
Next i

For j = 0 To 100
    tablo(j, 1) = Range("B" & j + 2) 
Next j

For k = 0 To 10
    For l = 0 To 10
        If tablo(k, 0) = tablo(l, 0) Then
            Cells(k + 1, 3).Value = "OK"
            ...
        End If
    Next l
Next k

End Sub

Mais ce code ne fonctionne pas et je n'arrive pas à le faire...

Merci d'avance pour votre précieuse aide,

Simon

bonjour,

correction de ton code. il n'est pas optimisé pour travailler avec un grand nombre de données (il faudrait trier les colonnes et progresser en parallèle sur les 2 colonnes)

Sub test_tablo()

    Dim tablo(100, 1)

    For i = 0 To 10
        tablo(i, 0) = Range("A" & i + 2)
    Next i

    For j = 0 To 100
        tablo(j, 1) = Range("B" & j + 2)
    Next j

    For k = 0 To 10
        For l = 0 To 100
            If tablo(k, 0) = tablo(l, 1) Then
                Cells(k + 1, 3).Value = "OK"
                '...
            End If
        Next l
    Next k

End Sub

Bonjour h2so4,

Super merci beaucoup.

Comment le ferais-tu évoluer pour l'optimiser ? Je vais travailler avec un très grand nombre de données...

Merci,

Simon

bonjour,

une façon de faire

Sub aargh()
    Dim dlcol1&, dlcol2&, ptr1&, ptr2&    ' long
    Dim tabcol1, tabcol2    ' variant

    With Sheets("sheet1")
        ' colonne 1
        dlcol1 = .Cells(Rows.Count, 1).End(xlUp).Row    'dernière ligne colonne 1
        'tri des éléments de la colonne 1
        .Range("A1").Resize(dlcol1).Sort key1:=.Range("A1"), order1:=xlAscending, Header:=xlNo
        tabcol1 = .Range("A1").Resize(dlcol1)    'chargement dans table tabcol1
        ptr1 = 1 'pointeur de ligne sur tabcol1

        'colonne 2
        dlcol2 = .Cells(Rows.Count, 2).End(xlUp).Row    'dernière ligne colonne 2
        'tri de la colonne 2
        .Range("B1").Resize(dlcol2).Sort key1:=.Range("B1"), order1:=xlAscending, Header:=xlNo
        tabcol2 = .Range("B1").Resize(dlcol2)    'chargement dans table tabcol2
        ptr2 = 1 'pointeur de ligne sur tabcol2

        Do 'selection des lignes
            If tabcol1(ptr1, 1) = tabcol2(ptr2, 1) Then
                'valeur de la ligne ptr1 de la colonne 1 trouvée dans la ligne ptr2 de la colonne 2
                .Cells(ptr1, 3) = "ok"
                ptr1 = ptr1 + 1
                ptr2 = ptr2 + 1
            ElseIf tabcol1(ptr1, 1) < tabcol2(ptr2, 1) Then
                ptr1 = ptr1 + 1
            Else
                ptr2 = ptr2 + 1
            End If
        Loop Until ptr1 > dlcol1 Or ptr2 > dlcol2
    End With
End Sub

Bonjour h2so4

Super merci beaucoup c'est génial

Simon

Rechercher des sujets similaires à "vba utilisation tableaux"