Impossible de comparer les valeurs de deux array

Bonjour à tous,

Je suis nouveau sur VBA et je suis confronté à mon premier blocage : je n'arrive pas a comparer les valeurs de deux array différents.

Je m'explique : au début j'ai 2 fichiers Excel, un contenant la liste complète de mes éléments et un autre comprenant une liste incomplète avec des valeurs calculées pour chaque éléments. Je veux récupérer la liste des éléments qui sont dans la liste complète mais absents de la liste incomplète.

Pour cela, je me réfère à la première colonne de chaque fichier qui comprend une sorte d'ID propre à chaque éléments.

Mes fichiers étants volumineux, j'ai mis les valeurs de chaque fichier dans des tableaux multidimensionnels, je me retrouve donc avec un tableau "complet" et un tableau "incomplet", comprenants en (x, 1) les ID des éléments.

Ensuite je procède à la comparaison :

For i = 1 To UBound(tableau_full) - 1
    For j = 1 To UBound(tableau_incomplet) -1 

        If tableau_full(i, 1) = tableau_incomplet(j, 1) And i <> j Then
            'code
        End If
    Next
Next

Mon problème c'est que ma macro ne trouve aucune valeur égale entre les deux tableaux alors qu'il y en a pourtant (la liste complète contient environ 16 000 éléments et la liste incomplète en contient environ 5 000, tous présents dans l'autre liste) et que tout le reste du code fonctionne normalement.

J'ai essayé de faire avec des dictionnaires et la fonction .Exists mais ça ne m'a pas plus avancé. J'ai aussi cherché du côté des formats de données (comparaison d'une string et d'un entier bloquant par exemple) mais ça n'a pas l'air d'être le problème (et puis j'imagine que j'aurais eu une erreur de compilation?)... J'ai l'impression d'avoir tout essayé et de tourner en rond... Cependant étant un novice en VBA je dois probablement passer à côté de quelque chose alors si vous savez ou avez des idées de pourquoi ça ne fonctionne pas ça m'aiderait beaucoup !

Merci à toutes et à tous pour votre aide !! :D

Bonsoir,

ai-je bien compris :
un tableau complet avec un index > au tableau incomplet
on boucle sur les ID du tableau complet et on regarde s'il existe dans le tableau incomplet, s'il existe on passe à l'ID suivant, s'il n'existe pas on l'ajoute au tableau incomplet, on doit donc l'agrandir d'un index et coller l'ID testé du tableau complet.

Est-ce bien cela ?

@ bientôt

LouReeD

Bonjour,

pas la cause de ton pb (ou alors d'une toute petite partie) mais je m'interroge sur le pourquoi du And i <> j ?
Pour le reste il faudrait un fichier anonymisé de qq lignes pour constater et chercher (les 2 listes sur la même feuille...).
eric

Bonjour,

@LouReed : S'il n'existe pas je l'ajoute à un tableau résultat dont je vais écrire le contenu dans mon fichier incomplet à la suite de ce qu'il y avait déjà (au passage je calcule d'autres valeurs pour chaque éléments) avec une ligne du style :

feuille.Range(feuille.Cells(derniere ligne +1, 1), feuille.Cells(derniere ligne + 1 + Ubound(tableau_resultat), derniere colonne)) = tableau_resultat

Le soucis c'est que ça m'ajoute bien mon tableau résultat à la suite des valeurs déjà présentes dans mon fichier mais mon tableau résultat contient alors tous les éléments de mon fichier liste complète, je me retrouve donc avec des éléments en double.

@eriiic : Mince j'ai oublié d'enlever le AND i <> j au moment d'écrire le post, c'est parce que j'ai essayé de tout mettre dans un seul tableau pour voir si ça changerait quelque chose, sans succès. J'ai aussi essayé de tout mettre dans un seul fichier (d'abord mettre le fichier incomplet dans un tableau dont je met les valeurs à la suite dans le fichier complet, puis je met les valeurs de mon fichier complet dans un tableau et je teste sur ce tableau) -> pas marché non plus

Cependant je vais tester avec un fichier contenant peu de valeurs que je fais à la main car il est vrai que le fichier complet m'est donné par mon entreprise alors que le fichier incomplet je le sors de mes macros alors peut être ça vient de là et c'est finalement un problème de format que j'aurais pas compris...?

En tout cas merci beaucoup pour vos réponses, de mon côté je continue de creuser

Et si vous voulez je peux mettre mon code complet.

Bonsoir,

voici un code de principe :

Sub testLRD()
    Dim Cpt, TabRésultat(), I, J, Trouve
    Cpt = 1 ' compteur de la taille du TabRésultat
    For I = 1 To UBound(tableau_full) - 1
        ' on initialise Trouve à "LouReeD" une valeur "neutre"
        Trouve = "LouReeD"
        ' on boucle sur le tableau incomplet
        For J = 1 To UBound(tableau_incomplet) - 1
            If tableau_full(I, 1) = tableau_incomplet(J, 1) Then ' si la valeur du tableau complet est trouvée dans le tableau incomplet
                ' alors trouve prend cette valeur
                Trouve = tableau_full(I, 1)
                ' on sort de la boucle du tableau incomplet pas la mpeine de scanner le reste
                Exit For
            End If
        Next J
        ' si trouve est toujours égale à LouReeD
        ' c'est qu'on a pas trouvé la valeur d'index i du tableau complet dans le tableau incomplet
        If Trouve = "LouReeD" Then
            ' on redimensionne le tableau résultat
            ReDim tableaurésultat(1 To Cpt)
            ' on y inscrit la valeur de l'index i du tableau complet
            tableaurésultat(Cpt) = tableau_full(I, 1)
            ' on incrémente le compteur du tableau résultat
            Cpt = Cpt + 1
        End If
    Next I
    ' ici on colle le tableau résultat
    Range("A1").Resize(UBound(TabRésultat)) = TabRésultat ' ou un truc comme ça. Il faut adapter le "1" en fonction du nombre de ligne existantes
End Sub

Avec quelques ajustements cela devrait marcher !

@ bientôt

LouReeD

Rechercher des sujets similaires à "impossible comparer valeurs deux array"