Autres VBA Chaîne de caractères de couleur à extraire dans cellule Excel

Armand11

XLDnaute Occasionnel
Bonjour à toute la communauté ExcelDownLoad !J'espère que vous allez bien ?
Je sollicite humblement vos compétences ma fonction VBA ne fonctionne pas pour :

a. Extraire d'une cellule la chaine de caractères alphabétiques en Bleus
b. J'ai bien fait attention à appliquer les bons codes RGB pour le bleu à savoir (0 , 0, 255)

je vous joins mon fichier de travail et reste attentif à vos retours si vous pouvez m'aider et m'expliquer où ma fonction pêche ...
Mille mercis
Armand
 

Pièces jointes

  • APO Extraire couleur chaine caractères VBA.xlsx
    10.2 KB · Affichages: 6

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Armand,
J'ai bien fait attention à appliquer les bons codes RGB pour le bleu à savoir (0 , 0, 255)
Heureusement. 😅 car votre bleu, je le trouve à RGB(0,0,153) et non RGB(0,0,255)
pour éviter tout problème, je remonte tout caractère non noir. Mais c'est facile à adapter.
Un essai en PJ avec cette fonction :
VB:
Function Bleu(C)
For i = 1 To Len(Cells(C, "A"))
    If Cells(C, "A").Characters(Start:=i, Length:=1).Font.Color <> 0 Then
        Bleu = Bleu & Mid(Cells(C, "A"), i, 1)
    End If
Next i
End Function
 

Pièces jointes

  • APO Extraire couleur chaine caractères VBA.xlsm
    15.8 KB · Affichages: 1

Eric KERGRESSE

XLDnaute Occasionnel
Bonjour,

Je n'ai pas chargé la macro complémentaire pour cette fonction.

Sinon, si votre fichier admet les macros (.xlsm) :

VB:
Function RecupChaine(ByVal LaCellule As Range) As String

Dim I As Integer

    RecupChaine = ""
    With LaCellule
         For I = 1 To .Characters.Count
            If .Characters(I, 1).Font.ColorIndex > 1 Then RecupChaine = RecupChaine & Mid(LaCellule.Value, I, 1)
         Next I
    End With
    If Len(RecupChaine) > 0 Then
       Select Case Mid(RecupChaine, 1, 1)
              Case Chr(32), Chr(160)
                   RecupChaine = Mid(RecupChaine, 2)
       End Select
   End If

End Function
 

Armand11

XLDnaute Occasionnel
Bonjour,

Je n'ai pas chargé la macro complémentaire pour cette fonction.

Sinon, si votre fichier admet les macros (.xlsm) :

VB:
Function RecupChaine(ByVal LaCellule As Range) As String

Dim I As Integer

    RecupChaine = ""
    With LaCellule
         For I = 1 To .Characters.Count
            If .Characters(I, 1).Font.ColorIndex > 1 Then RecupChaine = RecupChaine & Mid(LaCellule.Value, I, 1)
         Next I
    End With
    If Len(RecupChaine) > 0 Then
       Select Case Mid(RecupChaine, 1, 1)
              Case Chr(32), Chr(160)
                   RecupChaine = Mid(RecupChaine, 2)
       End Select
   End If

End Function
Bonsoir Eric,

Merci pour le Code, mais j'ai essayé de le pratiquer dans mon fichier mais il m'affiche #NOM?
De plus il me demande de nommer le module lorsque je finis de l'insérer ...
Merci pour votre aide Eric. En pièce jointe mon fichier avec votre code
 

Pièces jointes

  • APO Extraire couleur chaine caractères VBA.xlsx
    10.4 KB · Affichages: 1

Armand11

XLDnaute Occasionnel
Bonjour Armand,

Heureusement. 😅 car votre bleu, je le trouve à RGB(0,0,153) et non RGB(0,0,255)
pour éviter tout problème, je remonte tout caractère non noir. Mais c'est facile à adapter.
Un essai en PJ avec cette fonction :
VB:
Function Bleu(C)
For i = 1 To Len(Cells(C, "A"))
    If Cells(C, "A").Characters(Start:=i, Length:=1).Font.Color <> 0 Then
        Bleu = Bleu & Mid(Cells(C, "A"), i, 1)
    End If
Next i
End Function

Re,

Et le bleu de la police de votre classeur est le RGB(0,0,153) et pas le RGB(0,0,255).
Bonsoir Sylvanu, Merci pour le retour mais j'ai des #NOM? comme résultat...
Je comprends pas ...
En pièce jointe le fichier
Merci encore
 

Pièces jointes

  • Version ERIC VBA.xlsm
    14.9 KB · Affichages: 2

patricktoulon

XLDnaute Barbatruc
Bonjour
a oui c'est rigolo ça
je peux jouer moi aussi
en voila une qui detecte plusieurs sorte de bleu

VB:
Function extractChainebleuVague(cel As Range)
   Dim i&, str0, r&, g&, b, chaine
   For i = 1 To Len(cel)
        str0 = Right("000000" & Hex(cel.Characters(Start:=i, Length:=1).Font.Color), 6)
         r = CDbl("&H" & Right(str0, 2))
        g = CDbl("&H" & Mid(str0, 3, 2))
        b = CDbl("&H" & Left(str0, 2))
        Debug.Print r & " , " & g & " , " & b
        If b > r And b > g Then chaine = chaine & Mid(cel, i, 1) Else chaine = chaine & " "
    Next i
    extractChainebleuVague = Application.Trim(chaine)
End Function

Sub test()
MsgBox extractChainebleuVague([A1])
End Sub

en formule c'est
=extractChainebleuVague(A1)


1700672781798.png
 

Armand11

XLDnaute Occasionnel
Bonjour
a oui c'est rigolo ça
je peux jouer moi aussi
en voila une qui detecte plusieurs sorte de bleu

VB:
Function extractChainebleuVague(cel As Range)
   Dim i&, str0, r&, g&, b, chaine
   For i = 1 To Len(cel)
        str0 = Right("000000" & Hex(cel.Characters(Start:=i, Length:=1).Font.Color), 6)
         r = CDbl("&H" & Right(str0, 2))
        g = CDbl("&H" & Mid(str0, 3, 2))
        b = CDbl("&H" & Left(str0, 2))
        Debug.Print r & " , " & g & " , " & b
        If b > r And b > g Then chaine = chaine & Mid(cel, i, 1) Else chaine = chaine & " "
    Next i
    extractChainebleuVague = Application.Trim(chaine)
End Function

Sub test()
MsgBox extractChainebleuVague([A1])
End Sub

en formule c'est
=extractChainebleuVague(A1)


Regarde la pièce jointe 1184403
Bonsoir Patrick !
Nickel Merci beaucoup !!
Vous m'aviez déjà aidé il y a quelques années déjà ...
Un grand merci à vous Patrick
 

Armand11

XLDnaute Occasionnel
Bonsoir Patrick !
Nickel Merci beaucoup !!
Vous m'aviez déjà aidé il y a quelques années déjà ...
Un grand merci à vous Patrick
Patrick ? une question :

Vous me conseillerez plus de maîtriser :
a. VBA (en sachant, sauf erreur de ma part, qu'il n'y aura plus de développement dessus)
b. Python
c. POWER BI

Je travaille dans la Comptabilité / Finance / Contrôle de Gestion et conso avec beaucoup de traitements de Datas.
Merci pour votre conseil
Armand
 

Armand11

XLDnaute Occasionnel
Bonjour,

Je n'ai pas chargé la macro complémentaire pour cette fonction.

Sinon, si votre fichier admet les macros (.xlsm) :

VB:
Function RecupChaine(ByVal LaCellule As Range) As String

Dim I As Integer

    RecupChaine = ""
    With LaCellule
         For I = 1 To .Characters.Count
            If .Characters(I, 1).Font.ColorIndex > 1 Then RecupChaine = RecupChaine & Mid(LaCellule.Value, I, 1)
         Next I
    End With
    If Len(RecupChaine) > 0 Then
       Select Case Mid(RecupChaine, 1, 1)
              Case Chr(32), Chr(160)
                   RecupChaine = Mid(RecupChaine, 2)
       End Select
   End If

End Function
Merci Eric !
Je l'applique
Excellente soirée et à bientôt
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh