salut, je travail sur la macro de l'oi n°200, décembre, page 168 concernant un calcul de cellule de meme couleur.
oi a écrit :
Option Explicit
Function som_couleur(plage As Range, couleur As Integer) As Double
Dim r As Range, nb As Double
Application.Volatile
nb = 0 (chiffre ou lettre ???)
For Each r In plage
If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
Next
som_couleur = nb
End Function
Function cellcouleur(c As Range)
cellcouleur = c.Interior.ColorIndex
End Function
puis sur le tableau, taper dans un cellule =cellcouleur(cellule) pour avoir le numéro de la couleur (ça marche) mais lorsque je saisis =som_couleur(A1:B5;39) je reçois le message erreur de formule. merci d'avance, amicalement
-->Message édité par marvelous02 le 28/02/2008 21:10:54<--
Même cause, Même effet : la fonction couleur fonctionne. Pour l'autre
Avec le message : Erreur de comilation, Next sans For
Merci aux spécialistes du VBA de nous aider à déboguer la fonction : je soupconne le "As Double " d'être à l'origine du plantage ??? !
Option Explicit
Function som_couleur(plage As Range, couleur As Integer) (j'ai enlevé le "As Double" qui sortait en erreur)
Dim r As Range, nb As Double
Application.Volatile
nb = 0 (c'est le chiffre zéro pas un o)
For Each r In plage
If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
Next
som_couleur = nb
End Function
Function cellcouleur(c As Range)
cellcouleur = c.Interior.ColorIndex
End Function
cela me donne bien :
1 8
15 6
3 9
5 19
19 0
39 numéro de cette couleur
34
le 15 et le 19 étant de la même couleur
(je ne sais plus comment on insère une image désolé)
Ca marche !
Mon erreur (a priori) c'est d'avoir mis la ligne de code :
If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
sur deux lignes :
If r.Interior.ColorIndex = couleur Then
nb = nb + r.Value
j'ai remis "As Double" mais en bout de ligne, pas comme indiqué dans OI n°200
idem pour la ligne "if r.Interior............" "nb=nb+r.value" va sur la même ligne
et enfin "nb = 0" c'est bien le chiffre zéro
Option Explicit
Function som_couleur(plage As Range, couleur As Integer) As Double
Dim r As Range, nb As Double
Application.Volatile nb = 0
For Each r In plage If r.Interior.ColorIndex = couleur Then nb = nb + r.Value
Next
som_couleur = nb
End Function
Function cellcouleur(c As Range)
cellcouleur = c.Interior.ColorIndex
End Function
-->Message édité par Jijouille le 05/03/2008 11:31:59<--
Alors, j'ai tout refait à l'instant au bureau (oui bon c'est vrai je suis pas payé pour ça mais c'est pour le bien du forum )
et voici le résultat, tout beigne
l'image est un peu grande j'espère que ça passera
j'ai fait l'opération pour les 40 couleurs prédéterminées dans excel
je me suis amusé ensuite à mettre plusieurs cellules de la même couleur et cela fonctionne
sinon il y a t-il un moyen pour mettre le fichier excel en pièce jointe quelque part ? (attention à bien accepter les macros au départ sinon formule de calcul en erreur et il faut réouvrir le fichier)
re, merci jijouille pour ta disponibilité. Donc j'ai bie reçu ton fichier qui marche à la perfection MAIS (et oui y a un mais):
Si je modifie tes couleur de fond (A), la colonne (B) fonctionne
Si je modifie la colonne (D) en fonction de la couleur de fond (A) ça fonctionne
Si je modifie le chiffre (A) bonne réponse en (D)
mais je désire appliquer cette formule sur une autre colonne (F) ==> erreur
si j'ouvre une autre feuille ==> erreur
si je colle ton script dans un autre classeur ==> erreur
Voilà, surement un bug quelque part chez moi, puisque ça fonctionne chez toi. amicalement
mais je désire appliquer cette formule sur une autre colonne (F) ==> erreur
si j'ouvre une autre feuille ==> erreur
si je colle ton script dans un autre classeur ==> erreur
il se passe la même chose chez moi.
En fait dès que tu copies une formule pour la mettre 2 colonnes plus loin par exemple, il ne garde pas le principe d'aller chercher l'info là où elle était au départ, je m'explique :
info en A2 (chiffre 1 sur fond noir)
formule en B2 qui demande le numéro de la couleur en A2 (résultat 1)
en fait la formule demande quelle est la couleur qui est 1 colonne avant et sur la même ligne
si je copie la formule qui se trouve en B2 pour la mettre en F2
le résultat est -4142 parce que la formule en F2 est =cellcouleur(E2) c'est à dire le même chose que lorsqu'elle était en B2 : quelle est la couleur qui est 1 colonne avant et sur la même ligne
pour ce qui est d'une nouvelle feuille je n'ai pas compris ce que tu voulais y mettre
pour ce qui est du script à la base ce n'est pas mon truc, par contre pour avoir testé plusieurs fois celui-ci, je me suis aperçu que cela fonctionne très bien quand tu le tapes dans visualbasic mais dès que tu fais des copier/coller ça part un peu en sucette mais encore une fois c'est pas mon truc.