Prise en compte MFC dans les formules VBA
bonjour,
dans le fichier joint, il y a pas mal de MFC, les MFC ont été rajoutées au fur et à mesure afin de rendre l'utilisation du fichier plus ergonomique, certaine formule se basse sur les couleurs des cases et je n'arrive pas à les prendre en compte.
j'ai vu que les couleurs des mfc ne sont pas visible automatiquement en vba et qu'il y a des astuces pour les prendre en comptes mais je ne connais vraiment pas bien VBA et tout ce que je fais BUG, les formules existantes proviennent d'aide déjà reçu sur ce forum.
j'ai encore besoin d'aide
merci
Bonjour brice2b
Un peu de lecture ici https://www.excel-pratique.com/fr/astuces_vba/couleur-cellule-mfc
A+
salut Bruno,
merci pour ta réponse, c'est ce que j'ai fait mais j'ai toujours une erreur (tableau dans mon onglet gréve)
je me demande au final si l'erreur vient de là...
j'ai remarqué aussi que mes MFC n'était pas prise en compte à chaque fois, il y a un ordre de priorité que je souhaiterai faire "sauter" mais je n'ai rien trouvé dessus
Function tauxHpourCent(noms As Range, tauxH As Range, journée As Range, nom As String, couleur As Range, Optional totalARepartir) As Variant
Dim noms2, tauxH2, coul As Long, totTaux As Double
Dim c As Range, i As Long, ligAgent As Long
Application.Volatile
noms2 = noms.Value
tauxH2 = tauxH.Value
col = cl.DisplayFormat.Interior.Color
For Each c In journée
i = i + 1
' somme des taux non grévistes
If cl.DisplayFormat.Interior.Color = coul Then
totTaux = totTaux + tauxH2(i, 1)
End If
' ligne agent demandé ?
If noms(i, 1) = nom Then
ligAgent = i
If cl.DisplayFormat.Interior.Color <> coul Then
'agent non NON gréviste =>""
tauxHpourCent = vbNullString
GoTo fin
End If
End If
Next c
tauxHpourCent = tauxH2(ligAgent, 1) / totTaux
If Not IsMissing(totalARepartir) Then tauxHpourCent = tauxHpourCent * totalARepartir
fin:
End Function
Re,
A priori, vous avez installé l'Add-In XLP, donc vous pouvez déjà utiliser
https://www.excel-pratique.com/fr/fonctions-complementaires/somme-si-colore
pour vos totaux qui sont faux
Sinon, le fait que l'Add-in ne soit pas installé correctement pose problème dans l'exécution de votre fonction TauxHpourCent()
De plus que cherchez-vous à calculer dans ces cellules !?
A+
bonjour le fil,
displayformat fonctionne dans une macro ordinaire mais ne fonctionnen pas dans une fonction personnalisée (je pense).
Comme ça ? je ne sais pas quel résultat vous attendez.
EDIT : @BrunoM, je n'avais pas encore vu votre réaction au moment où j'ajoutais ce poste, donc, j'attends aussi la réponse de brice2b
Bonjour BsAkl
bonjour le fil,
displayformat fonctionne dans une macro ordinaire mais ne fonctionnen pas dans une fonction personnalisée (je pense).
Si, DisplayFormat fonctionne peu importe si c'est une fonction ou sub,
en revanche la façon de faire n'est pas propre à mes yeux
J'attends une réponse de Brice2b
A+
@Brice2b ou ponpon2b
Je vous invite à lire la charte du forum [A LIRE AVANT DE POSTER] et notamment :
- Ne postez pas la même question sur un autre forum pour éviter de faire perdre bêtement du temps aux membres sur un problème qui peut être déjà résolu sur l'autre forum. L'inverse est également valable, si vous avez déjà posé votre question sur un autre forum, ne créez pas un doublon sur ce forum (à moins d'avoir clôturé le sujet sur l'autre forum).
Prenez votre décision,
Merci de votre compréhension et de votre participation
salut,
merci à vous de vous intéressez à mon projet.
la formule "tauxHpourCent" sert à calculer la répartition en pourcentage de la somme à rembourser (perte totale journalière) par les non gréviste (les cases verte).
je pense avoir bien installé ADD in, sinon comment puis-je voir si il est mal installé?
le 1er fichier que j'ai mis en pièce jointe est un fichier que j'ai voulu simplifier pour l'utilisateur, qu'il n'y est que le tableau dans l'onglet données à remplir avec gréviste et non gréviste.
je vous mets le fichier initiale qui pourra peut-être vous aider à comprendre ...
pour que les calculs fonctionnent il faut mettre les couleurs manuellement dans tout les tableaux
Effectivement, je l'ai posé ailleurs, désolé .
Je l'ai supprimé sur l'autre forum
Bonsoir,
je pensais avoir répondu à ton MP, visiblement je n'avais pas validé.
A ce moment c'était des couleurs manuelles.
Vu la lenteur de ton fichier, peut-être pas la peine d'en rajouter avec des MFC.
A la place un double-clic dans grève!E4:AO28 cycle sur les 4 couleurs de la MFC.
Vu que tu ne l'avais pas anonymisé je met le fichier en MP
eric
PS : quand tu as demandé des fonctions personnalisées je ne pensais pas que tu les utiliserais près de 2000 fois (?!?) sinon on serait passé à un remplissage direct des tableaux.
Si tu veux rendre ton fichier plus supportable il faut limiter ces appels.
Sur les journées passées fais un copié-collage spécial valeur pour éliminer les formules et garder le résultat.
Ne garde qu'une seule colonne ( 4-5 max) avec formule et vide les formules des jours futurs.
Quand tu ajoutes un jour, tu sélectionnes la colonne avec formule que tu tires vers la droite pour étendre.
Tu peux aussi faire un copié-collé des formules sur un jour précédent pour effectuer une correction et terminer avec copié-collage spécial valeur
je recherche une solution qui me permettrait une seule fois de rentrer les données gréviste, non gréviste. aussi la possibilité de rajouter une ligne qui soit prise en compte dans tout les tableaux.
je réfléchi à aménager tous ça et je suis preneur de toute nouvelle idée
encore merci de votre participation
bonjour,
je pense qu'il y a une erreur sur cette ligne
col = cl.DisplayFormat.Interior.Colorne devrait-ce pas être coul et non col ?
edit : à la relecture, ce code me semble contenir d'autres anomalies
Function tauxHpourCent(noms As Range, tauxH As Range, journée As Range, nom As String, couleur As Range, Optional totalARepartir) As Variant
' couleur non utilisé
Dim noms2, tauxH2, coul As Long, totTaux As Double
Dim c As Range, i As Long, ligAgent As Long
Application.Volatile
noms2 = noms.Value
tauxH2 = tauxH.Value
col = cl.DisplayFormat.Interior.Color ' cl non initialisé, manque un u à col ?
For Each c In journée
i = i + 1
' somme des taux non grévistes
If cl.DisplayFormat.Interior.Color = coul Then ' 'cl devrait être c ?
totTaux = totTaux + tauxH2(i, 1)
End If
' ligne agent demandé ?
If noms(i, 1) = nom Then
ligAgent = i
If cl.DisplayFormat.Interior.Color <> coul Then 'cl devrait être c ?
'agent non NON gréviste =>""
tauxHpourCent = vbNullString
GoTo fin
End If
End If
Next c
tauxHpourCent = tauxH2(ligAgent, 1) / totTaux
If Not IsMissing(totalARepartir) Then tauxHpourCent = tauxHpourCent * totalARepartir
fin:
End Functionsalut j'ai corrigé les erreurs mais bon, tjs un bug ... les couleurs ne sont pas prise en compte