Couleur de caractères spécifique

Bonjour,

Dans la cellule d65, j'ai une chaîne de caractères variable qui peut donner : "V N V D N" ou bien encore "N V D N D" etc.. Ces valeurs sont issues d'une formule index/equiv. J'aimerais arriver à colorer chaque caractère différent d'une couleur différente. J'ai un morceau de code qui fonctionne sur une cellule normale mais pas quand la valeur de la cellule est issue d'une formule. Et il faudrait que ça s'applique sur plusieurs feuilles en même temps (j'ai déjà un with fl qui fonctionne mais je sais pas comment intégrer ça dedans). Je mets le début de code que j'ai :

With fl

For i = 1 To Len([d65])

If Mid([d65], i, 1) = "V" Then [d65].Characters(i, 1).Font.Color = RGB(0, 255, 0)
If Mid([d65], i, 1) = "N" Then [d65].Characters(i, 1).Font.Color = RGB(0, 0, 255)
If Mid([d65], i, 1) = "D" Then [d65].Characters(i, 1).Font.Color = RGB(255, 0, 0)

Next i

End With

En vous remerciant

Bonjour

Pas possible de colorer le résultat d'une formule lettre par lettre

Bonjour,

D'accord tant pis, merci pour votre réponse!

Bonsoir,

Combien de ligne cela représente au niveau de la colonne de la formule "index/equiv"?

L'idée serait de mettre le code de mise en forme sur l'événement "calculation" de la feuille, de récupérer les valeurs issues des formules puis de coller le résultat de la mise en forme colonne d'à côté même ligne...

@ bientôt

LouReeD

Bonsoir,

création d'un fichier simplifié pour illustrer l'idée :

17mfc.xlsm (20.99 Ko)

@ bientôt

LouReeD

Bonjour,

Wahou merci pour votre travail même si j'y comprends pas tout, la calculation sert à avoir une macro qui fonctionne "en direct" sans lancer celle-ci?

Dans mon cas je pense que ça peut être plus simple que la colonne masquée, puisque mon index/equiv sert à aller récupérer la donnée qui se trouve sur un tableau issue d'un power query (donc texte?) dans une autre page. Peut-être que je peux esquiver ce index/equiv en allant récupérer directement la donnée via la macro et ensuite l'insérer dans mes dashboard tout en colorant ces lettres?

Voici un fichier exemple de ma situation :

En vous remerciant

Bonjour

On pourrait obtenir les petits tableaux des matchs par requêtes filtrant la 1ère

Actuellement la requête ne sert à rien par rapport au tableau initial et tes formules ne tirent pas partie du tableau structuré

Bonjour 78chris,

Je ne sais pas si j'ai compris votre réponse, vous parlez de la requête Power Query? Si oui c'est juste un exemple, dans mon vrai classeur je n'ai pas de tableau de base, ce sont des données du web avec beaucoup plus de lignes et de colonnes différentes.

Merci

RE

Alors il faudrait un vrai cas avec la requête pointant sur le web et la vraie structure des onglets Match

D'ailleurs est-utile d'avoir un onglet par match plutôt qu'un onglet qui afficherait à le demande les infos d'un match ?

Bref hors contexte on n'avancera pas

Re

En fait il n'y a rien à toucher dans la requête, je veux juste remplacer mon index/equiv des onglets matchs par une formule macro pour pouvoir ensuite coloriser les lettres vu que je ne peux pas le faire directement sur les cellules index/equiv.

Il y un onglet par match pour faciliter l'export pdf.

Je pense que l'exemple est bien représentatif, si j'arrive à le faire dessus j'arriverai à l'adapter sur mon classeur, je mets le début de code que j'ai pour gérer la répétition des feuilles.

En gros il y a juste à faire une recherche de la forme de l'équipe et coloriser ses lettres.

Sub Macro1()
   For Each fl In Worksheets    
        If fl.Name = "Match 1" Or fl.Name = "Match 2" Or fl.Name = "Match 3" Then        
            With fl 

            End With            
        End If        
    Next
End Sub

Merci

Bon j'ai réussi à récupérer les valeurs et à les coller, reste plus qu'à les colorer, je pense pas que le code soit bien optimisé mais il fonctionne. J'aurais une question est-ce que les Dim sont obligatoires? Ça semble marcher même sans :

Sub Macro1()
   For Each Fl In Worksheets
        If Fl.Name = "Match 1" Or Fl.Name = "Match 2" Or Fl.Name = "Match 3" Then
            With Fl
                Dim MonEquipe As Range
                Dim EquDom As Range
                Dim EquExt As Range

                Set EquDom = Fl.Range("N1")
                Set EquExt = Fl.Range("N2")
                Set FormeDom = Fl.Range("B3")
                Set Formeext = Fl.Range("G3")

                For Each MonEquipe In Feuil1.Range("A2:A21")
                    If MonEquipe = EquDom Then
                        FormeDom.Value = MonEquipe.Offset(0, 1)
                    End If
                    If MonEquipe = EquExt Then
                        Formeext.Value = MonEquipe.Offset(0, 1)
                    End If
                Next
            End With
        End If
    Next
End Sub

Edit : C'est bon tout fonctionne, peut-être moyen d'optimiser :

Sub Macro1()
   For Each fl In Worksheets
        If fl.Name = "Match 1" Or fl.Name = "Match 2" Or fl.Name = "Match 3" Then
            With fl
                Dim MonEquipe As Range
                Dim EquDom As Range
                Dim EquExt As Range

                Set EquDom = fl.Range("N1")
                Set EquExt = fl.Range("N2")
                Set FormeDom = fl.Range("B3")
                Set FormeExt = fl.Range("G3")

                For Each MonEquipe In Sheets("Stas Pwr Qr").Range("A2:a21")

                    If MonEquipe = EquDom Then
                        FormeDom.Value = MonEquipe.Offset(0, 1)
                    End If
                    If MonEquipe = EquExt Then
                        FormeExt.Value = MonEquipe.Offset(0, 1)
                    End If

                    For i = 1 To Len([FormeDom])
                        If Mid([FormeDom], i, 1) = "V" Then [FormeDom].Characters(i, 1).Font.Color = RGB(0, 255, 0)
                        If Mid([FormeDom], i, 1) = "N" Then [FormeDom].Characters(i, 1).Font.Color = RGB(0, 0, 255)
                        If Mid([FormeDom], i, 1) = "D" Then [FormeDom].Characters(i, 1).Font.Color = RGB(255, 0, 0)
                    Next i

                    For i = 1 To Len([FormeExt])
                        If Mid([FormeExt], i, 1) = "V" Then [FormeExt].Characters(i, 1).Font.Color = RGB(0, 255, 0)
                        If Mid([FormeExt], i, 1) = "N" Then [FormeExt].Characters(i, 1).Font.Color = RGB(0, 0, 255)
                        If Mid([FormeExt], i, 1) = "D" Then [FormeExt].Characters(i, 1).Font.Color = RGB(255, 0, 0)
                    Next i

                Next
            End With
        End If
    Next
End Sub

RE

Encore une perte de temps...

Tu demandes de l'aide mais tu restes ancré sur TA solution et tu ne réponds même pas aux questions.

A noter que les Dim doivent être en dehors des boucles et le test d'onglet pourrait être optimisé, tout comme les boucles qui testent inutilement des espaces, et l'utilisation de plage finie et donc non évolutive alors que tu utilises un tableau structuré...

Mais puisque les suggestions et questions te dérangent j'en prends bonne note et te souhaite bonne continuation...

Re,

Dsl si j'ai donné cette impression, mais je dois préciser que ne n'y connais absolument rien en VBA, j'ai tout récupéré sur le net et adapté comme j'ai pû avec l'aide des gens de ce forum. Je ne suis pas du tout expert en Excel et ne connais pas non plus tout le "jargon", j'ai essayé de répondre aux questions que je pense comprendre.

J'ai passé une semaine à faire ce classeur qui est rempli de requêtes Power Query et un peu de VBA pour la gestion des images et des couleurs, le tout est sans doute un peu désorganisé et difficile à analyser pour celui qui ne l'a pas fait. Si tu veux je peux t'envoyer une archive du classeur et des dossiers images en PV, même si tout n'est pas optimisé pour le moment ça fonctionne.

Je prends note pour les Dim en dehors des boucles mais j'ai tellement peur de foirer le truc que je n'ose plus y toucher.

Encore merci à tous pour vos remarques.

Re

Tu peux envoyer, je regarderai

Rechercher des sujets similaires à "couleur caracteres specifique"