OVH Cloud OVH Cloud

Fonction personnalisée

10 réponses
Avatar
Philippe Meresse
Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3 (exemple)
mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier une
deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre si
je fais machine arrière le fait d'en vider une me laisse le résultat 1 et
deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function

10 réponses

Avatar
Denis Michon
Bonjour Philippe,

Une des 2 méthodes devraient fonctionner :


'---------------------------------
Function TotalPUBf(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------

Salutations!

"Philippe Meresse" a écrit dans le message de news:cad218$kkj$
Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3 (exemple)
mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier une
deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre si
je fais machine arrière le fait d'en vider une me laisse le résultat 1 et
deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function
Avatar
Philippe Meresse
Bonsoir Denis et merci pour l'aide,
malheureusement cela ne marche pas mieux et à le même résultat.
Dommage!
@+
Phil
"Denis Michon" a écrit dans le message de
news:xaoyc.20410$
Bonjour Philippe,

Une des 2 méthodes devraient fonctionner :


'---------------------------------
Function TotalPUBf(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------

Salutations!

"Philippe Meresse" a écrit dans le message
de news:cad218$kkj$

Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3
(exemple)

mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier
une

deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre
si

je fais machine arrière le fait d'en vider une me laisse le résultat 1 et
deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function





Avatar
michdenis
Bonjour Philippe,


Désolé, il y avait une légère erreur de transcription...

Si cela ne fonctionne pas, peux-tu me dire sur quelle version d'excel tu travailles ? Ces fonctions ont été testé sur
excel 2002. Et le résultat attendu est bon !


'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------


Salutations!





"Philippe Meresse" a écrit dans le message de news:cad5nj$kc7$
Bonsoir Denis et merci pour l'aide,
malheureusement cela ne marche pas mieux et à le même résultat.
Dommage!
@+
Phil
"Denis Michon" a écrit dans le message de
news:xaoyc.20410$
Bonjour Philippe,

Une des 2 méthodes devraient fonctionner :


'---------------------------------
Function TotalPUBf(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------

Salutations!

"Philippe Meresse" a écrit dans le message
de news:cad218$kkj$

Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3
(exemple)

mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier
une

deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre
si

je fais machine arrière le fait d'en vider une me laisse le résultat 1 et
deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function





Avatar
docm
Bonjour Philippe Meresse.

Voici une réponse donnée par Laurent
Re: recalcul
Date: 2000-11-06 08:24:47 PST

Le fait de modifier le format d'une cellule ne déclenche aucun événement
Calculate (ni même Change). Le mieux que tu puisses faire, c'est ajouter
'Application.Volatile' au début de la fonction et revalider la formule.
Son résultat sera mis à jour à chaque nouvelle saisie ou en appuyant sur
F9 (à condition que le mode de calcul soit automatique).
Fin de la citation.

Tu peux aussi utiliser un événement On Time.

Sous toutes réserves.


"Philippe Meresse" wrote in message
news:cad218$kkj$
Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3
(exemple)

mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier
une

deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre
si

je fais machine arrière le fait d'en vider une me laisse le résultat 1 et
deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function




Avatar
ChrisV
Bonjour docm,

Tout à fait exact !
Il reste aussi la possibilité, sans avoir à ajouter Application.Volatile en
début de fonction, de forcer le recalcul avec Ctrl+Alt+F9


ChrisV


"docm" a écrit dans le message de
news:%23z7c$v$
Bonjour Philippe Meresse.

Voici une réponse donnée par Laurent
Re: recalcul
Date: 2000-11-06 08:24:47 PST

Le fait de modifier le format d'une cellule ne déclenche aucun événement
Calculate (ni même Change). Le mieux que tu puisses faire, c'est ajouter
'Application.Volatile' au début de la fonction et revalider la formule.
Son résultat sera mis à jour à chaque nouvelle saisie ou en appuyant sur
F9 (à condition que le mode de calcul soit automatique).
Fin de la citation.

Tu peux aussi utiliser un événement On Time.

Sous toutes réserves.


"Philippe Meresse" wrote in message
news:cad218$kkj$
Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3
(exemple)

mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier
une

deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre
si

je fais machine arrière le fait d'en vider une me laisse le résultat 1
et


deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function








Avatar
AV
Quand la colorisation des cellules est le résultat d'une mise en forme
conditionnelle, ça va tout de suite mieux

Beurkk... pour les "somme.si.jaune" ou autre trucs du même genre...
AV
Avatar
Philippe Meresse
Bonjour,
alors j'ai Excel 2000 mais cela n'est pas mieux après un nouveau test.
Précision pour colorier mes cellules je procède à l'aide d'un bouton et la
macro suivante où des autres avec différentes Value:
Sub reposcompensateur()
'
With ActiveCell
.Value = "RC"
.Interior.ColorIndex = 4
ActiveCell.Offset(0, 1).Select
End With

End Sub

"michdenis" a écrit dans le message de
news:uwfT1t$
Bonjour Philippe,


Désolé, il y avait une légère erreur de transcription...

Si cela ne fonctionne pas, peux-tu me dire sur quelle version d'excel tu
travailles ? Ces fonctions ont été testé sur

excel 2002. Et le résultat attendu est bon !


'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------


Salutations!





"Philippe Meresse" a écrit dans le message
de news:cad5nj$kc7$

Bonsoir Denis et merci pour l'aide,
malheureusement cela ne marche pas mieux et à le même résultat.
Dommage!
@+
Phil
"Denis Michon" a écrit dans le message de
news:xaoyc.20410$
Bonjour Philippe,

Une des 2 méthodes devraient fonctionner :


'---------------------------------
Function TotalPUBf(plg As Range)
Application.Volatile
Dim x As Double, y As Double

For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y

End Function
'---------------------------------
Function TotalPUB(plg As Range)
Application.Volatile
Dim x As Double, y As Double
For Each cel In plg
Select Case cel.Interior.ColorIndex
Case 3
x = x + 1 / 2
Case 4
y = y + 1 / 2
End Select
Next
TotalPUB = x + y

End Function
'---------------------------------

Salutations!

"Philippe Meresse" a écrit dans le message
de news:cad218$kkj$

Bonsoir à toutes et tous,
J'utilise la fonction perso ci après en A5 pour une plage de A1:A3
(exemple)

mais il y a un bug étrange. En effet si une seule cellule est coloriée
(couleur 4 ou 3 ) je n'ai pas le total 0.5 je suis obligé dans colorier
une

deuxième pour avoir 0.5 et une troisième pour le résultat 1. Par contre
si

je fais machine arrière le fait d'en vider une me laisse le résultat 1
et


deux en moins me donne bien là 0.5.!!!!!!!
Je ne comprends rien de rien.
Merci pour l'aide fournie
Philippe Meresse

Function TotalPUB(plg As Range)
For Each cel In plg
If cel.Interior.ColorIndex = 4 Then x = x + 1 / 2
If cel.Interior.ColorIndex = 3 Then y = y + 1 / 2
Next cel
TotalPUB = x + y
End Function










Avatar
AV
Un conseil (dont tu fais ce que tu veux)
Sélection des cellules (ex : A1:A10) dans lesquelles tu dois saisir "RC" ou
"RTT" ou "Blabla" --> Données > validation >
option > autoriser > liste > Source : RC;RTT;Blabla
Ensuite :
Format > Mise en forme conditionnelle >
Condition1 > la formule est ="RC" > motif > OK
Condition2 > la formule est ="RTT" > motif > OK
Condition3 > la formule est ="Blabla" > motif > OK

Pour les calculs (en lieu et place de ta fonction perso qui posera toujours des
problèmes) ça pourrait faire :
=SOMMEPROD((A1:A10={"RC""RTT"})*0.5)

AV
Avatar
Philippe Meresse
Merci Alain pour l'idée,
Malheureusement je pense que nous sommes limité à 3 conditions et j'en aurai
un peu plus.
@micalement,
Phil
"AV" a écrit dans le message de
news:
Un conseil (dont tu fais ce que tu veux)
Sélection des cellules (ex : A1:A10) dans lesquelles tu dois saisir "RC"
ou

"RTT" ou "Blabla" --> Données > validation >
option > autoriser > liste > Source : RC;RTT;Blabla
Ensuite :
Format > Mise en forme conditionnelle >
Condition1 > la formule est ="RC" > motif > OK
Condition2 > la formule est ="RTT" > motif > OK
Condition3 > la formule est ="Blabla" > motif > OK

Pour les calculs (en lieu et place de ta fonction perso qui posera
toujours des

problèmes) ça pourrait faire :
=SOMMEPROD((A1:A10={"RC""RTT"})*0.5)

AV





Avatar
AV
Malheureusement je pense que nous sommes limité à 3 conditions et j'en aurai
un peu plus.


Si c'est le cas, solution par une proc évènementielle : autant de conditions que
tu veux !
PS : la vraie différence, c'est l'explotation ultérieure (voir formule proposée)

AV