Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

comparaison de tableaux

  • Initiateur de la discussion Initiateur de la discussion Mxr17
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Mxr17

Guest
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

Dernière modification par un modérateur:
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:
Re : comparaison de tableaux

Merci beaucoup Paf.

Effectivement la question n'était pas claire.
Il me reste bcp de travail dans la compréhension et l'utilisation de tableaux 🙂

Cdlt
 
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+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
15
Affichages
655
Réponses
5
Affichages
839
Réponses
4
Affichages
692
Réponses
10
Affichages
633
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…