Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Compter le nombre de cellules de même couleur (suite)

6 réponses
Avatar
michel-hirard
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette procédure sur le
site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End If sans bloc If".
Une bonne âme peut-elle m'indiquer pourquoi, voici le code en question:

Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " & sommeRouge
end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et non faire la somme
de leur contenu.

Merci,
Michel

6 réponses

Avatar
papou
Bonjour
Sub inventaireRouge()
Dim CompterRouge As Long
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
compterRouge = compterRouge + 1
End If
Next
MsgBox compterRouge & " cellule(s) en rouge"
End Sub

Cordialement
Pascal

"michel-hirard" a écrit dans le message de
news:cfi6f3$u0e$
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette procédure sur le
site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End If sans bloc
If".

Une bonne âme peut-elle m'indiquer pourquoi, voici le code en question:

Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " & sommeRouge
end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et non faire la
somme

de leur contenu.

Merci,
Michel




Avatar
dadda
Bonjour ;
supprimer le dernier "end if". Quand vous écriver if et
then sur la même ligne "end if" est de trop. Si vous
voulez le conserver il faut revenir à la ligne après "then"
Cordialement
dadda
-----Message d'origine-----
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette
procédure sur le

site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End
If sans bloc If".

Une bonne âme peut-elle m'indiquer pourquoi, voici le
code en question:


Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " &
sommeRouge

end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et
non faire la somme

de leur contenu.

Merci,
Michel


.



Avatar
JpPradier
Bonjour Michel

Le dernier end if juste avant end sub est en trop.
Pour ta 2e question, je ne comprends pas : la procédure fait les deux.

j-p
Avatar
michel-hirard
OK, merci pascal,
Simplement pourrais-tu me dire comment récupérer le résultat de la macro
dans un cellule, de manière à le réexploiter par ailleurs.
Merci,




"papou" <cestpasbonpapou@çanonplus44.fr> a écrit dans le message de
news:
Bonjour
Sub inventaireRouge()
Dim CompterRouge As Long
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
compterRouge = compterRouge + 1
End If
Next
MsgBox compterRouge & " cellule(s) en rouge"
End Sub

Cordialement
Pascal

"michel-hirard" a écrit dans le message de
news:cfi6f3$u0e$
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette procédure sur le
site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End If sans bloc
If".

Une bonne âme peut-elle m'indiquer pourquoi, voici le code en question:

Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " & sommeRouge
end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et non faire la
somme

de leur contenu.

Merci,
Michel








Avatar
papou
Ben tu peux tout bêtement rajouter un ActiveCell.Value = compterrouge en
lieu et place de msgbox... ça aura pour effet de mettre le résultat dans la
cellule active, mais bon pas terrible :-(
Et puis si tu veux faire plus élaboré tu la transformes en fonction en lui
donnant deux paramètres, à savoir
la plage où on compte la couleur et la cellule où on met le résultat
Exemple :
Function InventaireRouge(LaPlage as Range, Dest as Range) As Long
...et dans le code
...remplacer la ligne msgbox par
Inventaireenrouge = compterrouge
end Function

Ensuite tu mets ta fonction dans une cellule, mais attention ! le résultat
ne se mettra pas à jour dans le cas ou des couleurs sont changées après
coup, il faudra forcer le recalcul par F9 notamment

Cordialement
Pascal


"michel-hirard" a écrit dans le message de
news:cfi8md$g9c$
OK, merci pascal,
Simplement pourrais-tu me dire comment récupérer le résultat de la macro
dans un cellule, de manière à le réexploiter par ailleurs.
Merci,




"papou" <cestpasbonpapou@çanonplus44.fr> a écrit dans le message de
news:
Bonjour
Sub inventaireRouge()
Dim CompterRouge As Long
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
compterRouge = compterRouge + 1
End If
Next
MsgBox compterRouge & " cellule(s) en rouge"
End Sub

Cordialement
Pascal

"michel-hirard" a écrit dans le message de
news:cfi6f3$u0e$
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette procédure sur
le



site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End If sans bloc
If".

Une bonne âme peut-elle m'indiquer pourquoi, voici le code en
question:




Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " & sommeRouge
end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et non faire la
somme

de leur contenu.

Merci,
Michel












Avatar
papou
Oups la ! (no comment)
Bon je reprend :
si tu choisis l'option fonction, tu modifies comme ça :
Function InventaireRouge(LaPlage as Range, Dest as Range) As Long
Dim CompterRouge As Long
compterRouge = 0
For Each cell In LaPlage
If cell.Interior.Color = vbRed Then
compterRouge = compterRouge + 1
End If
Next cell
InventaireRouge = compterRouge
End Function

Cordialement
Pascal


"papou" <cestpasbonpapou@çanonplus44.fr> a écrit dans le message de
news:%
Ben tu peux tout bêtement rajouter un ActiveCell.Value = compterrouge en
lieu et place de msgbox... ça aura pour effet de mettre le résultat dans
la

cellule active, mais bon pas terrible :-(
Et puis si tu veux faire plus élaboré tu la transformes en fonction en lui
donnant deux paramètres, à savoir
la plage où on compte la couleur et la cellule où on met le résultat
Exemple :
Function InventaireRouge(LaPlage as Range, Dest as Range) As Long
...et dans le code
...remplacer la ligne msgbox par
Inventaireenrouge = compterrouge
end Function

Ensuite tu mets ta fonction dans une cellule, mais attention ! le résultat
ne se mettra pas à jour dans le cas ou des couleurs sont changées après
coup, il faudra forcer le recalcul par F9 notamment

Cordialement
Pascal


"michel-hirard" a écrit dans le message de
news:cfi8md$g9c$
OK, merci pascal,
Simplement pourrais-tu me dire comment récupérer le résultat de la macro
dans un cellule, de manière à le réexploiter par ailleurs.
Merci,




"papou" <cestpasbonpapou@çanonplus44.fr> a écrit dans le message de
news:
Bonjour
Sub inventaireRouge()
Dim CompterRouge As Long
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
compterRouge = compterRouge + 1
End If
Next
MsgBox compterRouge & " cellule(s) en rouge"
End Sub

Cordialement
Pascal

"michel-hirard" a écrit dans le message de
news:cfi6f3$u0e$
Bonjour,
Merci à Philippe pour sa réponse; j'avais déjà vu cette procédure
sur




le
site, mais elle ne fonctionne pas.
Elle renvoie un message d'erreur de compilation avec "End If sans
bloc




If".
Une bonne âme peut-elle m'indiquer pourquoi, voici le code en
question:




Sub inventaireRouge()
sommeRouge = 0
compterRouge = 0
For Each cell In ActiveSheet.UsedRange
If cell.Interior.Color = vbRed Then
On Error Resume Next
sommeRouge = sommeRouge + cell.Value
On Error GoTo 0
compterRouge = compterRouge + 1
End If
Next
If compterRouge = 1 Then c = "cellule" Else c = "cellules"
MsgBox compterRouge & " " & c & " -- Total = " & sommeRouge
end if
End Sub

Par ailleurs je souhaite compter le nombre de cellules et non faire
la




somme
de leur contenu.

Merci,
Michel