Comment attribuer plusieurs couleurs à une chaine de caracteres située dans une

Signaler
Messages postés
11
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
16 octobre 2008
-
Messages postés
21
Date d'inscription
lundi 23 mars 2009
Statut
Membre
Dernière intervention
1 avril 2009
-
Bonjour,
Je bloque depuis 2 jours sur ce problème.
Je travaille avec des numéros de risques à 2 dates différentes. J'insère chaque numéro de risque dans une case du tableau. Plusieurs risques peuvent se trouver dans la même cellule donc je fais une concaténation.
On me demande de changer de couleur de police pour distinguer le risque de la 1ere date ( point initial) de celui de la 2nde date (date d'avancement).
Voici mon programme :

If Numlig >= 2 Then
        'Point initial
        For i = 2 To Numlig
            Select Case Sheets(nomOnglet).Cells(i, 18).Value
                Case 1
                lig = 24
                Case 4
                lig = 23
                Case 7
                lig = 22
                Case 10
                lig = 21
            End Select
            Select Case Sheets(nomOnglet).Cells(i, 17).Value
                Case 1
                col = 4
                Case 4
                col = 5
                Case 7
                col = 6
                Case 10
                col = 7
            End Select
           
            Dim nbcaractA As Integer
            nbcaractA = Len(Sheets(nomOnglet).Cells(lig, col))
            Sheets(nomOnglet).Select
            Sheets(nomOnglet).Cells(lig, col) = Sheets(nomOnglet).Cells(lig, col) & " " & Sheets(nomOnglet).Cells(i, 16)
            Cells(lig, col).Select
            With ActiveCell.Characters(Start:=nbcaractA + 1).Font
                .Name = "Arial"
                .FontStyle = "Normal"
                .Bold = True
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 41
            End With

        Next i
       
        'Date courante
        For i = 2 To Numlig
            Select Case Sheets(nomOnglet).Cells(i, 23).Value
                Case 1
                ligB = 24
                Case 4
                ligB = 23
                Case 7
                ligB = 22
                Case 10
                ligB = 21
            End Select
            Select Case Sheets(nomOnglet).Cells(i, 22).Value
                Case 1
                colB = 4
                Case 4
                colB = 5
                Case 7
                colB = 6
                Case 10
                colB = 7
            End Select
           
            Dim nbcaractA2 As Integer
            nbcaractA2 = Len(Sheets(nomOnglet).Cells(ligB, colB))
            Sheets(nomOnglet).Select
            Sheets(nomOnglet).Cells(ligB, colB) = Sheets(nomOnglet).Cells(ligB, colB) & " " & Sheets(nomOnglet).Cells(i, 16)
            Cells(ligB, colB).Select
            With ActiveCell.Characters(Start:=nbcaractA2 + 1).Font
                .Name = "Arial"
                .FontStyle = "Normal"
                .Bold = True
                .Size = 8
                .Strikethrough = False
                .Superscript = False
                .Subscript = False
                .OutlineFont = False
                .Shadow = False
                .Underline = xlUnderlineStyleNone
                .ColorIndex = 12
            End With



        Next i
    End If

Le problème est que lorsque la cellule comporte déjà un numéro de risque d'une certaine couleur, il va automatiquement me mettre le nouveau numéro de risque de la même couleur alors que ce n'est pas ce qui est demandé. Je cherche des dizaines de solutions différentes mais toutes me ramènent au même résultat.
Est-ce que qqun aurait au moin sune explication ????????
Merci d'avance

6 réponses

Messages postés
682
Date d'inscription
vendredi 6 avril 2007
Statut
Membre
Dernière intervention
4 août 2012
6
bonjour
dans une cellule excel tu ne peux avoir qu'une seule et unique couleur de fond et une seule et unique couleur de texte
c'est un tableur pas un traitement de texte
[reglement.aspx ]si c'est la solution, penser : REPONSE ACCEPTEE
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

effectivement plusieurs couleur de fond en meme temps dans une cellule ce n'est pas possible !

Mais, du text de plusieurs couleurs dans une cellule c'est tout a fait possible mon cher pile_poil

ActiveCell.Characters(Start:=3, Length:=6).Font.ColorIndex = 3 'a partir du 3ieme charactere sur les 6 chararteres suivant

Et tu as meme tout un tas d'option suplementaire :

With Sheets("Feuil1").Range("A1").Characters(Start:=4, Length:=7).Font 'a partir du 4ieme charactere sur les 7 chararteres suivant
        .Name = "Arial"
        .FontStyle = "Regular"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 3
End With

Par contre j'ai tres bien compris ton probleme pm78000

A+
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Oh ! lala ! pas reveillé ou deja endormi moi

il fallait lire :
Par contre j'ai pas
tres bien compris ton probleme pm78000
Messages postés
11
Date d'inscription
lundi 4 août 2008
Statut
Membre
Dernière intervention
16 octobre 2008

Salut bigfish_le vrai,
Mon problème est le suivant : je veux insérer des numéros de risques dans des cellules d'un tableau selon des paramètres A et B. Le placement est bon dans le tableau selon les valeurs de A et de B. Là où ça se complique c'est que mes risques ont des valeurs de paramètres différents selon la date (d'où les 2 Select Case). Et on me demande de mettre d'une certaine couleur les risques de la 1ere date (en bleu) et d'une autre les risques à la seconde date (en kaki).
Le problème est que si j'ai par exemple un risque n°1 qui doit être en bleu puis un risque n°2 qui doit être en kaki dans la même cellule, il va me mettre le risque n°2 en bleu aussi et c'est là que je comprends pas d'où vient le problème...
J'ai vérifié que ce risque n°2 appartenait bien à la 2nde date. En fait mon changement de couleur de police ne marche pas si j'ai déjà un risque d'une autre couleur avant car la couleur ne va pas changer.
Exemple : si je veux Risk 1 - Risk 2 - Risk 3 au niveau des couleurs, vb me sort :
                                 Risk 1 - Risk 2 (donc erreur) - Risk 3
Pourquoi? C'est quoi le pb dans mon prgm?????
Je sais pas si j'ai été très claire....
Merci







 
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

ton code en version simplifier et qui apparemment fait ce que tu souhaites

j'ai ajouter une variable SuivantDate qui permet de boucler sur les 2 cas Point initial  et Date courante.
ATTENTION tout les POINTS sont OBLIGATOIRE

Dim SuivantDate As Long
With Sheets(nomOnglet)
    If Numlig >= 2 Then
        For SuivantDate = 17 To 22 Step 5 '17-->Point initial, 22-->Date courante
            For i = 2 To Numlig
                Select Case .Cells(i, SuivantDate + 1).Value 'colonne 18 ou 23
                    Case 1
                        lig = 24
                    Case 4
                        lig = 23
                    Case 7
                        lig = 22
                    Case 10
                        lig = 21
                End Select
                Select Case .Cells(i, SuivantDate).Value 'colonne 17 ou 22
                    Case 1
                        col = 4
                    Case 4
                        col = 5
                    Case 7
                        col = 6
                    Case 10
                        col = 7
                End Select
               
                With .Cells(lig, col)
                    If .Value = "" Then 'si il n'y a rien dans la cellule on met en forme
                        With .Font
                            .ColorIndex = 41 'couleur par defaut du text
                            .Bold = True
                            .Name = "Arial"
                            .Size = 8
                        End With
                        .Value = Sheets(nomOnglet).Cells(i, 16).Text 'et on ajoute le premier risque
                    Else 'on ne change que la couleur du text a partir du 2ieme risque
                        .Value = .Value & " " & Sheets(nomOnglet).Cells(i, 16).Text                         nbcaractA2 InStr(1, .Value, Chr(32)) 'recherche du separateur espace>Chr(32)
                        With .Characters(Start:=nbcaractA2 + 1).Font
                            .ColorIndex = 12 'couleur du text a partir du 2ieme risque
                        End With
                    End If
                End With
            Next i
        Next SuivantDate
    End If
End With

A+
Messages postés
21
Date d'inscription
lundi 23 mars 2009
Statut
Membre
Dernière intervention
1 avril 2009

Bonjour,
J'ai un problème un peu similaire, je viens de créer un post là dessus mais, vous allez peut etre pouvoir m'aider plus rapidement si je passe par ici...

voila, j'écris un paragraphe de texte dans une cellule avec la fonction concatener...

a1= petit
a2=exemple
a3=de
a4=ce
a5=que
a6=je
a7=veux
a8=faire

et c7= =concatener(a1;a2;a3;a4;a5;a6;a7;a8)
ce qui me donne : petit exemple de que que je veux faire....

et moi je veux que ça donnes

petit exemple de que que je veux faire

Donc, je voudrais créer une fonction que je pourrais intégrer à mon concatener ou le remplacer....
le contenu de a2 et a7 sont le résulta d'un if(b1;b2;"-----")   et idéalement je ne voudrais pas avoir les ----- en gras...  

Fak, je me demandais si c'était possible de me faire une macro qui me permettrait d'écrire de quoi du genre dans les cellules où j'en ai besoin, sans que j'ais besoin d'exécuter une macro... un peu comme une fonction que je pourrais copier dans les fichier mère d'excel qui ferait partie prenante des fonctions....

exemple:

fonction (variable 1;variable 2)  (je saisis la variable quand j'utilise la fonction là... )
variable 2.... valeurs.... 
1 =gras
2=italic
3=gras+italic
c7...  =(a1&Si(a2="-----";"-----";Fonction(a2;3)&a3&a4&a5&a6&Si(a7="-----";"-----";Fonction(a7;3)&a8)

Pour que ça me donne

petit exemple de que que je veux faire
ou
petit ----- de que que je ----- faire
merci