Bonjour,
Afin que tu puisses observer le fonctionnement, ouvre un nouveau classeur et colle le code ci-dessous dans un Module.
Ensuite tu l'exécute autant de fois que tu veux, les zones de texte s'alligneront les unes à la suite des autres
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| Sub Zone_TB()
Dim obj As Shape, Nb As Integer
Dim L As Integer, T As Integer, W As Integer, H As Integer
L = 200 '<-- position horizontale (Left)
T = 50 '<-- position verticale (Top)
W = 150 '<-- largeur (Width)
H = 40 '<-- hauteur (Height)
'comptage des zones de texte déjà insérées dans la feuille
Nb = 1
For Each obj In Sheets(1).Shapes
If obj.Type = msoTextOrientationHorizontal Then Nb = Nb + 1
Next
'position de la nouvelle zone de texte par rapport à la précédente
If Nb > 1 Then
T = Sheets(1).Shapes("TB" & Nb).Top + Sheets(1).Shapes("TB" & Nb).Height + 5
Else
T = T
End If
'insertion de la nouvelle zone de texte
With Sheets(1).Shapes.AddShape(msoTextOrientationHorizontal, L, T, W, H)
.Name = "TB" & Nb + 1
.TextFrame.Characters.Text = "Zone de texte n° " & Nb
.TextFrame.HorizontalAlignment = xlCenter
.TextFrame.VerticalAlignment = xlCenter
End With
End Sub |
Autre point, si je comprend bien ta boucle Do While, elle sert uniquement à trouver la dernière ligne de ta colonne A, c'est bien ça ?
Si c'est le cas tu peux te passer de cette boucle et simplement écrire
Cells(Rows.Count, 1).End(xlUp)(2) = Service1
Partager