Probléme de reconnaissance de couleur en VBA .....

Résolu/Fermé
Valerie54001 Messages postés 134 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 2 mars 2024 - 24 févr. 2018 à 18:55
Valerie54001 Messages postés 134 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 2 mars 2024 - 3 mars 2018 à 00:16
Bonjour la communauté,

Je viens vers vous car j'ai besoin de vos lumières !!!

Dans le fichier ci-joint, j'utilise une couleur verte dont le code couleur est 16777215 mais j'ai l'impression qu'il ne la reconnaît pas dans le code.

https://mon-partage.fr/f/hIiLkLHc/

Qu'en dites vous?
A voir également:

1 réponse

eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
24 févr. 2018 à 19:51
Bonjour,

tu pourrais préciser quelle macro de quel module, pas envie de fouiller partout pour essayer de deviner.
Cependant avec le peu que j'en ai vu :
- une fonction personnalisée doit être dans un module Standard si tu veux l'appeler d'une feuille. Celle dans ThisWorbook n'a rien à y faire.
- il distinguer les couleurs mises manuellement (.Interior) de celles d'une MFC qui n'est pas .Interior
eric

0
Valerie54001 Messages postés 134 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 2 mars 2024 1
24 févr. 2018 à 20:12
Bonsoir eriiic,

Cela se passe dans le module 2 :

Option Explicit

Const vert As Byte = 10
Const vert2 = 16777215

Public Function codecoul(cel As Range) As Long
codecoul = cel.Interior.Color
End Function

Public Function truc(plage As Range) As String
Dim nbli As Long, li As Long
Dim vert1 As Long, vert2 As Long, text1 As Long, text2 As Long
Dim textvert1 As String, textvert2 As String
If plage.Columns.Count > 2 Then truc = "trop de colonnes": Exit Function
nbli = plage.Rows.Count
textvert1 = "": textvert2 = ""
vert1 = 0: vert2 = 0: text1 = 0: text2 = 0
For li = 1 To nbli
If plage.Cells(li, 1).Interior.ColorIndex = vert Then vert1 = vert1 + 1: textvert1 = plage.Cells(li, 1).Value
If plage.Cells(li, 2).Interior.ColorIndex = vert Then vert2 = vert2 + 1: textvert2 = plage.Cells(li, 2).Value
If plage.Cells(li, 1).Interior.ColorIndex = xlNone And plage.Cells(li, 1).Value <> "" Then text1 = text1 + 1
If plage.Cells(li, 2).Interior.ColorIndex = xlNone And plage.Cells(li, 2).Value <> "" Then text2 = text2 + 1
Next li
If vert1 + vert2 = 0 And text1 + text2 <> 0 Then
truc = "NUL": Exit Function
ElseIf text1 = 0 And text2 = 0 Then
truc = "RIEN": Exit Function
ElseIf vert1 <> 0 And vert2 <> 0 Then
truc = "N/A": Exit Function
ElseIf vert1 = 0 And vert2 <> 0 Then
truc = textvert2
ElseIf vert1 <> 0 And vert2 = 0 Then
If text1 <> 0 Then
truc = "N/A": Exit Function
Else
truc = textvert1: Exit Function
End If
Else: truc = "non prévu"
End If
End Function


Comment dois-je m'y prendre pour : '' il distinguer les couleurs mises manuellement (.Interior) de celles d'une MFC qui n'est pas .Interior ''
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
Modifié le 24 févr. 2018 à 23:39
Tu as bien .DisplayFormat.Interior.Color qui te dit la couleur MFC d'affichée mais...
impossible de l'utiliser dans une fonction personnalisée, uniquement dans un sub.

Là il faut que tu utilises le même test que ta MFC (la formule) pour savoir si elle est active ou non.
A-priori tu recherches le prénom et le "X" ailleurs, la condition est remplie si trouvés, et le vert se met. Faire donc l'équivalent en vba.
eric
0
Valerie54001 Messages postés 134 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 2 mars 2024 1
25 févr. 2018 à 20:00
Merci eriic pour ta réponse , bien qu'elle ne me sortira pas des sables mouvants dans lesquels j'y ai mise les pieds.
y-a-t-il une âme charitable ? pour me sortir du pétrin !!!
0
eriiic Messages postés 24569 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 28 décembre 2023 7 211
25 févr. 2018 à 23:22
Explique en mots ta MFC, ça sera plus simple et plus sûr que de decrypter ta formule.
eric
0
Valerie54001 Messages postés 134 Date d'inscription mardi 22 novembre 2016 Statut Membre Dernière intervention 2 mars 2024 1
26 févr. 2018 à 21:51
C'est très gentil de ta part ;)

Je vais essayer d'être la plus claire possible:

Sur la feuille '' Trieur '' il y a 9 tableaux , les règles suivantes sont les mêmes pour chacun d'entre eux.

Un tableau est composé d'une date ( elle ne servira à rien )
De 2 prénoms ( Pierre et David ) et de couleurs Vert (V) et Blanc (B) ( attention au code couleur du vert sélectionné.
Un chiffre allant de 1 à 9 ( ile ne te serviront à rien )
Principalement le tableau sélectionne une plage de colonne et de ligne bien défini.
Donc concentrons-nous sur les différents cas que nous devons traiter différentes possibilités qui donneront différentes réponses.

1er exemple :
Pierre V David B
Pierre V David B
.......
Soit Pierre toujours en V dans la plage sélectionnée alors le résultat sera Pierre.

2nd exemple :
Pierre V David B
Pierre B David B
Pierre B David V

Dans la plage sélectionnée nous avons eu Pierre et David en V alors le résultat sera N/A.

3éme exemple :
Pierre B David V
Pierre B David V
.......
Soit David toujours en V dans la plage sélectionnée alors le résultat sera David.

4éme exemple :
Pierre B David B
Pierre B David B
.......
Soit Pierre et David toujours en B dans la plage sélectionnée alors le résultat sera NUL.

5éme exemple :
Pierre B David B
Pierre B David V
.......
Soit Pierre et David ne sont pas toujours en B dans la plage sélectionnée , David n'est pas toujours en V car il a été une fois en B alors le résultat sera N/A.

Vois-tu plus clair ?
0