Soucis avec longueur du texte dans un bloc texte

Michel_ja

XLDnaute Occasionnel
Bonjour,
j'ai une macro qui envoie le contenu d'une cellule active de la colonne A dans un bloc text que j'appelle ici "Bloc". Je l'enclenche en appuyant sur le petit triangle en haut de la feuille.
Problème, la macro fonctionne lorsque le texte est court comme pour les cellules A9 ou A15 mais ne fonctionne pas pour la cellule A21.
Je suppose que cela est lié à la longueur du texte.
Merci pour votre aide.
 

Pièces jointes

  • MJ Projet.zip
    21.2 KB · Affichages: 27
G

Guest

Guest
Re : Soucis avec longueur du texte dans un bloc texte

Bonjour,

couper le texte en tronçon de 255 caractères et les insérer l'un après l'autre:

Code:
Sub Macro3()
    Dim Bloc As Shape
    Dim i As Integer

    With ActiveSheet.Shapes("Bloc").TextFrame
        If Len(ActiveCell.Text) <= 255 Then
            .Characters.Text = ActiveCell.Text
        Else
            .Characters.Text = ""
            For i = 0 To Int(Len(ActiveCell.Text) / 255)
                .Characters(.Characters.Count + 1).Insert Mid(ActiveCell.Text, (i * 255) + 1, 255)
            Next
        End If
    End With
End Sub

A+
 

Papou-net

XLDnaute Barbatruc
Re : Soucis avec longueur du texte dans un bloc texte

Bonjour à tous,

RE Michel_ja

Si tu utilises le contrôle Label de la barre d'outils Contrôles, tu n'as plus la limitation à 255 caractères. Dans ce cas, il faut modifier ton code comme suit :

Code:
Sub Macro3()
Sheets("Feuil1").Label1.Caption = ActiveCell
End Sub

Personnellement, je n'utilise jamais les contrôles de la barre d'outils Formulaires qui ne sont conservés que pour compatibilité avec les anciennes versions d'Excel. Les contrôles ActiveX sont beaucoup plus souples d'emploi et leur manipulation est conforme à VBA.

Espérant avoir aidé.

Cordialement.
 

Michel_ja

XLDnaute Occasionnel
Re : Soucis avec longueur du texte dans un bloc texte

Merci Hasco, t'as solution fonctionne très bien sur Excel 2003. Elle ne fonctionne pas sur Excel 2007 mais là pas de problème de connais le code. Je vais essayer aussi la solution de Papou. Merci les gars.
 

tototiti2008

XLDnaute Barbatruc
Re : Soucis avec longueur du texte dans un bloc texte

Bonjour à tous,

Une remarque, le code d'Hasco fonctionne bien sur 2003, sauf dans un cas spécial :
On a déjà rempli le bloc texte avec plus de 255 caractères avec sa macro, et on sélectionne une cellule de moins de 255 caractères et on la relance.
Dans ce cas, malgré la ligne
.Characters.Text = ""
il n'efface que les 255 premiers caractères pour les remplacer par le contenu de la cellule active, et conserve le reste... assez bizarre, je dois avouer, et je n'ai pas trouvé de parade simple pour l'instant... ça le fait aussi chez vous ?
 
G

Guest

Guest
Re : Soucis avec longueur du texte dans un bloc texte

bonjour à tous,

@Tototiti, chez moi sous 2002 le problème dont tu parles ne se produit pas.
Zarbi, zarbi. As-tu essayé en mettant
Code:
.Characters.Text = ""
juste sous la ligne With....

A++
 

Michel_ja

XLDnaute Occasionnel
Re : Soucis avec longueur du texte dans un bloc texte

Bonjour les gars. J'ai bien intégré votre dernier code sous la ligne With mais chez moi lorsqu'on passe d'un texte assez long de +255 caractères voire +600 caractères à un nouveau texte de + de255 caractères, le bloc texte conserve la fin du premier texte et ne supprime que les premiers 255 (sans doute) !


Sub Macro3Sauvegarde()
Dim Bloc As Shape
Dim i As Integer


With ActiveSheet.Shapes("Bloc").TextFrame
.Characters.Text = ""
If Len(ActiveCell.Text) <= 255 Then
.Characters.Text = ActiveCell.Text
Else
.Characters.Text = ""
For i = 0 To Int(Len(ActiveCell.Text) / 255)
.Characters(.Characters.Count + 1).Insert Mid(ActiveCell.Text, (i * 255) + 1, 255)
Next
End If
End With
End Sub
 
Dernière édition:
G

Guest

Guest
Re : Soucis avec longueur du texte dans un bloc texte

Bonsoir,

Ben je sais pas quoi te dire, n'ayant aucun exemple à traiter, si ce n'est que le deuxième .Charaters.Text="" est inutile.

Code:
With ActiveSheet.Shapes("Bloc").TextFrame
.Characters.Text = ""
If Len(ActiveCell.Text) <= 255 Then
.Characters.Text = ActiveCell.Text
Else
For i = 0 To Int(Len(ActiveCell.Text) / 255)
.Characters(.Characters.Count + 1).Insert Mid(ActiveCell.Text, (i * 255) + 1, 255)
Next
End If
End With
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 424
Membres
103 206
dernier inscrit
diambote