XL 2010 recherche valeur avec clé sur plusieurs colonnes

Sheldor

XLDnaute Occasionnel
Supporter XLD
bonjour à tous,
désolé par avance si j'ai mal cherché et merci par avance pour votre aide...

j'ai un premier tableau (de grande taille) de valeurs TABLEAU_1
j'ai un deuxième tableau (environ 10% de la taille du premier) TABLEAU_2

Dans TABLEAU_2 j'ai 4 colonnes qui me forment une clé unique qui me permet d'aller chercher la valeur correspondante dans TABLEAU_1 (les colonnes ici sont non contiguës), une fois la correspondance trouvée je voudrais récupérer les valeurs de certaines colonnes plus à droite dans TABLEAU_1 pour les mettre dans TABLEAU_2

je cherche une solution array ou dictionnary car j'ai 100 000 lignes dans TABLEAU_1

je suis perdu, je ne sais pas si on peut partir sur un dictionnary avec une clé sur plusieurs colonnes, et en ARRAY je suis trop débutant je tourne en rond dans un tableau rectangle...

mille merci

nico
 

Pièces jointes

  • tableau_1_2.xlsx
    13.8 KB · Affichages: 39

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Il faut bien sûr adapter le [A65000]

Code:
Sub essai()
  Set f = Sheets("Tableau_1")
  Tble = f.Range("A2:O" & f.[A65000].End(xlUp).Row).Value
  Set d = CreateObject("scripting.dictionary")
  For i = 1 To UBound(Tble)
    clé = Tble(i, 1) & "|" & Tble(i, 3) & "|" & Tble(i, 4) & "|" & Tble(i, 5)
    d(clé) = i     ' index
  Next i
  '--
  Set f2 = Sheets("Tableau_2")
  Tbls = f2.Range("A2:D" & f2.[A65000].End(xlUp).Row).Value
  Dim TblS2(): ReDim TblS2(1 To UBound(Tbls), 1 To 7)
  Ncol = UBound(Tbls, 2)
  For i = 1 To UBound(Tbls)
     clé = Tbls(i, 1) & "|" & Tbls(i, 2) & "|" & Tbls(i, 3) & "|" & Tbls(i, 4)
     ligne = d(clé)
     For k = 1 To 7
       TblS2(i, k) = Tble(ligne, k + 8)
     Next k
  Next i
  f2.[E2].Resize(UBound(Tbls), 7) = TblS2
End Sub

jb
 

Pièces jointes

  • Copie de tableau_1_2.xls
    50.5 KB · Affichages: 24
Dernière édition:

Sheldor

XLDnaute Occasionnel
Supporter XLD
bonjour JB,
un immense merci !
j'espère un jour parler VBA comme vous.

j'essaye de comprendre...

Dim TblS2(): ReDim TblS2(1 To UBound(Tbls), 1 To 7)
il créé tbls2 avec le nombre de ligne de tbls et sur 7 colonnes? ou ajoute 7 colonnes...

et j'ai du mal aussi à comprendre ce que fait
Resize(UBound(Tbls), 7) = TblS2

encore merci
nico
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Bonjour,

Code:
Sub copieLignes()
  Set f = Sheets("Tableau_1")
  TblE = f.Range("A2:O" & f.[A65000].End(xlUp).Row).Value
  Set d = CreateObject("scripting.dictionary")
  For i = 1 To UBound(TblE)
    clé = TblE(i, 1) & "|" & TblE(i, 3) & "|" & TblE(i, 4) & "|" & TblE(i, 5)
    d(clé) = i      ' index
  Next i
  Set f = Sheets("Tableau_2")
  TblS = f.Range("A2:D" & f.[A65000].End(xlUp).Row).Value
  Dim TblS2(): ReDim TblS2(1 To UBound(TblS), 1 To 7)
  Ncol = UBound(TblS, 2)
  For i = 1 To UBound(TblS)
     clé = TblS(i, 1) & "|" & TblS(i, 2) & "|" & TblS(i, 3) & "|" & TblS(i, 4)
     If d.exists(clé) Then
       n = n + 1
       ligne = d(clé)
       For k = 1 To 7: TblS2(i, k) = TblE(ligne, k + 8): Next k
     End If
  Next i
  If n > 0 Then f.[E2].Resize(UBound(TblS2), UBound(TblS2, 2)) = TblS2
End Sub

jb
 

Pièces jointes

  • Copie de ExtractionTableau2.xls
    57 KB · Affichages: 20

Discussions similaires

Réponses
6
Affichages
88
Réponses
9
Affichages
147

Statistiques des forums

Discussions
311 721
Messages
2 081 928
Membres
101 842
dernier inscrit
seb0390