IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Colorier caractère dans une cellule en fonction de leur position [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut Colorier caractère dans une cellule en fonction de leur position
    Bonjour,

    Je réceptionne des noms de fichiers qui ont tous le même format.

    ex: 0162_31_20170720_103537.txt

    Bien sur la taille des deux premier code entre "_" peut varier.

    Pour cela je souhaite mettre en couleur les code correspondant pour chaque chiffre.


    comme cela Nom : Capture couleur valeurs.PNG
Affichages : 455
Taille : 1,3 Ko

    Si vous avez une piste?

    Merci d'avance.

  2. #2
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    est ce que tu peu poster un code pour écrire toute la ligne, en bleu , en rouge , en vert ?
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    1) Tu parles de "chiffres" et ton exemple montre que tu veux colorier des nombres et non des chiffres. Qu'en est-il donc ?
    2) nous ne parlerons de coloriage d'une ou de sous-chaîne(s) (c'est là UNE difficulté) que lorsque tu auras su isoler (c'est là UNE AUTRE difficulté) la/les sous-chaînes à colorier
    Une discussion = UNE difficulté.
    Question, donc : ton problème est-t-il d'isoler chacune des chaînes ou cette étape étant passée, de la colorier ?

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    La source correspond à des noms de fichiers bruts qui ont ce format 0162_31_20170720_103537.

    Je cherche une macro pour isoler les nombres entre les "_" afin des les colorier en en bleu , en rouge , en vert. Résultat que j'ai effectué à la main pour l'exemple.

    Ce que je souhaite c'est pouvoir automatiser l'isolation de chacune des chaînes de caractére afin de les colorier.

    Voila si c'est plus clair ??

  5. #5
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,

    regarde la fonction Split

    TabElement = Split("0162_31_20170720_103537" , "_")
    TabElement(0) = "0162"
    TabElement(1) = "31"
    TabElement(2) = "20170720"
    TabElement(3) = "103537"

    TabElement ou ce que tu veux....

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Voila si c'est plus clair ??
    Ni plus clair, ni moins clair que ton premier message.
    Quelle est LA difficulté (une seule des deux) que tu veux traiter :
    1) isoler tes sous-chaînes ?
    ou
    2) colorier une sous-chaîne isolée ?
    La réponse ne peut en ce qui me concerne qu'être 1) ou 2) mais pas l'ensemble 1) et 2).
    Je ne répondrai donc qu'au seul point (1 ou 2) que tu auras choisi.

  7. #7
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    D'accord,

    Le point de blocage que j'ai c'est plutôt sur

    1) isoler tes sous-chaînes.

    Après colorier je vais m'en sortir.

    Split j'ai déjà vu mais que dans le cas de supprimer des bouts de chaîne.

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Split j'ai déjà vu mais que dans le cas de supprimer des bouts de chaîne
    Et alors ? La réponse de mjpmjp (que je salue) est très claire
    Dans son exemple, l'array obtenu est composé de n éléments dont chacun est l'une de tes sous-chaînes.
    n est égal à Ubound(tabelement).
    Une simple boucle for ... to ... next te permet d'extraite chaque élément. Le reste n'est que concaténation élémentaire avec coloriage au fur et à mesure !

  9. #9
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Salut à vous,

    Voici le code final. A voir si vous pensez à un truc pour optimiser ? Toujours preneur de bons conseils...

    Je trouve que je me suis compliqué la vie mais bon ça fonctionne comme je souhaite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub color_cells()
    Dim t1 As String
    Dim t2 As String
    Dim t3 As String
    Dim wso As Worksheet
    Dim Lig As Long, Col As Integer
     
        Set wso = Worksheets("Resultats")
     
        wso.UsedRange.Font.ColorIndex = 1
     
        'Détermine la dernière ligne renseignée de la feuille de calculs
        Col = wso.Cells.Find("*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Column
     
        'Détermine la dernière colonne renseignée de la feuille de calculs
        Lig = wso.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious, LookIn:=xlFormulas).Row
     
    For count1 = 2 To Lig
        For count2 = 3 To Col
     
        textst = Range(Cells(count1, count2), Cells(count1, count2)).Value
        x = InStr(1, textst, "_")
        If textst = "" Or x = 0 Then
     
        Else
     
        TabElement = Split(textst, "_")
        t1 = TabElement(0)
        t2 = TabElement(1)
        t3 = TabElement(2)
        t4 = TabElement(3)
     
        aString = t1
            lga = Len(aString)
        bString = t2
            lgb = Len(bString)
        CString = t3
            lgt = lga + lgb + 2
        Dstring = t4
            lgd = Len(Dstring) + 2
        Cells(count1, count2).Value = aString & "_" & bString & "_" & CString & "_" & Dstring
            With Cells(count1, count2)
            .Font.ColorIndex = 5
            .Characters(1, Len(aString)).Font.ColorIndex = 30
            .Characters(lgt, Len(CString) + lgd).Font.ColorIndex = 10
            End With
        End If
        Next count2
    Next count1
     
    End Sub

    résultat : Nom : Capture couleur valeurs 2.PNG
Affichages : 451
Taille : 1,2 Ko

  10. #10
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    une petite variante, j'ai colorié que les éléments
    Nom : Capture.JPG
Affichages : 395
Taille : 17,6 Ko

    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Private Sub CellColor(CellTarget As Range)
        Dim TabLen()
        Data = CellTarget.Value
        TabElement = Split(Data, "_")
        ReDim TabLen(UBound(TabElement))
        For n = 0 To UBound(TabElement) - 1
            TabLen(n) = Len(TabElement(n))
        Next n
        TabElement = Split(TabElement(n), ".")
        TabLen(UBound(TabLen)) = Len(TabElement(0))
        '-----
        With CellTarget
            .Font.ColorIndex = 0
            .Characters(1, TabLen(0)).Font.ColorIndex = 30
            .Characters(TabLen(0) + 2, TabLen(1)).Font.ColorIndex = 5
            .Characters(TabLen(0) + 2 + TabLen(1) + 1, TabLen(2)).Font.ColorIndex = 10
            .Characters(TabLen(0) + 2 + TabLen(1) + 1 + TabLen(2) + 1, TabLen(3)).Font.ColorIndex = 10
        End With
    End Sub
    l'appel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub CommandButton1_Click()
        Call CellColor(Cells(2, 2))
    End Sub
    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  11. #11
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    en fait c'est juste ce que tu voulais...
    Nom : Capture.JPG
Affichages : 426
Taille : 21,8 Ko

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  12. #12
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Hello,

    Ouah impressionnant.

    J'avoue que j'avais pas poussé le détails aussi loin dans mon premier programme. Mais c'est vrai que c'est exactement le résultat attendu.

    Mais du coup si je veux ajuster le code, si j'ai un groupe de chiffre en plus ou en moins à gauche par exemple?

    J'ai pas vu si tu teste si jamais la valeur de la cellule ne contient pas de "_", cela peut arriver dans mon extraction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        x = InStr(1, textst, "_")
        If textst = "" Or x = 0 Then
    Sinon vraiment efficace, merci.

  13. #13
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    tu peux tester UBound(TabElement)>0, plus rapide qu'un traitement sur chaine.

    eric

  14. #14
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,
    oui , UBound(TabElement)>0 , c'est pas mal
    il y a aussi InStr(Data,"_") > 0

    pour le reste ; ajout de groupe , modif de format ,...
    avec test sur TabLen() tu as le nombre de groupe
    avec InStr() tu peu tester les formats "_" , "." , ";" , ...

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  15. #15
    Membre éclairé
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2013
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2013
    Messages : 226
    Par défaut
    Salut à tous,

    Merci pour votre aide.

    J'ai conservé ce test du coup InStr(Data,"_") > 0


    Sujet résolu, à bientôt sur le forum.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/10/2014, 11h54
  2. Réponses: 2
    Dernier message: 08/01/2013, 21h52
  3. Réponses: 4
    Dernier message: 28/09/2011, 12h04
  4. Comment écrire dans une cellule la fonction SUM en vba?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2007, 20h24
  5. Réponses: 1
    Dernier message: 06/12/2006, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo