Constat :
Quoi qu'on fasse, le parcours d'une feuille de calculs ralentit les procédures
But de la méthode proposée :
Accélérer les procédures impliquant le parcours d'une plage de cellules (colonne ou ligne complètes)
La méthode :
Consiste à récupérer la plage de cellules concernée dans un tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Dim Tablo as variant, Derlig as long
     DerLig = Split(Worksheets("LaFeuille").UsedRange.Address, "$")(4)
     Tablo = Worksheets("LaFeuille").range("A1:A" & DerLig).value
Le code ci-dessus place les données de la colonne A dans un tableau à deux dimensions sous la forme Tablo(NoLig, NoCol)
Dans cet exemple ne comportant qu'une colonne, NoCol a pour seule valeur '1'.
Tablo(2, 1) fournit donc la donnée contenue dans la cellule A2.
Il est alors facile de parcourir le tableau
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
For NoLig = 1 to Ubound(Tablo) 'ou to DerLig, cela revient au même
     Msgbox Tablo(NoLig, 1) 'juste pour voir ce que ça donne
Next
Exemple d'utilisation :
Parcours des données de la colonne A d'une feuille 1, recherche de la présence de ces données colonne A d'une feuille 2, et copy de la ligne contenant cette donnée dans une feuille 3
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub test()
Dim FL1 As Worksheet 'Feuille 1
Dim FL2 As Worksheet 'Feuille 2
Dim FL3 As Worksheet 'Feuille 2
Dim c As Range, DerLig3 As Long
Dim Tablo as Variant, Derlig as long, NoLig as Long
   Application.ScreenUpdating = False
'Instanciation des feuilles de calculs concernées (pour simplifier le code à venir)
     Set FL1 = Worksheets("Feuil1")
     Set FL2 = Worksheets("Feuil2")
     Set FL3 = Worksheets("Feuil3")
'Recherche de la dernière ligne de la plage de données feuil1
     DerLig = Split(FL1.UsedRange.Address, "$")(4)
'Création du tableau
     Tablo = FL1.range("A1:A" & DerLig).value
'Parcours du tableau (pris feuil1) et recherche de la donnée feuil2
     With FL2.range("A1:A" & Split(FL2.UsedRange.Address, "$")(4))
         For NoLig = 1 to Ubound(Tablo) 'ou bien to DerLig (revient au même)
              set c = .find(Tablo(NoLig, 1))
              If not c is nothing then
'la donnée a été trouvée, on la copie dans feuil3 après la dernière ligne
                    DerLig3 = FL3.Range("A" & Rows.Count).End(xlUp).Row
                    FL2.Rows(c.Row).Copy FL3.Range("A" & DerLig3 +1)
              Endif
         Next
     End with
End sub
Recherche sur plusieurs colonnes :
Le même principe peut être appliquée pour le parcours d'une plage de données comportant plusieurs colonnes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Tablo = FL1.range("A1:C" & DerLig).value
Dans cet exemple,
Tablo(5, 1) contiendra la donnée située en A5
Tablo(5, 2) la donnée située en B5
Tablo(5, 3) la donnée située en C5

Il est alors facile de vérifier la correspondance des données sur n colonnes.
______________________________________________________

Une autre manière d'utiliser un tableau pour renseigner une plage de données en une seule ligne de code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub Exemple()
Const pi As Double = 22 / 7
Dim Tablo As Variant, i As Byte
'création d'un tableau de la dimension voulue selon une plage quelconque
    Tablo = Range("Z1:Z90").value 
'Remplissage du tableau
    For i = 1 To 90
        Tablo(i, 1) = Cos(i * pi / 180)
    Next
'Affectation du tableau à la plage désirée
    Range("A1:A90") = Tablo
End Sub