[Déplacé VB6 --> VBA] EXCEL : recherche de la couleur d'une cellule dans une pla

herve34600 Messages postés 4 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009 - 29 déc. 2009 à 15:55
herve34600 Messages postés 4 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009 - 30 déc. 2009 à 23:12
Bonjour,

Je suis novice de VBA et je souhaiterais avoir une fonction supplémentaire qui me permettrait d'utiliser la couleur d'une cellule pour excécuter une opération.

J'ai imaginé 2 solutions possible :
1 - une fonction de type recherchev()qui me donnerait la couleur d'une cellule,
2 - une fonction qui rechercherait la couleur d'une cellule dans une plage selon N° ligne et Colonne.

J'utilise déjà 2 fonctions supplémentaires : ADD_Couleur() et ColorCell().

Merci pour votre aide.
Hervé

5 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
29 déc. 2009 à 18:16
Salut
Pas tout compris avec tes histoires de fonctions.
La couleur d'une cellule (texte ou fond) est la même propriété en écriture (attribution couleur) ou en lecture, ce que tu cherches à faire.
    With Range("A1").Font
        Debug.Print .Color
        Debug.Print .ColorIndex
    End With
    With Range("A1").Interior
        Debug.Print .Color
        Debug.Print .ColorIndex
    End With

Pour énumérer toutes les cellules incluses dans un Range :
    Dim maCell As Object
    For Each maCell In Range("A1:B12")
        Debug.Print maCell.Text
    Next

Un petit If-Then-Else, et tu sauras retrouver tes infos en combinant le tout.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
herve34600 Messages postés 4 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 00:19
Bonsoir,

Merci pour votre réponse rapide.
En effet je n'ai pas été très clair par soucis de simplification mais ça ne marche pas.

En faite je gère la plannification annuelle (de présence des activités) de près de 120 personnes réparties dans 7 secteurs différents et 12 équipes différentes .

Afin d'obtenir les effectifs de restauration journalière et nominative pour 9 cantines différentes possibles (chaque personne ou équipe pouvant changer de restaurant selon les activités), j'utilise un autre tableau annuel calculant pour chaque jour et chaque personne la présence au repas.

Puis, j'utilise la couleur des cellules pour distinguer les lieux de restauration.

Dans un 3ème tableau journalier après avoir renseigné la date des effectifs nominatifs pour l'édition, je récupère les données en chiffre et en couleur et je les classe dans les bonnes cases puis je les compte en fonction aussi des type de repas (sans porc, hypo, sns poisson, etc..).

En imbriquant la fonction index() dans la fonction ColorCell(), j'arrive à récupérer et analyser les données et les couleurs.

En simplifiant au mieux ??!!, le fichier comprenant les 2 derniers tableaux pèse près de 4Mo (très lourd) (quand au fichier comprenant le planning principale il pèse moins de 1Mo).

J'ai imbriqué le code Application.Volatile True dans chaque fonction afin que le calcul puisse se faire après avoir modifier les couleurs.

Le temps de calcul est très long (10 à 20 secondes)
J'ai désactivé le calcul auto pour mettre uniquement la solution manuel.
Mon soucis est que la personne qui va saisir les modifs de présence (Arrêt de travail ou autre) et les couleurs pour les lieux de restauration, devra toujours penser à lancer le calcul manuel avant tout édition.

Peux être je dois faire une macro liée à un bouton "Calcul avant édition" afin de lancer le calcul manuel.
Cette personne gère d'autres fichiers Excel, je pense que ça va être trop compliqué de changer toujours les paramêtres d'Excel en fonction des fichiers utilisés.

Avez vous une solution pour :
1- allèger les fichiers ?
2- accèler le temps de calcul ?
3- ou autres ?

Merci
hervé
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
30 déc. 2009 à 01:39
Re
Ah oui, le problème est complètement différent du premier énoncé.
Si tu ne veux pas que les feuilles soient recalculées, il te suffit de demander à stopper le calcul automatique, oui, avec Application.Calculation = xlManual
De demander un recalcul avant l'édition avec Calculate
En option, tu peux ajouter un bouton "Recalculer" avec ce même code de demande de calcul.

ColorCell est une fonction à toi dont on ne sait strictement rien : Impossible de te dire quoi faire

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
herve34600 Messages postés 4 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 07:02
Bonjour Jack,

Super pour la modif de la fonction Application.Calculation True.
Je vais essayer.

Comment j'utilise la fonction "Calculate" ?

Si j'ai plusieurs fichiers ouverts simultanément avec les fonctions VBA et la modif que tu proposes, en lançant "Calculate" dans les fichiers d'édition des repas ou de la facturation, les autres fichiers sont-ils recalculé aussi ou dois-je aller dans chaque fichier et recalculer ?

Voilà le code des fonctions utilisées :

Function ColorCell(C As Object)
Application.Volatile True
ColorCell = Abs(C.Interior.ColorIndex)
End Function

Function ADD_Couleur(Rg As Range, LaCouleur As Integer) As Double
Application.Volatile True
Dim C As Range
For Each C In Rg.SpecialCells(xlCellTypeConstants, xlNumbers)
If C.Interior.ColorIndex = LaCouleur Then
ADD_Couleur = ADD_Couleur + C.Value
End If
Next
End Function

A bientôt
Merci
Hervé
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
herve34600 Messages postés 4 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 30 décembre 2009
30 déc. 2009 à 23:12
Salut,

Super , avec la fonction Application.Calculation = xlManual ça fonction bien mieux.
Excel recalcul en cas de changement de couleur d'une cellule et le recalcul est plus ciblé.

Merci encore
Hervé
0
Rejoignez-nous