Syntaxe pour un code (LEN)

duduleray -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
  2. duduleray
     
    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. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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. duduleray > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    3. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784 > duduleray
       
      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
    4. duduleray > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
       
      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
    5. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784 > duduleray
       
      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
  3. duduleray
     
    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