Optimisation VBA - Variant et Résultat de formule

bonjour à tous !

Cela fait longtemps que je n'avais pas eu à poster mais aujourd'hui je sèche..

Je dois traiter des fichiers de plus de 700 000 lignes, Je dois garder uniquement les doublons. Cela prends énormément de temps de vérifier ligne par ligne lequels sont des doublons. Du coup en passant par des variant je ne travaille plus sur la feuille et je gagne du temps.

voici la macro :

Sub test()

Application.ScreenUpdating = False
Application.DisplayAlerts = False

Dim plage As Range
Dim v As Variant

ColLOE = "i"
Coluniques = "j"
lignedata = "2"
lignedatamoins1 = lignedata - 1

lignedatafin = Range(ColLOE & "1").End(xlDown).Rows.Row  ' Cherche la dernière ligne
Range(Coluniques & lignedatamoins1).Value = "Doublon"

Set plage = ActiveSheet.Range("a" & lignedata & ":" & Coluniques & lignedatafin)

v = plage
For i = lignedatamoins1 To lignedatafin - 1
    v(i, 10) = "=IF(COUNTIF(C[-1],R[0]C[-1])<>2,""supprimer"",""ok"")"
Next i
plage = v

Application.ScreenUpdating = True
Application.DisplayAlerts = True

End Sub

Mon problème :

1. Il me faudrait écrire directement le résultat sans que cela n'affiche la formule.

J'essaie d'intégrer le resultat de cette formule

=si(nb.si(i:i;i2<>2);"supprimer";"ok")

J'ai essayé quelque chose du style : v(i,10) = v(i,10).value mais vu qu'on ne travaille pas sur du range (si j'ai bien compris) ça ne passe pas.

Je sais que je peux faire v(i, 10) = left ; sans faire v(i,10) = "=left***"

Ce que écrit directement le résultat en donnée (et non pas la formule), dans mon cas cela inscrit la formule qui me donne le résultat.

Une fois que je pourrais faire ça, je pourrais supprimer les lignes où il est indiqué "supprimer".

2. Comment supprimer efficacement les lignes "supprimer" avec le variant ?

Auriez-vous des idées ?

Merci,

Je coince toujours sur ces points.. Vous pouvez m'aider ?

bonjour,

Essaie voir comme ça :

Sub galopin()
Dim Arr, i, k, D
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i = [I1].End(xlDown).Row
Set D = CreateObject("Scripting.Dictionary")
Arr = Range("I1:J" & i)
For k = 1 To i
If Not D.exists(Arr(k, 1)) Then
D.Add Arr(k, 1), ""
Else
D(Arr(k, 1)) = "Doublon"
Arr(k, 2) = "Doublon"
End If
Next
For k = 1 To i
If D(Arr(k, 1)) = "Doublon" Then Arr(k, 2) = "Doublon"
Next
Range("I1:J" & i) = Arr
End Sub

A+

ça marche au poil merci ! On est sur un niveau que je maitrise par trop encore

Du coup, en prenant ce modèle comment faire pour supprimer les lignes en se servant aussi des variant ?

on peut intégrer dans le module qu'au lieu de d'écrire "" si c'est un unique, de supprimer la row ?

Merci encore,

Les suppressions c'est toujours un peu lent.

S'il y en a que quelques-unes, c'est tout bon, sinon ça peut prendre un peu plus de temps...

Sub galopin()
Dim Arr, i, k, D
Application.ScreenUpdating = False
Application.DisplayAlerts = False
i = [I1].End(xlDown).Row
Set D = CreateObject("Scripting.Dictionary")
Arr = Range("I1:J" & i)
For k = 1 To i
If Not D.exists(Arr(k, 1)) Then
D.Add Arr(k, 1), ""
Else
D(Arr(k, 1)) = "Doublon"
Arr(k, 2) = "Doublon"
End If
Next
For k = 1 To i
If D(Arr(k, 1)) = "Doublon" Then Arr(k, 2) = "Doublon"
Next
For k = i To 1 Step -1
If Arr(k, 2) = "" Then Rows(k).Delete
Next
End Sub

A+

Ok, je comprends le procéssus, je vais voir le temps que cela prends, sinon je vais trier par ordre alphabétique la colonne où est écrit doublon et supprimer toutes les lignes vides ! merci

Même pas besoin de trier : Tu filtres sur les vides et tu supprimes !

En filtrant par les vides ça me marque que la plage de données est trop complèxe, j'avais déjà eu le cas.

C'est pour cela que le tri était ma solution.

Il y a une autre façon de faire pour supprimer avec un filtre ?

Je ne vois pas d'autre solution.

Après il faut voir selon la fréquence de cette opération et le nombre de suppressions à faire.

Je suppose que pour quelques milliers de suppression, la macro devrait suffire : Tu vas boire un café ou fumer une cigarette et ça devrait suffire. Maintenant s'il y a une grosse quantité de suppressions à chaque fois et que tu dois faire ça toutes les semaines, ça pourrait être intéressant de passer par ACCESS.

ACESS utilise d'autres algorithmes bien plus puissant qu'Excel pour traiter d'énormes quantité de données. Un petit coup d'Import / Export et hop le tour est joué : Pas besoin d'être un gourou d'ACCESS pour faire ça...

Encore faut-il en disposer bien sur !

A+

Rechercher des sujets similaires à "optimisation vba variant resultat formule"