Comparaison
ruthabella
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
Bonsoir
Je fait mes premiers pas dans la programmation en vba. j'ai écrit un algorithme qui compare deux colones et ressort les similitudes. il fonctionne très bien mais le souci c'est qu'il est très lent. il prend 5 minutes pour exécuter un code sur 7900 lignes. s'il vous plait aidez mois à l'optimiser afin qu'il prenne moin de temps. voici le code en question:
Merci pour votre aide attendu
Je fait mes premiers pas dans la programmation en vba. j'ai écrit un algorithme qui compare deux colones et ressort les similitudes. il fonctionne très bien mais le souci c'est qu'il est très lent. il prend 5 minutes pour exécuter un code sur 7900 lignes. s'il vous plait aidez mois à l'optimiser afin qu'il prenne moin de temps. voici le code en question:
Sub compare() ' Dim CompareRange As Variant Dim x As Variant Dim y As Variant Dim i As Integer Dim date_debut As Date, date_fin As Date Set CompareRange = Range("A:A") date_debut = Now For Each x In ActiveSheet.Range("C:C") For Each y In CompareRange If x = y Then x.Offset(0, 1) = x i = i + 1 End If If y = "" Then GoTo sortie1 End If Next y sortie1: 'etiquette de sortie If x = "" Then GoTo fin End If Next x fin: 'etiquette de fin de l'opération date_fin = Now MsgBox "le nombre de tour est :" & i & "debut : " & date_debut & " fin:" & date_fin End Sub
Merci pour votre aide attendu
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI Merci d'y penser dans tes prochains messages. |
A voir également:
- Comparaison
- Comparaison million milliard - Accueil - Technologies
- Logiciel comparaison photo gratuit - Télécharger - Photo & Graphisme
- Comparaison samsung a15 et a16 - Accueil - Téléphones
- Comparaison prix amazon - Accueil - Commerce
- Prix Amazon : comment suivre les évolutions de tarifs - Guide
3 réponses
Bonjour,
Au lieu de faire des boucles dans des boucles .... regarde donc la méthode FIND... et même plus précisément la fonction findall
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#findall
En gros .. tu boucles sur une seule colonne ....
Pour chaque cellule de cette colonne tu recherche les cellules correspondantes avec un findall
Au lieu de faire des boucles dans des boucles .... regarde donc la méthode FIND... et même plus précisément la fonction findall
https://forums.commentcamarche.net/forum/affich-37621992-methode-find-dans-vba-recherche-de-donnees-sous-excel#findall
En gros .. tu boucles sur une seule colonne ....
Pour chaque cellule de cette colonne tu recherche les cellules correspondantes avec un findall
Quelques pistes :
Utilise
Application.ScreenUpdating = False
en début et
Application.ScreenUpdating = True
en fin de ta fonction.
Actuellement tu compares toutes les cellules des 2 colonnes (donc les 65535 ou les 2 millions de lignes selon la version d'Excel) cela peut prendre beaucoup de temps
A la place de faire un Range("A:A") essaye plutôt de faire une boucle Do/Loop et d'utiliset la méthode ActiveSheet.Cells avec comme condition de fin, plus de données sur les 2 colonnes.
EVITES les GoTo, préfères "Exit For" à la place, c'est largement plus propre.
Utilise
Application.ScreenUpdating = False
en début et
Application.ScreenUpdating = True
en fin de ta fonction.
Actuellement tu compares toutes les cellules des 2 colonnes (donc les 65535 ou les 2 millions de lignes selon la version d'Excel) cela peut prendre beaucoup de temps
A la place de faire un Range("A:A") essaye plutôt de faire une boucle Do/Loop et d'utiliset la méthode ActiveSheet.Cells avec comme condition de fin, plus de données sur les 2 colonnes.
EVITES les GoTo, préfères "Exit For" à la place, c'est largement plus propre.
Bonjour
ci joint test de rapidité
comparaison de plusieurs méthodes
https://mon-partage.fr/f/QBlA2fwV/
pour chercher une cellule dans une colonne, la méthode "Find", indiquée par Jordane, est la simple en égalité de temps une variable-tableau
mais si le travail est plus compliqué, la variable tableau est + rapide
j'ai fait un truc là-dessus mais je ne le retrouve pas dans mon B... :-/
si je retrouve...
Michel
ci joint test de rapidité
comparaison de plusieurs méthodes
https://mon-partage.fr/f/QBlA2fwV/
pour chercher une cellule dans une colonne, la méthode "Find", indiquée par Jordane, est la simple en égalité de temps une variable-tableau
mais si le travail est plus compliqué, la variable tableau est + rapide
j'ai fait un truc là-dessus mais je ne le retrouve pas dans mon B... :-/
si je retrouve...
Michel
merci jordan, mais je ne sait pas utiliser FIND et findall, peut-tu mettre cette methode et cette fonction dans le bout de code que j'ai envoyé???? s'il-te-plait !!!!!!!!
Merci
Il y a des exemples dedans....