avec l’objet “Dictionary”.

moteurV12

XLDnaute Occasionnel
Bonsoir à Toutes et Tous

Je souhaiterai remplacer le code suivant qui compare 2 colonnes lentement


Set rngA = Range(Cells(1, "BM"), Cells(Rows.Count, "BM").End(xlUp))
Set rngB = Range(Cells(1, "R"), Cells(Rows.Count, "R").End(xlUp))


For Each cell In rngA
titi = Range("AJ2").Value ' titi est un compteur
If Not IsError(Application.Match(cell.Value, rngB, 0)) Then
Cells(titi + 1, "F").Value = Cells(cell.Row, "BM").Value
End If
Next

Par un objet Dictionary plus rapide
 

Dranreb

XLDnaute Barbatruc
Re : avec l’objet “Dictionary”.

Vous pourriez peut être tout reclasser sur la colonne DK, non ? Tous les "OK" ensemble puis ensuite les "PAS OK"
Enfin ça dépend si les colonnes de F à DK doit être classées avec ou pas.

Sinon il y a peut être aussi ça, tout simplement :
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim TDK(), TAEe(), TAEs(), Le As Long, Ls As Long, C As Long
If Target.Address(0, 0) = "DM2" Then
   Cancel = True
   TDK = Me.UsedRange.Columns("DK").Value
   TAEe = Intersect(Me.[A:E], Me.UsedRange).Value
   ReDim TAEs(1 To UBound(TAEe, 1), 1 To 5)
   For Le = 1 To UBound(TDK)
      If TDK(Le, 1) = "OK" Then
         Ls = Ls + 1
         For C = 1 To 5: TAEs(Ls, C) = TAEe(Le, C): Next C: End If: Next Le
   Intersect(Me.[A:E], Me.UsedRange).Value = TAEs
   End If
End Sub
 
Dernière édition:

moteurV12

XLDnaute Occasionnel
Re : avec l’objet “Dictionary”.

Le "Sinon il y a peut être aussi ça, tout simplement :" m'a beaucoup amusé......c'est exactement ça en fait et beaucoup plus rapide que toute autre solution.

Dranreb je vous Remercie pour ce coup de paluche sympa et finalement productif en nuitée.

Mais pas d'inquiétude, je vais revenir ......avec un autre problème....;)

Bon dimanche
 

Statistiques des forums

Discussions
312 321
Messages
2 087 264
Membres
103 498
dernier inscrit
FAHDE