Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nextrevolution

XLDnaute Occasionnel
Bonjour à tous,

J'ai une macro qui me permet de compter combien de cellule sont identique. Le probléme la macro est assez longue à être executer (environ 20 secondes sur mon vieux pc) et j'ai besoin que ca soit pas plus long que quelques seconde.

Y a t'il un moyen de l'améliorer?

Code:
Sub compter()
Dim plage As Range
Dim cel As Range
Dim n As Long


Set plage = Application.Sheets("présence").Range("z1:z65536")
For Each cel In plage
If cel.Value = Sheets("présence").Range("e1") Then
n = n + 1 'compteur
End If
Next
Label41 = n
End Sub

En vous remerciant pour les différents réponses que vous pouvez m'apporter.
 
Re : Temps macro

Bonjour,

peut être pas utile de lire toutes les lignes, simplement de la ligne 1 à la dernière ligne non vide de la colonne z, définis la plage ainsi :

Code:
With Sheets("présence")
    Set plage = .Range("z1:z" & .Range("z65536").End(xlUp).Row)
End With

bonne fin d'après midi
@+
 
Re : Temps macro

Salut NextRevolution,

Pour raccourcir le temps, tu peux déjà travaillé sur une zone moins longue
sans passer par une variable objet
Code:
Sub compter()
Dim Cel as Range, DerLig as long
Dim n As Long
 
DerLig = Sheets("présence").Range("Z" & Rows.Count).End(xlup).row
For Each Cel In Sheets("présence").Range("Z1:Z" & DerLig)
  If Cel.Value = Sheets("présence").Range("e1") Then
    n = n + 1 'compteur
  End If
Next
Label41 = n
End Sub

A tester 😉

A+

Edit : oups, salut Pierrot93 😉
 
Re : Temps macro

Bonsoir,

Bonsoir Pierrot et Bruno 🙂🙂

pour raccourcir encore :

Code:
Sub compter()
Dim plage As Range
Dim n As Long

With Sheets("présence")
    Set plage = .Range("Z1:Z" & .[Z65000].End(xlUp).Row)
    n = Application.CountIf(plage, .[E1])
End With
Label41 = n
End Sub
 
Re : Temps macro

Bonjour,

J'ai ajouté des lignes pour avoir une estimation de la durée d'éxécution (tient compte de l'horloge du processeur).

Au final sur la base du code de bhbh :

Code:
Private Declare Function QueryPerformanceCounter Lib "Kernel32" (X As Currency) As Boolean
Private Declare Function QueryPerformanceFrequency Lib "Kernel32" (X As Currency) As Boolean

Sub compter()
Dim plage As Range
Dim n As Long

QueryPerformanceCounter Debut

With Sheets("présence")
    Set plage = .Range("Z1:Z" & .[Z65000].End(xlUp).Row)
    n = Application.CountIf(plage, .[E1])
End With

QueryPerformanceCounter Fin
QueryPerformanceFrequency Freq
Label41 = n

MsgBox "Durée de la procédure = " & Format(((Fin - Debut) / Freq), "0.00") & " s"
End Sub
 
Dernière édition:
Re : Temps macro

bonsoir bhbh,
je viens de relire mon code et en fait ... moi non plus j'y arrive pas 😱

Je crois que je suis aller un peu vite et n'avais pas tenu compte de ton "CountIf" qui se suffit à lui-même.

j'ai modifié mon post précédent en gardant juste le temps d'éxécution
 
Dernière édition:
Re : Temps macro

Bonjour gwenlorin, bhbh, brunoM45 et pierrot93

Merci pour toutes vos réponses, maintenant le temps de procédure est de 0.00 seconde lol. Dans ma macro j'ai pas vraiment besoin de savoir le temps mais je garde de coté cette macro qui peux un jour mettre utile.

Encore merci à vous tous.

Par hasard pourriez vous m'aider sur ce post?

https://www.excel-downloads.com/threads/recherche-vba.123042/

Bonne journée
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
742
Réponses
3
Affichages
924
Réponses
7
Affichages
377
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
907
Retour