Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Comment accélérer une boucle ?

nak

XLDnaute Occasionnel
Bonjour le forum,

J'avais déjà demandé de l'aide pour importer un grand nombre de données le plus rapidement possible. Le poste avez eu un énorme succès. J'espère qu'il en sera de même aujourd'hui.

Je veux réaliser un truc tout simple. Pour chaque cellule de ma colonne "A", je veux compter le nombre de fois que la valeur apparait dans la colonne.
Je suis parti sur un code avec deux boucles. Je compare A1 avec A2:Ax et j'incrémente B1, en suite je passe en A2 pour faire la même chose, A3 etc...
Malheureusement ces deux boucles sont trop longues à s'exécuter (76000 secondes sur mon processeur i7 ).

Voici le détail :
VB:
Sub compter()
Application.ScreenUpdating = False
Sheets("Feuil1").Columns("B:B").ClearContents
x = Timer
'Compter les cellules identiques
ligne = Sheets("Feuil1").Range("A1000000").End(xlUp).Row
    NbCodes = 0
    For i = 1 To ligne
    doc = Sheets("Feuil1").Cells(i, 1).Value
        For j = 2 To ligne
            If Sheets("Feuil1").Cells(j, 1).Value = doc Then NbCodes = NbCodes + 1
        Next j
    Sheets("Feuil1").Cells(i, 2).Value = NbCodes
    NbCodes = 0
    Next i
Application.ScreenUpdating = True
MsgBox x
End Sub

Avez vous une solution plus rapide pour le même résultat ?

Je vous joins le petit fichier.

Merci

A+
 
Dernière édition:

nak

XLDnaute Occasionnel
Re : Comment accélérer une boucle ?

Bonsoir,

Merci beaucoup pour cette solution Jacques.

J'ai uniquement modifier Header:=xlGuess par Header:=xlyes car je dispose d'un entête.

Merci !

A+
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re : Comment accélérer une boucle ?

Bonsoir à tous,

Juste pour le fun, j'ai essayé de réduire le temps de traitement par formules injectées dans la feuille "Feuil1" à partir d'un code VBA (donc forcément sans utiliser l'objet dictionary qui est bien sûr la méthode la plus rapide).

La méthode la plus rapide que j'ai trouvée pour l'instant est l'utilisation de la fonction Frequence sur une plage en tant que matricielle suivie de fonctions Recherchev.

Sur ma vieille bécane (sentimental, j'y tiens!) cela donne:

rem: @ Lone-wolf. Dans ton code il y a la ligne For i = 1 To 7, pourquoi le 7 ?
 

Pièces jointes

  • Comtage cellule formules via VBA v1.xlsm
    25.1 KB · Affichages: 45
Dernière édition:

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…