Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour Jaquouille,
Mais ce code ne prend en compte la couleur de la cellule !
Bonjour J@@, Jaquouille,
Merci pour réponses.
Je vois qu'il n'y a pas d'autres solutions que les boucles pour compter les cellules de la même couleur.
Or, avec cette solution, on peut remarquer une lenteur dans l'exécution du code.
Mais bon, voila le code que j'utilise pour compter, en même temps,
'---------
Option Explicit
Sub CompteOccurences()
Dim Tb As Range, C As Range
Dim Plage As String
Dim i As Long, LasLg As Integer
Dim Tmp, Rg As Range
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set Tb = .Range("L2", .Cells(.Rows.Count, "L").End(xlUp))
Tb.Offset(0, -6).ClearContents
Plage = "$A$2:" & .Cells(.Rows.Count, "A").End(xlUp).Address
LasLg = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Rg = .Range("A2:A" & LasLg)
For Each C In Tb
Tmp = Extrema(C)
If IsArray(Tmp) Then
With C
.Offset(0, -9).Value = C
With .Offset(0, -8) ' Colonne D
.Formula = "=SUMPRODUCT((" & Plage & ">=" & Tmp(0) & ")*(" & Plage & "<=" & Tmp(1) & ")*1)"
.Value = .Value
End With
.Offset(0, -7) = SommeSpeciale(Rg, Tmp(0), Tmp(1), 6)
End With
End If
Next C
Tb.Offset(0, -9).Resize(, 4).Sort Key1:=Tb.Offset(0, -6).Resize(1, 1), Order1:=xlAscending, Header:=xlNo
Tb.Offset(0, -6).ClearContents
Set Tb = Nothing
End With
End Sub
Private Function Extrema(ByVal Str As String)
Str = Replace(Str, "[", "")
Str = Replace(Str, "]", "")
If InStr(Str, "-") Then Extrema = Split(Str, "-")
End Function
Function SommeSpeciale(ByVal Rng As Range, ByVal Mn As Double, ByVal Mx As Double, ByVal ColorInd As Byte) As Long
Dim C As Range
Dim S As Long
For Each C In Rng
If C >= Mn And C <= Mx And C.Interior.ColorIndex = ColorInd Then S = S + 1
Next C
SommeSpeciale = S
End Function
'---------
Peut-on réécrire le code pour accélérer le traitement ?
Vous pouvez trouver un lien pour tester :
http://cjoint.com/?BJgaleARJCC
Merci.
Bonjour J@@, Jaquouille,
Merci pour réponses.
Je vois qu'il n'y a pas d'autres solutions que les boucles pour compter les cellules de la même couleur.
Or, avec cette solution, on peut remarquer une lenteur dans l'exécution du code.
Mais bon, voila le code que j'utilise pour compter, en même temps,
'---------
Option Explicit
Sub CompteOccurences()
Dim Tb As Range, C As Range
Dim Plage As String
Dim i As Long, LasLg As Integer
Dim Tmp, Rg As Range
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set Tb = .Range("L2", .Cells(.Rows.Count, "L").End(xlUp))
Tb.Offset(0, -6).ClearContents
Plage = "$A$2:" & .Cells(.Rows.Count, "A").End(xlUp).Address
LasLg = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Rg = .Range("A2:A" & LasLg)
For Each C In Tb
Tmp = Extrema(C)
If IsArray(Tmp) Then
With C
.Offset(0, -9).Value = C
With .Offset(0, -8) ' Colonne D
.Formula = "=SUMPRODUCT((" & Plage & ">=" & Tmp(0) & ")*(" & Plage & "<=" & Tmp(1) & ")*1)"
.Value = .Value
End With
.Offset(0, -7) = SommeSpeciale(Rg, Tmp(0), Tmp(1), 6)
End With
End If
Next C
Tb.Offset(0, -9).Resize(, 4).Sort Key1:=Tb.Offset(0, -6).Resize(1, 1), Order1:=xlAscending, Header:=xlNo
Tb.Offset(0, -6).ClearContents
Set Tb = Nothing
End With
End Sub
Private Function Extrema(ByVal Str As String)
Str = Replace(Str, "[", "")
Str = Replace(Str, "]", "")
If InStr(Str, "-") Then Extrema = Split(Str, "-")
End Function
Function SommeSpeciale(ByVal Rng As Range, ByVal Mn As Double, ByVal Mx As Double, ByVal ColorInd As Byte) As Long
Dim C As Range
Dim S As Long
For Each C In Rng
If C >= Mn And C <= Mx And C.Interior.ColorIndex = ColorInd Then S = S + 1
Next C
SommeSpeciale = S
End Function
'---------
Peut-on réécrire le code pour accélérer le traitement ?
Vous pouvez trouver un lien pour tester :
http://cjoint.com/?BJgaleARJCC
Merci.
Bonjour J@@, Jaquouille,
Merci pour réponses.
Je vois qu'il n'y a pas d'autres solutions que les boucles pour compter les cellules de la même couleur.
Or, avec cette solution, on peut remarquer une lenteur dans l'exécution du code.
Mais bon, voila le code que j'utilise pour compter, en même temps,
'---------
Option Explicit
Sub CompteOccurences()
Dim Tb As Range, C As Range
Dim Plage As String
Dim i As Long, LasLg As Integer
Dim Tmp, Rg As Range
Application.ScreenUpdating = False
With Worksheets("Feuil1")
Set Tb = .Range("L2", .Cells(.Rows.Count, "L").End(xlUp))
Tb.Offset(0, -6).ClearContents
Plage = "$A$2:" & .Cells(.Rows.Count, "A").End(xlUp).Address
LasLg = .Cells(.Rows.Count, "A").End(xlUp).Row
Set Rg = .Range("A2:A" & LasLg)
For Each C In Tb
Tmp = Extrema(C)
If IsArray(Tmp) Then
With C
.Offset(0, -9).Value = C
With .Offset(0, -8) ' Colonne D
.Formula = "=SUMPRODUCT((" & Plage & ">=" & Tmp(0) & ")*(" & Plage & "<=" & Tmp(1) & ")*1)"
.Value = .Value
End With
.Offset(0, -7) = SommeSpeciale(Rg, Tmp(0), Tmp(1), 6)
End With
End If
Next C
Tb.Offset(0, -9).Resize(, 4).Sort Key1:=Tb.Offset(0, -6).Resize(1, 1), Order1:=xlAscending, Header:=xlNo
Tb.Offset(0, -6).ClearContents
Set Tb = Nothing
End With
End Sub
Private Function Extrema(ByVal Str As String)
Str = Replace(Str, "[", "")
Str = Replace(Str, "]", "")
If InStr(Str, "-") Then Extrema = Split(Str, "-")
End Function
Function SommeSpeciale(ByVal Rng As Range, ByVal Mn As Double, ByVal Mx As Double, ByVal ColorInd As Byte) As Long
Dim C As Range
Dim S As Long
For Each C In Rng
If C >= Mn And C <= Mx And C.Interior.ColorIndex = ColorInd Then S = S + 1
Next C
SommeSpeciale = S
End Function
'---------
Peut-on réécrire le code pour accélérer le traitement ?
Vous pouvez trouver un lien pour tester :
http://cjoint.com/?BJgaleARJCC
Merci.