[VBA] Activer zone de texte et mettre à la ligne

TheLio

XLDnaute Accro
Bonjour Tous, le Forum,

Je me trouve dans un cas d figure que j'ignore encore (et comme beaucoup de choses d'ailleurs)

Dans un classeur, il y a plusieurs zones de textes 1 2 3 4 5...
Le but de la macro cherchée est de :

- Conserver le texte existant
- Revenir à la ligne
- Insérer le caractère "-"

J'ai essayé avec l'enregistreur... nada
De définir le contenu de mes zones de texte en variable... nada
Code:
Sub Zone_Texte_1()

    ActiveSheet.Shapes.Range(Array("TextBox 1")).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = "- "
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 2).ParagraphFormat. _
        FirstLineIndent = 0
    With Selection.ShapeRange(1).TextFrame2.TextRange.Characters(1, 2).Font
        .NameComplexScript = "+mn-cs"
        .NameFarEast = "+mn-ea"
        .Fill.Visible = msoTrue
        .Fill.ForeColor.ObjectThemeColor = msoThemeColorDark1
        .Fill.ForeColor.TintAndShade = 0
        .Fill.ForeColor.Brightness = 0
        .Fill.Transparency = 0
        .Fill.Solid
        .Size = 11
        .Name = "+mn-lt"
    End With
End Sub

Merci pour vos pistes
@++
Lio
 

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonsoir TheLio,

Essayez :

Code:
Sub Zone_Texte_1()
Dim t$
With ActiveSheet.Shapes("TextBox 1").TextFrame.Characters
  t = .Text
  If Left(t, 2) = "- " Then t = Mid(t, 3)
  t = Replace(t, vbLf & "- ", vbLf)
  t = Replace(t, vbLf, vbLf & "- ")
  .Text = "- " & t
End With
End Sub
A+
 

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonjour TheLio, le forum,

S'il s'agit juste d'ajouter un retour ligne et un tiret à la fin du texte :

Code:
Sub Zone_Texte_1()
With ActiveSheet.Shapes("TextBox 1").TextFrame.Characters
  .Text = .Text & vbLf & "- "
End With
End Sub
Ou encore :

Code:
Sub Zone_Texte_11()
With ActiveSheet.DrawingObjects("TextBox 1")
  .Text = .Text & vbLf & "- "
End With
End Sub
Edit : il n'est pas possible d'insérer/piloter le curseur, pour cela il faut un contrôle ActiveX TextBox.

Bonne journée
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Re,

Avec un contrôle ActiveX, dans le code de la feuille :

Code:
Sub Test()
TextBox1 = TextBox1 & vbCrLf & "- "
TextBox1.Activate
TextBox1.SelStart = Len(TextBox1)
End Sub
Edit : bien sûr propriété MultiLine à True.

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Re,

Pour revenir à votre zone de texte, si vous voulez mettre en forme la police des caractères :

Code:
Sub Zone_Texte_1()
With ActiveSheet.Shapes("TextBox 1").TextFrame.Characters
  With .Font
    .Size = 11
    .Bold = False
    .ColorIndex = xlAutomatic
  End With
  .Text = .Text & vbLf & "- "
  With .Parent.Characters(1, InStr(.Text, vbLf) - 1).Font '1ère ligne
    .Size = 15
    .Bold = True 'gras
    .ColorIndex = 3 'rouge
  End With
End With
End Sub
A+
 

TheLio

XLDnaute Accro
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonjour Job75, le fil, le forum,

AU réveil, je n'ai pu m'empêcher de faire quelques tests....
C'est avec une TextBox ActiveX que je vais devoir faire, et je te remercie pour la solution.
Sachant que c'est un Protocole d'évaluation (pour des examens) il y a plusieurs TextBox sur la/les/pages.
J'ai créé un USF multipage de "pilotage" pour naviguer d'un onglet à l'autre et inséré ton code qui fonctionne à merveille.
Il me manque un détail c'est que l'écran fasse un focus directement sur la Textbox concernée.

J'ai essaye avec Textbox.SetFocus...
Mais j'ai du commettre une erreur car il ne se passe rien
Comment faire

Merci à tous

A++
Lio
 

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonjour TheLio, le forum,

Il me manque un détail c'est que l'écran fasse un focus directement sur la Textbox concernée.

Placer dans ThisWorkbook :

Code:
Private Sub Workbook_Open()
ActiverTextBox
End Sub

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
ActiverTextBox
End Sub

Sub ActiverTextBox()
Dim o As OLEObject
For Each o In ActiveSheet.OLEObjects
  If TypeName(o.Object) = "TextBox" Then o.Activate: Exit For
Next
End Sub
Nota 1 : .SelStart n'est pas nécessaire si l'on veut que le curseur soit à la fin du texte.

Nota 2 : avec une TextBox ActiveX on ne peut pas individualiser la mise en forme des caractères.

Il faudrait une RichTextBox (faire une recherche sur ce mot).

Bonne journée.
 

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Re,

Suite à mon post précédent, pour ajouter une ligne à la TextBox de n'importe quelle feuille :

Code:
Sub AjouterLigne()
'lancer par raccourci clavier Ctrl+A
Dim o As OLEObject
For Each o In ActiveSheet.OLEObjects
  If TypeName(o.Object) = "TextBox" Then
    o.Object.Text = o.Object.Text & vbCrLf & "- "
    o.Activate
    Exit For
  End If
Next
End Sub
A+
 

TheLio

XLDnaute Accro
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonsoir Job 75, le fil le forum,
(Ne croyez pas que la succession de mes demandes fait de moi un être difficile. je cherche à comprendre et parfaire mes maigres connaisances du VBA)
En faisant mes tests tout va bien, maintenant, je me posais la question :confused:
Est-il possible de faire appel au code de la feuille cf post #4 via un CommandButton qui se trouve sur un USF MultiPage ?
Avec Call, ça ne passe pas (faut-il déclarer qqch de spécial?)
A++
Lio
 

TheLio

XLDnaute Accro
Re : [VBA] Activer zone de texte et mettre à la ligne

Hello,


Je prépare ça pour demain matin, la flemme n'a rien à voir là dedans (quoi que) c'est juste que je dois enlever une quantité assez impressionnante de données ultra-confidentielles, car il s'agit d'un protocole d'examen fédéral :cool:...
Peux pas prendre le risque de divulguer certaines informations
A tout bientôt
Lio
 

job75

XLDnaute Barbatruc
Re : [VBA] Activer zone de texte et mettre à la ligne

Re,

Cela dit si la macro "Test" est dans la feuille de CodeName "Feuil1" :

Code:
Private Sub CommandButton1_Click()
Run "Feuil1.Test"
End Sub
Bonne fin de soirée.
 
Dernière édition:

TheLio

XLDnaute Accro
Re : [VBA] Activer zone de texte et mettre à la ligne

Bonsoir Job75,
C'est tout juste :) je te remercie
Avec ce "détail" je vais pouvoir créer une USF "de compétition" et ainsi faciliter la vie des examinateurs qui ne sont pas toujours en phase avec les outils informatiques. Ce ne sera que du bénéfice pour les candidats :rolleyes:
A++
Lio
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 520
dernier inscrit
Azise