Bonjour,
dans le bout de code joint, je souhaite comprendre où intervenir pour remettre l'incrément de msoShape-xxx à zéro
merci de votre aide
Lam83Pièce jointe 582703Pièce jointe 582703Pièce jointe 582705
Bonjour,
dans le bout de code joint, je souhaite comprendre où intervenir pour remettre l'incrément de msoShape-xxx à zéro
merci de votre aide
Lam83Pièce jointe 582703Pièce jointe 582703Pièce jointe 582705
Bonjour,
Ici de nombreux contributeurs n'ouvrent pas les fichiers joints s'ils ne l'ont pas démandé, en particulier lorsqu'ils contiennent des macros,
pour les raisons indiquées ici : Fichier joint dans vos discussions
Peux-tu publier le code complet de tes macros et expliquer clairement ce qui pose problème?
bonjour,
je reviens sur le debut de ma discussion.Supprimer l'incrément
j'utilise la classe shape pour dessiné des formes dans ma feuille excel:
le addshape incrémente un compteur et même si j'utilise la fonction suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part Feuil1.Shapes.AddShape(msoShapeRectangle, 100, 100, 50, 15)
il faut une fermeture de mon fichier puis réouverture, pour que l'incrément revienne à zéro.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Selection.ShapeRange.Delete
je cherche le moyen de remettre ce compteur à zéro, sans être obligé de faire cette manip.
d'avance, merci de votre aide.
Lam83
Re,
Ce "compteur" n'a aucune utilité si tu utilises l'objet correctement, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Sub test() Dim shp As Shape Set shp = Feuil1.Shapes.AddShape(msoShapeRectangle, 100, 100, 50, 15) shp.Name = "MonRectangle 3258" ' ... shp.Delete End Sub
merci pour votre réponse,
mais ce compteur est peut être inutile mais il gène dans l'exécution du code.
en effet si on utilise le addshape dans une boucle for.. next, on peut manipuler les formes sur le feuille excel,
mais une fois utiliser le shaperange.delete lui aussi dans une boucle pour effacer les premières formes si on relance la boucle for...next
le compteur s'incrémente à nouveau et plante lorsqu'on veut repasser sur le shaperange.delete pour effacer les secondes formes.
je souhaiterai annulé ce compteur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 for i=1 to 2 addshape(rectangle) next ..... for j=1 to 2 selection.shapeRange.delete next
Lam83
Une démonstration supplémentaire qu'avec VBA il faut éviter d'utiliser les objets actifs (comme Selection) !
La solution est bien celle que je t'ai donné : agir sur l'objet sans le sélectionner.
Pour une solution plus précise il faudrait que tu publies intégralité de ton code.
hello,
Lam83 si tu fais seulement cette instruction :
tu ne maîtrises pas le nom qu'aura la forme, c'est VBA qui décide
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set form = Feuil1.Shapes.AddShape(msoShapeRectangle, 100, ht, 50, 15)
par contre si tu renommes la forme juste après l'avoir créé comme le fait Patrice, là tu maîtrise le nom exemple :
tes rectangles s'appelleront Rectangle_1 et Rectangle_2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Sub rectangle2()Dim i, ht As Integer ht = 100 For i = 1 To 2 Set form = Feuil1.Shapes.AddShape(msoShapeRectangle, 100, ht, 50, 15) form.Name = "Rectangle_" & i ht = ht + 25 Next End Sub
et alors là rien de plus simple pour les supprimer :
Ami calmant, J.P
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Sub eraseRectangle()Dim i As Integer For i = 1 To 2 Feuil1.Shapes("Rectangle_" & i).Delete Next End Sub
bonjour à tous,
merci beaucoup pour votre aide.
je viens de tester vos conseils et bingo, ça fonctionne comme je le souhaite.
je n'avais pas vu la transformation pour gérer le nom qui était imposé par VBA.
encore merci et bonne journée malgré le confinement.. Grrr!!
A+
Lam83
Partager