j'utilise excel pour obtenir des statistiques sur une=20
feuille regroupant de nombreuses donn=E9es (un=20
enregistrement par ligne). J'ai besoin de sortir des=20
statistiques en fonction de plusieurs crit=E8res, ces=20
derniers =E9tant variables. J'utilise donc une fonction VBA=20
qui parcourt les plages sur lesquels les crit=E8res=20
s'appliquent, et v=E9rifient les correspondances, en=20
incr=E9mentant un compteur.
Or au calcul, cela prend beaucoup de temps. J'ai lu que=20
les boucles =E9taient tr=E8s lentes mais je ne vois pas=20
comment faire autrement.
Pouvez-vous m'aider
Voici la fonction que j'utilise :
Function rech2inf(test1 As Range, test2 As Range, seuil=20
As Range) As Integer
=20
Dim slt As Integer
slt =3D seuil.Value
=20
Dim i As Integer
Dim j As Integer
Dim countt As Integer
Dim value1 As String
Dim value2 As String
=20
value1 =3D test1.Value
value2 =3D test2.Value
counttt =3D 0
=20
For i =3D 1 To Range("DP").Rows.Count
For j =3D 1 To Range("DP").Columns.Count
If Range("DP").Cells(i, j).Value =3D value1 _
And Range("e_statuts").Cells(i).Value =3D value2 _
And Range("e_anciennet=E9s").Cells(i).Value <=3D slt=20
Then
countt =3D countt + 1
End If
Next j
Next i
=20
rech2inf =3D countt
=20
End Function
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Clément Marcotte
Bonjour,
Pourquoi pas un filtre élaboré ?
"Nono" a écrit dans le message de news:08e801c3861b$ed3a0f30$ Bonjour à tous et toutes,
j'utilise excel pour obtenir des statistiques sur une feuille regroupant de nombreuses données (un enregistrement par ligne). J'ai besoin de sortir des statistiques en fonction de plusieurs critères, ces derniers étant variables. J'utilise donc une fonction VBA qui parcourt les plages sur lesquels les critères s'appliquent, et vérifient les correspondances, en incrémentant un compteur.
Or au calcul, cela prend beaucoup de temps. J'ai lu que les boucles étaient très lentes mais je ne vois pas comment faire autrement.
Pouvez-vous m'aider
Voici la fonction que j'utilise :
Function rech2inf(test1 As Range, test2 As Range, seuil As Range) As Integer
Dim slt As Integer slt = seuil.Value
Dim i As Integer Dim j As Integer Dim countt As Integer Dim value1 As String Dim value2 As String
value1 = test1.Value value2 = test2.Value
counttt = 0
For i = 1 To Range("DP").Rows.Count For j = 1 To Range("DP").Columns.Count If Range("DP").Cells(i, j).Value = value1 _ And Range("e_statuts").Cells(i).Value = value2 _ And Range("e_anciennetés").Cells(i).Value <= slt Then countt = countt + 1 End If Next j Next i
rech2inf = countt
End Function
Merci d'avance
Arnaud
Bonjour,
Pourquoi pas un filtre élaboré ?
"Nono" <b00002039@essec.fr> a écrit dans le message de
news:08e801c3861b$ed3a0f30$a101280a@phx.gbl...
Bonjour à tous et toutes,
j'utilise excel pour obtenir des statistiques sur une
feuille regroupant de nombreuses données (un
enregistrement par ligne). J'ai besoin de sortir des
statistiques en fonction de plusieurs critères, ces
derniers étant variables. J'utilise donc une fonction VBA
qui parcourt les plages sur lesquels les critères
s'appliquent, et vérifient les correspondances, en
incrémentant un compteur.
Or au calcul, cela prend beaucoup de temps. J'ai lu que
les boucles étaient très lentes mais je ne vois pas
comment faire autrement.
Pouvez-vous m'aider
Voici la fonction que j'utilise :
Function rech2inf(test1 As Range, test2 As Range, seuil
As Range) As Integer
Dim slt As Integer
slt = seuil.Value
Dim i As Integer
Dim j As Integer
Dim countt As Integer
Dim value1 As String
Dim value2 As String
value1 = test1.Value
value2 = test2.Value
counttt = 0
For i = 1 To Range("DP").Rows.Count
For j = 1 To Range("DP").Columns.Count
If Range("DP").Cells(i, j).Value = value1 _
And Range("e_statuts").Cells(i).Value = value2 _
And Range("e_anciennetés").Cells(i).Value <= slt
Then
countt = countt + 1
End If
Next j
Next i
"Nono" a écrit dans le message de news:08e801c3861b$ed3a0f30$ Bonjour à tous et toutes,
j'utilise excel pour obtenir des statistiques sur une feuille regroupant de nombreuses données (un enregistrement par ligne). J'ai besoin de sortir des statistiques en fonction de plusieurs critères, ces derniers étant variables. J'utilise donc une fonction VBA qui parcourt les plages sur lesquels les critères s'appliquent, et vérifient les correspondances, en incrémentant un compteur.
Or au calcul, cela prend beaucoup de temps. J'ai lu que les boucles étaient très lentes mais je ne vois pas comment faire autrement.
Pouvez-vous m'aider
Voici la fonction que j'utilise :
Function rech2inf(test1 As Range, test2 As Range, seuil As Range) As Integer
Dim slt As Integer slt = seuil.Value
Dim i As Integer Dim j As Integer Dim countt As Integer Dim value1 As String Dim value2 As String
value1 = test1.Value value2 = test2.Value
counttt = 0
For i = 1 To Range("DP").Rows.Count For j = 1 To Range("DP").Columns.Count If Range("DP").Cells(i, j).Value = value1 _ And Range("e_statuts").Cells(i).Value = value2 _ And Range("e_anciennetés").Cells(i).Value <= slt Then countt = countt + 1 End If Next j Next i
rech2inf = countt
End Function
Merci d'avance
Arnaud
AV
Donne un exemple clair de ce que tu veux décompter et tes critères M'est avis (à vue de nez) qu'un SP ou similaire va remplacer avantageusement les bouclettes !
AV
Donne un exemple clair de ce que tu veux décompter et tes critères
M'est avis (à vue de nez) qu'un SP ou similaire va remplacer avantageusement les
bouclettes !
Donne un exemple clair de ce que tu veux décompter et tes critères M'est avis (à vue de nez) qu'un SP ou similaire va remplacer avantageusement les bouclettes !
AV
Modeste
Tsss... Tsss.... AV !!! ;-)))
l'exemple était pourtant limpide :
va falloir quand même un jour que tu t'y mettes à déchiffrer l'anglo-saxon ;-)))
-----Message d'origine----- Donne un exemple clair de ce que tu veux décompter et tes critères
M'est avis (à vue de nez) qu'un SP ou similaire va remplacer avantageusement les
bouclettes !
AV
.
AV
Pffff...
va falloir quand même un jour que tu t'y mettes à déchiffrer l'anglo-saxon ;-))) Si tu crois que je vais m'amuser à déchiffrer la macro pour faire un SP derrière
! rePfff....Une simple lecture en diagonale m'a fait subodorer le SP ! Pour l'exécution des basses oeuvres, je pensais que le secrétaire s'en serait chargé ! Je sais pas ce qu'il fout celui-là mais la lettre recommandée ne devrait pas tarder !
;-) AV
Pffff...
va falloir quand même un jour que tu t'y mettes à
déchiffrer l'anglo-saxon ;-)))
Si tu crois que je vais m'amuser à déchiffrer la macro pour faire un SP derrière
!
rePfff....Une simple lecture en diagonale m'a fait subodorer le SP !
Pour l'exécution des basses oeuvres, je pensais que le secrétaire s'en serait
chargé !
Je sais pas ce qu'il fout celui-là mais la lettre recommandée ne devrait pas
tarder !
va falloir quand même un jour que tu t'y mettes à déchiffrer l'anglo-saxon ;-))) Si tu crois que je vais m'amuser à déchiffrer la macro pour faire un SP derrière
! rePfff....Une simple lecture en diagonale m'a fait subodorer le SP ! Pour l'exécution des basses oeuvres, je pensais que le secrétaire s'en serait chargé ! Je sais pas ce qu'il fout celui-là mais la lettre recommandée ne devrait pas tarder !
;-) AV
AV
peut-être un peu HS ma réponse, mais j'ai lu dans l'excellent site de Laurent Longre (dans la partie optimisation VBA) qu'il y avait moyen d'accélerer le business (time is money :-) ), en opérant comme suit : for each Truc in Range("XX:XX") '------- traitement -------- next
qu'en penses-tu ?
Bien que n'étant pas interpellé, je pense que le meilleur moyen d'accéler les bouclettes c'est (quand c'est possible) de ne pas en faire ! ;-) AV
peut-être un peu HS ma réponse, mais j'ai lu dans
l'excellent site de Laurent Longre (dans la partie
optimisation VBA) qu'il y avait moyen d'accélerer le
business (time is money :-) ), en opérant comme suit :
for each Truc in Range("XX:XX")
'------- traitement --------
next
qu'en penses-tu ?
Bien que n'étant pas interpellé, je pense que le meilleur moyen d'accéler les
bouclettes c'est (quand c'est possible) de ne pas en faire !
;-)
AV
peut-être un peu HS ma réponse, mais j'ai lu dans l'excellent site de Laurent Longre (dans la partie optimisation VBA) qu'il y avait moyen d'accélerer le business (time is money :-) ), en opérant comme suit : for each Truc in Range("XX:XX") '------- traitement -------- next
qu'en penses-tu ?
Bien que n'étant pas interpellé, je pense que le meilleur moyen d'accéler les bouclettes c'est (quand c'est possible) de ne pas en faire ! ;-) AV