Recherche a double condition dans un tableau pour compléter second tableau

Bonjour a tous,

J'essaie de completer un tableau (feuille 2) a partir d'un autre tableau (feuille 1) en utilisant le nom du client et le pays dans lequel est distribue le produit.

Le principe est qu'a chaque fois que l'on distribue le produit d'un client dans un pays, on ecrit "yes" dans la cellule correspondant de l'autre tableau.

J'ai quelques soucis pour ecrire le code a cause des points suivant :

- je pensais faire une recherche ligne par ligne mais il semble que ce soit tres long (hors je peux avoir des feuilles de pres de 5000 lignes a verifier)

- je n'arrive pas a utiliser la fonction if verifiant deux conditions avec deux variables pour completer mon tableau (cf code ci dessous)

Sub test()

Dim origine As Worksheet
Dim destination As Worksheet
Dim lRow As Long
Dim lRow2 As Long
Dim lcolm As Long

Set origine = Workbooks("Classeur1.xlsm").Worksheet("Feuil1")
Set destination = Workbooks("Classeur1.xlsm").Worksheet("Feuil2")

    lRow = origine.Cells(Rows.Count, 1).End(xlUp).Row
    lRow2 = destination.Cells(Rows.Count, 1).End(xlUp).Row
    lcolm = destination.Cells(1, Columns.Count).End(xlToLeft).Column

For i = 2 To lRow
For j = 2 To lRow2
For k = 2 To lcolm

If origine.Cells(i, "A") = destination.Cells(j, "A") And origine.Cells(i, "C") = destination.Cells(1, k) Then
destination.Cells(j, k) = "yes"
Else
destination.Cells(j, k) = "no"
End If

Next i
Next j
Next k

End Sub
11classeur1.xlsm (16.81 Ko)

Si vous avez des conseils ou si vous connaissez des posts similaires ou je pourrais adapter une macro, je suis preneur. En vous remerciant. Ps je suis un novice, merci pour votre indulgence

Bonsoir,

pour ce qui est de ceci : - je pensais faire une recherche ligne par ligne mais il semble que ce soit tres long (hors je peux avoir des feuilles de pres de 5000 lignes a verifier)
J'ai mis du temps à m'y mettre, mais de grand tableau peuvent être gérer par VBA et ce rapidement à la condition de ne pas faire "d'accès feuille" comme vos instructions de type : origine.Cells(i, "A")

Le principe est simple : il faut travailler avec des tableaux en mémoire vive, donc sous VBA avec des variables tableaux à deux dimensions, pour cela il suffit de leur attribuer la plage correspondant à vos données : MonTablo1 = range(Cells(1,1),Cells(Derligne,Dercolonne))

Un fichier pour l'exemple :

11tableau.xlsm (15.56 Ko)

Avec les instruction Ubound(MonTablo,1) vous connaissez le nombre d'index dans la première dimension avec un 2 en paramètre vous connaissez la deuxième dimension, les boucles sur les lignes et colonnes sont donc simples :

For i = 1 to Ubound(MonTablo,1)
For j = 1 to Ubound(MonTablo,2)

Après si vos données sont dans des tableaux structurés c'est "encore" plus simple !

@ bientôt

LouReeD

J'oubliais : les pro de PQ (Power Query) passerons vous dire que c'est encore plus simple ! Moi je ne m'y suis pas encore mis, je suis resté bloqué en 2014...

@ bientôt

LouReeD

Fichier exemple modifié avec un tableau "bidon" de 5000 lignes et 100 colonnes, deux boutons pour lancer deux procédures différentes, une avec accès feuille et l'autre en mémoire VBA, voyez le temps d'exécution de chacune à la fin de la procédure : y a pas photo !

Le fichier :

14tableau.xlsm (17.45 Ko)

@ bientôt

LouReeD

Rechercher des sujets similaires à "recherche double condition tableau completer second"