Syntaxe pour un code (LEN)

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

3 réponses

  1. 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
    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
      1. 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
      2. @Patrice33740Salut 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
      3. @dudulerayAvec 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
      4. @Patrice33740Salut 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
      5. @dudulerayTu 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
    2. 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