comparaison de tableaux

Mxr17

XLDnaute Nouveau
Bonjour à tous,

Devant travailler sur des fichiers comportant bcp de lignes j'essaie de comprendre les tableaux. A force de surfer j'ai réussi à trouver une solution pour mon problème du moment, mais je suis loin de tout comprendre.
Le code ci dessous fonctionne très bien:

Sub test()

Dim Montab()
Dim Montab1()
Dim i As Long
Dim j As Long
Dim Der As Long
Dim Lig As Long

Lig = Sheets(2).Cells(100000, 1).End(xlUp).Row

Der = Sheets(1).Cells(100000, 1).End(xlUp).Row

ReDim Montab(Der, 1)
ReDim Montab1(Lig, 1)
For i = 1 To Der
For j = 1 To Lig

Montab(i, 0) = Sheets(1).Range("A" & i)
Montab(i, 1) = Sheets(1).Range("B" & i)
Montab1(j, 0) = Sheets(2).Range("A" & j)
Montab1(j, 1) = Sheets(2).Range("B" & j)

If Montab(i, 0) = Montab1(j, 0) Then

Sheets(1).Cells(i, 2) = Sheets(2).Cells(j, 2)

End If
Next j
Next i

End Sub

Mais je ne comprends pas pourquoi si on remplace " Sheets(1).Cells(i, 2) = Sheets(2).Cells(j, 2) " par
" Montab(i, 1) = Montab1(j, 1) " il ne se passe rien?

Merci
Cordialement
 

Pièces jointes

  • ClasseurTest.xlsm
    15.4 KB · Affichages: 29
  • ClasseurTest.xlsm
    15.4 KB · Affichages: 37
  • ClasseurTest.xlsm
    15.4 KB · Affichages: 38
Dernière édition:

Paf

XLDnaute Barbatruc
Re : comparaison de tableaux

Bonjour

L'intérêt d'un tableau est de limiter les accès à la feuille et de faire directement les traitements en mémoire.
Dans le cas présent l'utilisation de tableau ne fait qu'alourdir le code( et le temps d'exécution?) puisqu'il ne sert que de variable intermédiaire à chaque accès à la feuille

On aurait pu écrire tout aussi bien:

Code:
For i = 1 To Der
   For j = 1 To Lig
      If Sheets(1).Range("A" & i) = Sheets(2).Range("A" & j) then Sheets(1).Cells(i, 2) = Sheets(2).Cells(j, 2)
   Next j
Next i

pour exploiter les tableaux

Code:
Lig = Sheets(2).Range("A" & Rows.Count).End(xlUp).Row
Der = Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

'on copie toutes les données dans un tableau
Montab=Sheets(1).Range("A1:B" & Der)
Montab1=Sheets(2).Range("A1:B" & Lig)

For i = 1 To Der  ' ou for i= lbound(Montab) to Ubound(Montab)
   For j = 1 To Lig   ' ou for j= lbound(Montab1) to Ubound(Montab1)
      If Montab(i, 1) = Montab1(j, 1) Then Montab(i, 2)=Montab1(j, 2)
  Next j
Next i

' après le travail en mémoire on copie le résultat sur la feuille
Sheets(1).range("A1").resize(ubound(Montab,1),ubound(Montab,2))=Montab
A+

Edit pas sûr d'avoir répondu à la question que je ne suis pas sûr de comprendre
 
Dernière édition:

Paf

XLDnaute Barbatruc
Re : comparaison de tableaux

re,

en relisant mieux, je viens de comprendre la question qui est pourtant claire
pourquoi si on remplace " Sheets(1).Cells(i, 2) = Sheets(2).Cells(j, 2) " par
" Montab(i, 1) = Montab1(j, 1) " il ne se passe rien?

Montab et Montab1 étant des tableaux, l'affectation de valeur se passe de tableau à tableau, donc en mémoire et non sur la feuille!

Cette fois je pense avoir répondu à la question

A+
 

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz