Comme l'enregistreur de macros ne fonctionne pas pour les formes dans Excel=
2007, j'aimerais trouver une solution comme indiqu=E9e dans le fichier joi=
nt.
Pour dessiner un rectangle comme celui dans le classeur :
Tu ajustes les dimensions du rectangle selon tes besoins. Pour renseigner ces données, tu peux utiliser comme référence une plage de cellule et définir les propriétés du rectangle selon les propriétés de la plage de cellules. (.top, .left, .width, .height)
'------------------------------------------ Sub test() Dim Sh As Shape Set Sh = Sheet1.Shapes.AddShape(msoShapeRoundedRectangle, _ Left:.75, Top:$9.75, Width:0.25, Height:2)
With Sh .OLEFormat.Object.Text = "Texte1" & vbCrLf & "Texte2" & _ vbCrLf & "texte3" .TextFrame.HorizontalAlignment = xlHAlignCenter .TextFrame.VerticalAlignment = xlVAlignCenter End With End Sub '------------------------------------------
Pour dessiner un rectangle comme celui dans le classeur :
Tu ajustes les dimensions du rectangle selon tes besoins.
Pour renseigner ces données, tu peux utiliser comme référence
une plage de cellule et définir les propriétés du rectangle selon
les propriétés de la plage de cellules. (.top, .left, .width, .height)
'------------------------------------------
Sub test()
Dim Sh As Shape
Set Sh = Sheet1.Shapes.AddShape(msoShapeRoundedRectangle, _
Left:.75, Top:$9.75, Width:0.25, Height:2)
With Sh
.OLEFormat.Object.Text = "Texte1" & vbCrLf & "Texte2" & _
vbCrLf & "texte3"
.TextFrame.HorizontalAlignment = xlHAlignCenter
.TextFrame.VerticalAlignment = xlVAlignCenter
End With
End Sub
'------------------------------------------
Pour dessiner un rectangle comme celui dans le classeur :
Tu ajustes les dimensions du rectangle selon tes besoins. Pour renseigner ces données, tu peux utiliser comme référence une plage de cellule et définir les propriétés du rectangle selon les propriétés de la plage de cellules. (.top, .left, .width, .height)
'------------------------------------------ Sub test() Dim Sh As Shape Set Sh = Sheet1.Shapes.AddShape(msoShapeRoundedRectangle, _ Left:.75, Top:$9.75, Width:0.25, Height:2)
With Sh .OLEFormat.Object.Text = "Texte1" & vbCrLf & "Texte2" & _ vbCrLf & "texte3" .TextFrame.HorizontalAlignment = xlHAlignCenter .TextFrame.VerticalAlignment = xlVAlignCenter End With End Sub '------------------------------------------
Ton code ne donne rien ! je ne sais pas pourquoi ?
En fait, en PJ un code qui fonctionnait très bien avec Excel 2003.
Avec Excel 2007 ça ne donne qu'un trait en vertical.
http://cjoint.com/?BDDwwJfWcBJ
MichD
Ceci fonctionne très bien avec Excel 2010.
La dimension du rectangle est délimitée par l'étendue de la plage de cellules C5:G10. Si tu rends actif la commande OLEFormat.Object.AutoSize = True il ne faut pas te surprendre si la dimension du rectangle est réduite à l'espace nécessaire à l'affichage du texte.
'---------------------------------------------------------- Sub test() ListeFenetre Range("C5:G10"), "Bonjour à tous" End Sub '---------------------------------------------------------- Public Sub ListeFenetre(Target As Range, Texte As String) Dim Fenetre As Shape Set Fenetre = Feuil1.Shapes. _ AddShape(msoShapeRoundedRectangle, _ Left:=Target.Left, Top:=Target.Top, _ Width:=Target.Width, Height:=Target.Height)
With Fenetre .Name = "Commentaire" If Texte <> "" Then .OLEFormat.Object.Text = Texte .OLEFormat.Object.Font.ColorIndex = 0 .OLEFormat.Object.Font.Size = 18 '.OLEFormat.Object.AutoSize = True Else .OLEFormat.Object.Text = "Mot introuvable" .OLEFormat.Object.Font.ColorIndex = 0 .OLEFormat.Object.Font.Size = 18 '.OLEFormat.Object.AutoSize = True End If .TextFrame.HorizontalAlignment = xlHAlignCenter .TextFrame.VerticalAlignment = xlVAlignCenter .Fill.ForeColor.SchemeColor = 0 .Visible = True .Fill.Visible = msoTrue .Fill.ForeColor.SchemeColor = 65 .Fill.BackColor.SchemeColor = 13 .Fill.TwoColorGradient msoGradientHorizontal, 2 End With Set Fenetre = Nothing End Sub '-------------------------------------------------------------
La dimension du rectangle est délimitée par l'étendue de la plage
de cellules C5:G10.
Si tu rends actif la commande OLEFormat.Object.AutoSize = True
il ne faut pas te surprendre si la dimension du rectangle est réduite
à l'espace nécessaire à l'affichage du texte.
'----------------------------------------------------------
Sub test()
ListeFenetre Range("C5:G10"), "Bonjour à tous"
End Sub
'----------------------------------------------------------
Public Sub ListeFenetre(Target As Range, Texte As String)
Dim Fenetre As Shape
Set Fenetre = Feuil1.Shapes. _
AddShape(msoShapeRoundedRectangle, _
Left:=Target.Left, Top:=Target.Top, _
Width:=Target.Width, Height:=Target.Height)
With Fenetre
.Name = "Commentaire"
If Texte <> "" Then
.OLEFormat.Object.Text = Texte
.OLEFormat.Object.Font.ColorIndex = 0
.OLEFormat.Object.Font.Size = 18
'.OLEFormat.Object.AutoSize = True
Else
.OLEFormat.Object.Text = "Mot introuvable"
.OLEFormat.Object.Font.ColorIndex = 0
.OLEFormat.Object.Font.Size = 18
'.OLEFormat.Object.AutoSize = True
End If
.TextFrame.HorizontalAlignment = xlHAlignCenter
.TextFrame.VerticalAlignment = xlVAlignCenter
.Fill.ForeColor.SchemeColor = 0
.Visible = True
.Fill.Visible = msoTrue
.Fill.ForeColor.SchemeColor = 65
.Fill.BackColor.SchemeColor = 13
.Fill.TwoColorGradient msoGradientHorizontal, 2
End With
Set Fenetre = Nothing
End Sub
'-------------------------------------------------------------
La dimension du rectangle est délimitée par l'étendue de la plage de cellules C5:G10. Si tu rends actif la commande OLEFormat.Object.AutoSize = True il ne faut pas te surprendre si la dimension du rectangle est réduite à l'espace nécessaire à l'affichage du texte.
'---------------------------------------------------------- Sub test() ListeFenetre Range("C5:G10"), "Bonjour à tous" End Sub '---------------------------------------------------------- Public Sub ListeFenetre(Target As Range, Texte As String) Dim Fenetre As Shape Set Fenetre = Feuil1.Shapes. _ AddShape(msoShapeRoundedRectangle, _ Left:=Target.Left, Top:=Target.Top, _ Width:=Target.Width, Height:=Target.Height)
With Fenetre .Name = "Commentaire" If Texte <> "" Then .OLEFormat.Object.Text = Texte .OLEFormat.Object.Font.ColorIndex = 0 .OLEFormat.Object.Font.Size = 18 '.OLEFormat.Object.AutoSize = True Else .OLEFormat.Object.Text = "Mot introuvable" .OLEFormat.Object.Font.ColorIndex = 0 .OLEFormat.Object.Font.Size = 18 '.OLEFormat.Object.AutoSize = True End If .TextFrame.HorizontalAlignment = xlHAlignCenter .TextFrame.VerticalAlignment = xlVAlignCenter .Fill.ForeColor.SchemeColor = 0 .Visible = True .Fill.Visible = msoTrue .Fill.ForeColor.SchemeColor = 65 .Fill.BackColor.SchemeColor = 13 .Fill.TwoColorGradient msoGradientHorizontal, 2 End With Set Fenetre = Nothing End Sub '-------------------------------------------------------------
Public Sub ListeFenetre(Target As Range, Texte As String) Dim Fenetre As Shape Set Fenetre = Feuil1.Shapes. _ AddShape(msoShapeRoundedRectangle, _ Left:=Target.Left, Top:=Target.Top, _ Width:=Target.Width, Height:=Target.Height)
Bonjour,
Si je peux me permettre (tant pis, vous ne me répondrez peut-être pas ...) ceci fonctionne si Target est une plage (ah oui j'allais encore dire un champ) de la feuille Feuil1 (peut-être faut-il même précise r, du classeur actif).
Tout le monde en phase, là-dessus ?
MichD a écrit, le 29/04/2012 23:55 :
Public Sub ListeFenetre(Target As Range, Texte As String)
Dim Fenetre As Shape
Set Fenetre = Feuil1.Shapes. _
AddShape(msoShapeRoundedRectangle, _
Left:=Target.Left, Top:=Target.Top, _
Width:=Target.Width, Height:=Target.Height)
Bonjour,
Si je peux me permettre (tant pis, vous ne me répondrez peut-être pas
...) ceci fonctionne si Target est une plage (ah oui j'allais encore
dire un champ) de la feuille Feuil1 (peut-être faut-il même précise r, du
classeur actif).
Public Sub ListeFenetre(Target As Range, Texte As String) Dim Fenetre As Shape Set Fenetre = Feuil1.Shapes. _ AddShape(msoShapeRoundedRectangle, _ Left:=Target.Left, Top:=Target.Top, _ Width:=Target.Width, Height:=Target.Height)
Bonjour,
Si je peux me permettre (tant pis, vous ne me répondrez peut-être pas ...) ceci fonctionne si Target est une plage (ah oui j'allais encore dire un champ) de la feuille Feuil1 (peut-être faut-il même précise r, du classeur actif).
Tout le monde en phase, là-dessus ?
MichD
| ceci fonctionne si Target est une plage
| Public Sub ListeFenetre(Target As Range, Texte As String)
Dans la déclaration de la procédure, cela est explicite