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”.

Faite un modèle avec juste les feuilles concernées et quelques dizaines de lignes sans formule. Figez leurs valeurs.
Et aussi le code que vous avez essayé. Vraiment ce seul et unique CellsColLgnOù(…).ClearContents ne peut pas être lent.
Mais vous pouvez mettre avant Application.Calculation = xlCalculationManuel pour voir si ça va mieux.
Ça implique toujours le [A:E].Sort [a1], xlAscending, Header:=xlNo juste après et enfin Application.Calculation = xlCalculationAutomatic.

Si c'est lent, je suppose que c'est parce que vous avez essayé de l'exécuter dans une boucle, faute d'avoir compris qu'il faisait carrément toute la UsedRange d'un seul coup.
 
Dernière édition:

moteurV12

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

Voilà un fichier test

Effectivement là c'est rapide, dans mon fichier non hélas.
par contre les lignes vides "pas ok" restent, hors le but est de ne plus avoir de lignes vides mais sans supprimer de ligne lol.
 

Dranreb

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

Ça a l'air de marcher, non ?
En ajoutant le classement que vous avez fait, ça ne va pas ?
Notez que si vous voulez effacer tout jusqu'à DK il suffit de mettre:
VB:
CellsColLgnOù([A1:DK1], "DK", "=", "PAS OK").ClearContents
 

moteurV12

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

Hélas je ne peu effacer les autres cellules que de A à E pour les remplacer par les bonnes.
En fait faudrait travailler dans un tableau qui réinjecterait les valeurs "A:E" sans lignes vides.

Je fais des test avec différentes solutions... mais pour l'instant.....
 

Dranreb

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

Et le classement ?
Et pourquoi ne pouvez vous pas supprimer les "PAS OK" ?
Si les colonnes F:DJ contiennent d'autres tableaux tout à fait étrangers à A:E vous pourriez ne le faire que sur les colonnes A:E. Il me semble que ça aurait le même résultat, non ?
 
Dernière édition:

moteurV12

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

Oui tes fonctions sont bonnes, mais ne représentent pas la solution globale que je cherche à cause des lignes vides.
Pas grave, je continuerai après le dodo.

Je te remercie de ton aide et te souhaite une bonne nuit.
A++
 

Statistiques des forums

Discussions
312 321
Messages
2 087 237
Membres
103 497
dernier inscrit
JP9231