Syntaxe pour un code (LEN)

Fermé
duduleray - 29 avril 2020 à 17:50
Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025 - 30 avril 2020 à 22:15
Bonsoir a tous, forum bonsoir,

<config>Windows / Edge 81.0.416.64</Excel 2007>

J'aimerai svp savoir la syntaxe pour connaitre la longueur d'un texte, voir svp ci-dessous les codes en REM qui ne fonctionnent pas avec explications.

Bonne soirée a tous et merci de votre aide.

Cdlt

Sub Mess_01()
Dim Lt
ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 750, 100, 200, 50).Name = "monshape"
With ActiveSheet.Shapes("monshape")
        .TextFrame.Characters.Font.Size = 12
        .TextFrame.Characters.Text = "Cellules et colonnes inaccessibles"  '*** Message 34 lettres

       ' Lt = Len(.Text)                '>>> j'aimerai connaitre automatiquement la longueur du message
       ' MsgBox Lt                      '>>> afficher le résultat
        
       ' .TextFrame.Characters(1, Len(Lt)).Font.ColorIndex = 3 '>>> mettre le bon code dans    .Characters(1, Len(Lt))
        
        .Fill.ForeColor.RGB = RGB(255, 255, 0)
 End With
End Sub
A voir également:

3 réponses

Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025 1 779
29 avril 2020 à 18:29
Bonjour,

C'est normal que ça ne fonctionne pas : un shape n'a pas de propriété .text

Pour faciliter la saisie du code il est préférable de définir une variable pour manipuler un objet, tu bénéficie alors de l'intellisense (i.e. l'autocomplétion du langage) :
Sub Mess_01()
Dim Lt As Long
Dim shp As Shape

  Set shp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 750, 100, 200, 50)
  With shp
    .Name = "monshape"
    With .TextFrame
      With .Characters
        .Font.Size = 12
        .Text = "Cellules et colonnes inaccessibles"
        Lt = Len(.Text)                
        MsgBox Lt                     
      End With
      .Characters(9, Lt - 9 - 13).Font.ColorIndex = 3   ' et colonnes et rouge
    End With
    .Fill.ForeColor.RGB = RGB(255, 255, 0)
  End With

End Sub



1
Bonsoir Patrice33740,

Merci pour ta réponse,

ça fonctionne bien, j'ai chercher un bon moment, mais hélas pas trouver malgré des recherches sur le net.

Merci pour le découpage
 .Characters(9, Lt - 9 - 13)


j'ai modifier ainsi pour mon besoin
 .Characters(1, Lt )


et pour la sélection With c'est plus clair et plus court pour certains codes.

Première partie faites pour moi, en fait c'est pour faire la main car je cherche a utiliser qu'un seul shape pour afficher plusieurs messages d'erreur et éviter le répètitif.

Avec quelques couleurs de textes, gras, police, hauteur texte, etc etc

Merci a toi et bonne soirée, bye bye

bien cdlt
0
Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025 1 779
29 avril 2020 à 22:14
RE,

Si je ai écrit (volontairement) :
.Characters(9, Lt - 9 - 13).Font.ColorIndex = 3

c'est pour que tu voies comment on peut colorer une partie du texte !

Lt étant la longueur du texte, quand tu écris :
.Characters(1, Lt).Font.ColorIndex = 3

ça colore tout le texte, mais pour colorer tout le texte, il est inutile de préciser le début et la longueur, il suffit d'écrire :
.Characters.Font.ColorIndex = 3
0
duduleray > Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025
Modifié le 30 avril 2020 à 16:11
Salut Patrice33470

Une question, si tu veux bien, est t'il possible d'attribuer une couleur par ligne comme indiquer ci dessous pour exemple.

Cette partie de code est bonne de chaque ligne --- Mess(1) = "DECOMPTE": Pause = 6 ---

Merci pour ton aide, bonne après midi.

Cdlt


  
Mess(1) = "DECOMPTE": Pause = 6                                               '<< .Colorindex= 3
Mess(2) = "Deux nombres sont interdits": Pause = 6                  '<< .Colorindex= 4
Mess(3) = "Les lettres interdites": Pause = 4                                '<< .Colorindex= 5
Mess(4) = "Cellules et colonnes inaccessibles": Pause = 5       '<< .Colorindex= 7
0
Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025 1 779 > duduleray
30 avril 2020 à 18:07
Avec uniquement cette partie du code il est pas possible de répondre !
C'est quoi Mess et c'est quoi Pause ?
Quel est le code qui effectue leur traitement ?
0
duduleray > Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025
30 avril 2020 à 18:39
Salut Patrice,

Désolé, j'aurai pu te mettre le code entier.

Le but : Une question, si tu veux bien, est t'il possible d'attribuer une couleur par ligne comme indiquer ci dessous pour exemple.

Cette partie de code est bonne de chaque ligne --- Mess(1) = "DECOMPTE": Pause = 6 ---

Merci pour ton aide, bonne soirée.

Cdlt


Mess(1) = "DECOMPTE": Pause = 6                                               '<< .Colorindex= 3
Mess(2) = "Deux nombres sont interdits": Pause = 6                  '<< .Colorindex= 4
Mess(3) = "Les lettres interdites": Pause = 4                                '<< .Colorindex= 5
Mess(4) = "Cellules et colonnes inaccessibles": Pause = 5       '<< .Colorindex= 7



Public Tps, Krono, Start, Pause, Mg As Byte: Public Shp As Shape
Public Mess(1 To 4) As String

Sub Affiche_Message()
                   Mess(1) = "DECOMPTE": Pause = 6
                   Mess(2) = "Deux nombres sont interdits": Pause = 6
                   Mess(3) = "Les lettres interdites": Pause = 4
                   Mess(4) = "Cellules et colonnes inaccessibles": Pause = 5
 
'*** ### Zone_Affichage_Information ###
Set Shp = ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 750, 110, 200, 65): Shp.Select  '<< Shape Information rectangulaire
                 With Selection
                  Shp.TextFrame.Characters.Text = Mess(4)
                        .Name = "Information"
                        
                        .HorizontalAlignment = xlCenter
                        .VerticalAlignment = xlCenter
                        .Interior.ColorIndex = 24                                 '<< Violet clair
                        .Font.Name = "Arial"
                        .Font.ColorIndex = 1
                        .Font.Size = 14
                        .Font.Bold = True
                End With
                                           
'*** ### Zone_Affichage_Décompte_Chrono ###
Set Shp = ActiveSheet.Shapes.AddShape(msoTextOrientationHorizontal, 750, 180, 200, 80): Shp.Select    '<< Shape Chrono rectangulaire
                With Selection
                       .Name = "Chrono"
                       
                       .HorizontalAlignment = xlCenter                                                            '<-- Texte centré horizontalement
                       .VerticalAlignment = xlCenter                                                               '<-- Texte centré verticalement
                       .Interior.ColorIndex = 24                                                                     '<-- Couleur de fond interior
                       .Font.Name = "Arial"                                                                            '<-- Police de caractères
                       .Font.ColorIndex = 3                                                                            '<-- Couleur du texte Font
                       .Font.Size = 16                                                                                    '<-- Taille police des caractères
                       .Font.Bold = True                                                                                 '<-- Style gras
                End With
 Range("A2").Activate                                                                                                  '<-- Quitter la sélection de la zone de texte

'*** ### Zone_Décompte_Krono ###
Tps = Now: Start = Timer: Pause = Pause                                                                     '<-- Définit la pause
    Do While Timer < Start + Pause
                   DoEvents
                   Krono = Pause - Second(Now - Tps)
                   Shp.TextFrame.Characters.Text = Mess(1) & Chr(10) & "00:0" & Krono            '<-- Message et Chrono
    Loop
                   ActiveSheet.Shapes.Range(Array("Information", "Chrono")).Delete               '<-- Efface "Chrono"
End Sub
0
Patrice33740 Messages postés 8561 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 15 mars 2025 1 779 > duduleray
30 avril 2020 à 19:12
Tu peux utiliser un tableau pour la couleur comme tu fais pour les messages

Je te laisse écrire le code car je ne cautionne pas :
- ni l'emploi de variables publiques quand elles ne sont pas indispensables,
- ni l'absence de typage adapté des variables.
0
Salut Patrice33740,

Merci pour ces infos, je ne connaissais pas pour colorer tout le texte,

idem pour tester la longueur (Len) de cette façon pour un shape, c'est noter.

Je te souhaite la bonne journée et on prends soin de soi.

Cdlt Ray
0