[Visual Basic] Incrémenter en fonction de la couleur

Dispix

XLDnaute Nouveau
Bonjour à tous !

Je suis ici car j'ai un problème pour lequel je n'ai pas trouvé d'aide sur internet. Ma situation est la suivante : dans le cadre de mon travail, nous avons mis en place un planning sur excel en mettant en couleur des cases pour représenter les semaines d'activité (il y a plusieurs couleur, par exemple : rouge pour "chantier", bleu pour "étude", etc.).

Dans une colonne à gauche de la zone dans laquelle j'ai mis mes cases de couleur, j'ai les heures allouée à chaque tâche et mon but serait de faire l'addition des heures de toutes les tâches d'une même couleur.

Il faudrait donc que je trouve une formule du genre :

Code:
c=0
For i = 6 to 100
For j = 5 to 100
If CouleurCellule=Rouge then c=c+Cellule(i,4).valeur
Next
Next
Cellule(1,1).valeur=c.valeur

(le code au dessus étant bien évidemment faux dans la syntaxe) :eek:

Quelqu'un aurait-il une idée du code approprié pour ce calcul ?

Je reste à votre disposition pour tout renseignement complémentaire :)
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour Dispix et bienvenue,

Prends le temps de lire Lien supprimé ... tu constateras que dans la plupart des cas, une pièce jointe est la bienvenue (elle aussi!). Une recherche aurait pu donner des pistes également.

Si j'ai bien compris, un exemple en pièce jointe, avec une fonction personnalisée ... à tester et adapter à ta situation.
 

Pièces jointes

  • Compteheures.xls
    33.5 KB · Affichages: 209

Dispix

XLDnaute Nouveau
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour à toi !

En fait le fichier est pour mon entreprise donc il n'est pas diffusable, cependant voici en ci-joint un fichier d'exemple, le vrai fichier a plus de 600 ligne et est modifié régulièrement donc une bête somme ne convient pas hélas. On a donc différente tâche, qui ont un type (ici on est soit en phase étude, soit en phase réalisation) et qui sont placé dans un calendrier à l'échelle de la semaine.

J'ai fait plusieurs recherche (sur le forum comme sur google) mais les pistes que j'ai trouvées ne m'ont pas aidé à finaliser ma macro hélas...

Les 2 valeurs dans les cases jaunes sont celles que doit me calculer la macro. En gros il irait chercher la couleur présente dans chaque ligne, et si c'est bleu il rajouterait le nombre d'heure dans la case C2/C3/etc. au total d'heure qu'il calcul.

J'espère avoir été claire :D
 

Pièces jointes

  • Exemple.xlsx
    11.3 KB · Affichages: 158
  • Exemple.xlsx
    11.3 KB · Affichages: 164
  • Exemple.xlsx
    11.3 KB · Affichages: 168

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour Dispix, le forum,

Je me suis battu contre la neige et le verglas, en compagnie de ma vieille voiture, hier. Rentré un peu tard pour m'y remettre et re-lutte contre les conditions climatiques ce matin.

Bref, une proposition en pièce jointe ... en l'achevant, je me suis dit que, finalement, aurait pu s'en sortir aussi bien avec des formules et des MFC. Dans ton classeur, un double-clic dans la plage E2:J6 active:
- la couleur bleue, si "Etude" en colonne C
- la couleur +/- prune si "Réalisation" en colonne C
Si la cellule est déjà colorée, retour à aucun remplissage.
Quand la cellule est colorée, elle contient 1; quand elle est incolore, elle contient 0. La colonne D (que tu pourras masquer) sert simpement à vérifier si (dans une ligne), une cellule au moins vaut 1.
Une formule SOMMEPROD calcule les totaux.

Comme pour la première proposition, celle-ci est à tester et adapter ... Fichier au format .xls, mais testé sous Xl2007 (seule les couleurs sont parfois différentes)
 

Pièces jointes

  • Dispix.xls
    38 KB · Affichages: 145

Dispix

XLDnaute Nouveau
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour modeste !

En effet voila une macro qui m'aide beaucoup (il faudra juste que je remanie un peu ma feuille excel ^^). J'ai quelques petites questions sur les lignes de commandes que tu as utilisé :

Code:
If Application.Intersect(Target, ActiveSheet.Range("F5:BT472")) Is Nothing Then Exit Sub 'plage à adapter

A quoi sert cette ligne ? J'ai mis la plage dans laquelle j'ai placé mon tableau, je pense que c'était ça qu'il fallait adapter.

Code:
Target.Font.Color = 14922893

Je ne connais pas ce format pour désigner une couleur :confused: Comment puis-je convertir les couleur que je veux utiliser dans ce format, et est-il possible de remplacer par une formule du style :
Code:
Target.Font.Color = RGB(0,0,0)

Dernière question, j'ai copier ta macro dans mon fichier, mais le double clique ne colore pas les cellules, il y a-t-il une option à activer ?

En tout cas merci pour la macro que tu m'as transmise, elle est déjà bien utile ! Et pour la neige, nous sommes au moins 2 à la subir ;)
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour Dispix ... et puis tous les autres!

A la première question, tu obtiens 100%. Intersect permet de vérifier si 2 plages se "superposent" (ici, la cellule sur laquelle on double-clique et ton tableau)
A la question 2: bien sûr tu peux utiliser la fonction RGB, pour définir les couleurs!

Pour ta dernière question (la macro ne fonctionne pas dans ton fichier) ... Première piste à vérifier: la macro "capte" un événement qui survient dans une feuille particulière. Il faut donc que le code se trouve dans l'objet feuille (chez moi "Feuil1") où figure ton planning.

Comme je n'étais pas pleinement satisfait de la gestion des couleurs (surtout s'il y en avait plus que 2!) une autre proposition en pièce jointe, basée sur le même principe. Simplement, la plage A11:A20 contient les termes qui figureront en colonne B de ton planning et la couleur de remplissage à utiliser dans le planning, est définie sur les mêmes cellules.
 

Pièces jointes

  • Dispix (v2).xls
    37 KB · Affichages: 92

Dispix

XLDnaute Nouveau
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour à toi :)

Dans le fichier que tu m'as envoyé, le double click ne fonctionne plus ("l'indice n'appartient pas à la selection"). Et je ne comprend pas bien la différence avec le premier ?

J'ai un petit problème également dans mon fichier avec la fonction SOMMEPROD, j'ai un tableau qui est assez grand (467 lignes et 66 colonnes pour la partie avec les cases de couleur), du coup je n'arrive pas à utiliser SOMMEPROD à cause d'un "manque de ressources". Y aurait-il un moyen de contourner ce problème ? (Hormis changer de pc :rolleyes: )
 

JNP

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Bonjour le fil :),
Modeste devant être reparti affronter la neige et la froidure, son fichier corrigé en PJ (je pense qu'il ne m'en voudra pas).
Je ne sais pas pourquoi, mais les EnableEvents étaient désactivés, je les ai remis en route :p...
Il y avait une petite erreur, xlValue au lieu de xlValues ;)...
Bonne journée :cool:
Edit : De rien, tout le plaisir était pour moi...
 

Pièces jointes

  • Dispix (v2)(1).xls
    38.5 KB · Affichages: 91
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

re-bonjour,

Le dernier fichier fonctionnait sous XL2000, mais je n'avais pas testé sous 2007:eek:
Une toute petite correction devrait suffire: à la ligne 11 du code, ajouter un 's' final à
LookIn:=xlValues
... chez moi, ça fonctionne, en tout cas!
Peux-tu tester cette première modif? Pour ce qui est de la différence avec la macro précédente, celle-ci te dispense de définir la couleur de remplissage dans la macro: elle repère la couleur utilisée dans la plage A11:A20, automatiquement.
Je regarde si on peut intégrer l'équivalent de la fonction SOMMEPROD dans la macro elle-même.

Edit: Salut Jean-Noël, merci pour le relais et la correction!
 

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Re et re-bonjour,

En modifiant un rien les formules en colonne D, plus besoin de formules matricielles en colonne B (le tout devrait être moins gourmand en ressources !? ... à vérifier)

Tu nous diras ce qu'il en est ...
 

Pièces jointes

  • Dispix (v3).xls
    39.5 KB · Affichages: 78
Dernière édition:

Dispix

XLDnaute Nouveau
Re : [Visual Basic] Incrémenter en fonction de la couleur

Re et re-bonjour,

En modifiant un rien les formules en colonne D, plus besoin de formules matricielles en colonne B (le tout devrait être moins gourmant en ressources !? ... à vérifier)

Tu nous diras ce qu'il en est ...

Effectivement ça remarche !

Cependant, pour ce qui est du calcul, le problème est que je souhaiterais pouvoir faire le total par semaine (je ne sais pas si je m'étais correctement exprimé au début :eek: ). Avec la formule dans la case je ne peut que compter le nombre d'heures sur la totalité du planning. C'est pour ça que je pensais initialement à une condition sur la couleur de la case.

Edit : En fait ça marche bien sur ton fichier, par contre cela ne marche toujours pas sur le mien, je suis en train de chercher ce qui ne va pas.
 
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

Salut,

je ne sais pas si je m'étais correctement exprimé au début
... En tout cas, ce qui est certain, c'est qu'on n'a pas dû se comprendre (dans le premier fichier que tu as déposé, à quoi correspondent les 135 heures d'étude) :confused:

Pour ton fichier, un indice figure peut-être dans le message de JNP
Je ne sais pas pourquoi, mais les EnableEvents étaient désactivés
Ajoute cette petite procédure en-dessous de tout le reste:
Code:
Sub test()
Application.EnableEvents = True
End Sub
place ton curseur sur la seule instruction (ligne 2) et appuye sur la touche F5. Essaye ensuite de retourner dans le tableau, faire un double-clic?
Si ça fonctionne, il ne te restera plus qu'à élever une statue en mémoire des cigognes, sur la place du village ;)
 

Dispix

XLDnaute Nouveau
Re : [Visual Basic] Incrémenter en fonction de la couleur

Hélas non la manip n'a rien changé :)

Pour l'instant j'ai réussi à faire que les cellules coloré devienne blanche lorsqu'on double-clique, par contre je n'arrive toujours pas à faire marcher dans le sens inverse. C'est surement la partie cherchcoul que je n'arrive pas à adapter correctement, pourtant il me semble avoir désigner les bonnes cellules :(

Edit : Alors là oui, j'ai oublié une partie de ce que je souhaitais dans mon premier exemple (ou comment passer pour un idiot en 1 leçon...).

Voila un nouveau fichier plus complet. Milles excuses :/

Edit 2 : J'ai encore du mieux ! Maintenant quand je clique sur une case sans couleur, j'ai effectivement une couleur qui apparait, seulement si jamais je la remet sans couleur je ne peut plus la colorer une deuxième fois (en fait la macro ne met pas "pas de couleur" mais du blanc, donc la macro considère qu'il y a une couleur). Du coup j'ai rajouté des conditions dans le IF et maintenant ça marche ! Sauf que en cas de cellule colorer, la macro me remet toujours une couleur blanche alors qu'il serait mieux de mettre "aucune couleur" dans la case.

Edit 3 : C'est tout bon j'ai résolu mon problème et les cases redeviennent bien "sans couleur" (j'avais un peu bidouillé la macro pour adapter à mon tableau car la couleur de fond n'est pas tout le temps du blanc, et j'avais mis un If Cells(7, Target.Column).Interior.Color = xlNone Then au lieu d'un If Cells(7, Target.Column).Interior.ColorIndex = xlNone Then :) )
 

Pièces jointes

  • Exemple.xlsx
    11.8 KB · Affichages: 76
  • Exemple.xlsx
    11.8 KB · Affichages: 92
  • Exemple.xlsx
    11.8 KB · Affichages: 89
Dernière édition:

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

re³,

j'ai oublié une partie de ce que je souhaitais dans mon premier exemple (ou comment passer pour un idiot en 1 leçon...)
C'est assurément une Grande Distinction que tu remportes là ;) ... mais bon, on est en pleine "trêve des confiseurs". Ceci dit, pour ce coup-là, si on veut répondre par formule, ce sera une matricielle, à tous les coups (donc risques de lenteur, à nouveau?) ... ou alors, à intégrer dans le code (mais avec un re-calcul aussi, à chaque double-clic)?
Bref, avant d'aller plus loin, peux-tu nous dire si:
- la question des couleurs est réglée (je vois à l'instant tes différents 'Edit')?
- la structure du dernier exemple est conforme à celle de ton fichier "final" (il me semble que tu avais parlé de "remanier" ta feuille)?
- les deux seuls "Types" à gérer sont "Etude" ou "Réalisation"?
 

Modeste

XLDnaute Barbatruc
Re : [Visual Basic] Incrémenter en fonction de la couleur

re-re et re-bonjour,

En espérant que mes hypothèses étaient les bonnes ... j'ai:
- Transformé en simple somme les formules de la colonne D.
- Rajouté, dans un module, une fonction personnalisée (coulParSemaine)
- Transformé aussi en simple somme le calcul du nombre total d'heures d'Etude ou de Réalisation

A tester sur ton fichier "grandeur nature"
 

Pièces jointes

  • dispix (V4).xls
    34 KB · Affichages: 151

Discussions similaires

Réponses
0
Affichages
132

Statistiques des forums

Discussions
312 075
Messages
2 085 077
Membres
102 771
dernier inscrit
TiavinaKewin