Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Rotation de formes groupées

7 réponses
Avatar
garnote
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge

7 réponses

Avatar
MichDenis
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation 90



"garnote" a écrit dans le message de groupe de discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge
Avatar
garnote
Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge




Avatar
MichDenis
Tu peux utiliser un bout de code comme ceci :

Pour la Shape en L3 de la feuille,
si tu veux que chaque groupe réagisse de la même manière
tu ajoutes un "case" dans le select case pour chaque groupe.

'-----------------------------------
Sub Rotation()
With ActiveSheet
x = .Shapes(Application.Caller).Name
Select Case x
Case Is = "Ellipse 7", "Connecteur droit 8"
x = "Connecteur droit 8"
.Shapes(x).OLEFormat.Object.ShapeRange.IncrementRotation 90

' Case is = "Groupe 2"

' Case is = "Groupe 3"
End Select
End With
End Sub
'-----------------------------------



"garnote" a écrit dans le message de groupe de discussion :

Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge




Avatar
garnote
Salut Denis,

Astucieux mais si j'ai une centaine de groupes,
ça devient un peu lourd !
Sous Excel 2003, si j'associais une macro à des
formes groupées, MsgBox Application.Caller
me renvoyait le nom du groupe.
M'enfin il me semble. Pourrais-tu vérifier ?
Sous 2007, quand je clique sur le groupe,
MsgBox Application.Caller me renvoie
le nom de la forme du groupe sur laquelle je clique !

Serge


"MichDenis" a écrit dans le message de news:
%
Tu peux utiliser un bout de code comme ceci :

Pour la Shape en L3 de la feuille,
si tu veux que chaque groupe réagisse de la même manière
tu ajoutes un "case" dans le select case pour chaque groupe.

'-----------------------------------
Sub Rotation()
With ActiveSheet
x = .Shapes(Application.Caller).Name
Select Case x
Case Is = "Ellipse 7", "Connecteur droit 8"
x = "Connecteur droit 8"
.Shapes(x).OLEFormat.Object.ShapeRange.IncrementRotation 90

' Case is = "Groupe 2"

' Case is = "Groupe 3"
End Select
End With
End Sub
'-----------------------------------



"garnote" a écrit dans le message de groupe de
discussion :

Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge







Avatar
MichDenis
Il faut pas me dire n'importe quoi !
Malheureusement pour toi, j'ai aussi une version Excel 2003
d'installer sur mon ordi.
;-)

Cette procédure fonctionne sous les 2 versions d'Excel (2003 et 2007)
'------------------------------------
Sub Rotation()
'Nom des 2 shapes en L3
Set forme = ActiveSheet.Shapes("Groupe 6")
forme.IncrementRotation 90
End Sub
'------------------------------------

Maintenant sous la version 2003, cette version de la
macro se plante, parce que application.Caller retourne
le nom de l'un des 2 objets de la shape et non le nom
du groupe de la shape.
'-------------------------------------
Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub
'-------------------------------------
Sous Excel 2007, cette macro fonctionne mais pour l'élément
retourné par "Application.Caller" et non pour le groupe.

Ta question est équivalent à se demander est-ce que l'on peut
savoir à quel groupe appartient chaque objet, car pour obtenir
ce que tu désires, nous devons passer à l'argument "Shapes" le nom
du groupe et non le nom de l'objet isolé.




"garnote" a écrit dans le message de groupe de discussion :
uONnN$
Salut Denis,

Astucieux mais si j'ai une centaine de groupes,
ça devient un peu lourd !
Sous Excel 2003, si j'associais une macro à des
formes groupées, MsgBox Application.Caller
me renvoyait le nom du groupe.
M'enfin il me semble. Pourrais-tu vérifier ?
Sous 2007, quand je clique sur le groupe,
MsgBox Application.Caller me renvoie
le nom de la forme du groupe sur laquelle je clique !

Serge


"MichDenis" a écrit dans le message de news:
%
Tu peux utiliser un bout de code comme ceci :

Pour la Shape en L3 de la feuille,
si tu veux que chaque groupe réagisse de la même manière
tu ajoutes un "case" dans le select case pour chaque groupe.

'-----------------------------------
Sub Rotation()
With ActiveSheet
x = .Shapes(Application.Caller).Name
Select Case x
Case Is = "Ellipse 7", "Connecteur droit 8"
x = "Connecteur droit 8"
.Shapes(x).OLEFormat.Object.ShapeRange.IncrementRotation 90

' Case is = "Groupe 2"

' Case is = "Groupe 3"
End Select
End With
End Sub
'-----------------------------------



"garnote" a écrit dans le message de groupe de
discussion :

Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge







Avatar
MichDenis
La macro que tu as besoin est celle-ci :

Valide pour Excel 2007 seulement
'--------------------------------
Sub Rotation()
Dim Nom As String
With Feuil1
Nom = .Shapes(Application.Caller).ParentGroup.Name
.Shapes(Nom).IncrementRotation 90
End With
End Sub
'--------------------------------



"MichDenis" a écrit dans le message de groupe de discussion :
#
Il faut pas me dire n'importe quoi !
Malheureusement pour toi, j'ai aussi une version Excel 2003
d'installer sur mon ordi.
;-)

Cette procédure fonctionne sous les 2 versions d'Excel (2003 et 2007)
'------------------------------------
Sub Rotation()
'Nom des 2 shapes en L3
Set forme = ActiveSheet.Shapes("Groupe 6")
forme.IncrementRotation 90
End Sub
'------------------------------------

Maintenant sous la version 2003, cette version de la
macro se plante, parce que application.Caller retourne
le nom de l'un des 2 objets de la shape et non le nom
du groupe de la shape.
'-------------------------------------
Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub
'-------------------------------------
Sous Excel 2007, cette macro fonctionne mais pour l'élément
retourné par "Application.Caller" et non pour le groupe.

Ta question est équivalent à se demander est-ce que l'on peut
savoir à quel groupe appartient chaque objet, car pour obtenir
ce que tu désires, nous devons passer à l'argument "Shapes" le nom
du groupe et non le nom de l'objet isolé.




"garnote" a écrit dans le message de groupe de discussion :
uONnN$
Salut Denis,

Astucieux mais si j'ai une centaine de groupes,
ça devient un peu lourd !
Sous Excel 2003, si j'associais une macro à des
formes groupées, MsgBox Application.Caller
me renvoyait le nom du groupe.
M'enfin il me semble. Pourrais-tu vérifier ?
Sous 2007, quand je clique sur le groupe,
MsgBox Application.Caller me renvoie
le nom de la forme du groupe sur laquelle je clique !

Serge


"MichDenis" a écrit dans le message de news:
%
Tu peux utiliser un bout de code comme ceci :

Pour la Shape en L3 de la feuille,
si tu veux que chaque groupe réagisse de la même manière
tu ajoutes un "case" dans le select case pour chaque groupe.

'-----------------------------------
Sub Rotation()
With ActiveSheet
x = .Shapes(Application.Caller).Name
Select Case x
Case Is = "Ellipse 7", "Connecteur droit 8"
x = "Connecteur droit 8"
.Shapes(x).OLEFormat.Object.ShapeRange.IncrementRotation 90

' Case is = "Groupe 2"

' Case is = "Groupe 3"
End Select
End With
End Sub
'-----------------------------------



"garnote" a écrit dans le message de groupe de
discussion :

Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge







Avatar
garnote
Yep, c'est très exactement cela.
Vive la parenté :-)

"MichDenis" a écrit dans le message de news:

La macro que tu as besoin est celle-ci :

Valide pour Excel 2007 seulement
'--------------------------------
Sub Rotation()
Dim Nom As String
With Feuil1
Nom = .Shapes(Application.Caller).ParentGroup.Name
.Shapes(Nom).IncrementRotation 90
End With
End Sub
'--------------------------------



"MichDenis" a écrit dans le message de groupe de
discussion :
#
Il faut pas me dire n'importe quoi !
Malheureusement pour toi, j'ai aussi une version Excel 2003
d'installer sur mon ordi.
;-)

Cette procédure fonctionne sous les 2 versions d'Excel (2003 et 2007)
'------------------------------------
Sub Rotation()
'Nom des 2 shapes en L3
Set forme = ActiveSheet.Shapes("Groupe 6")
forme.IncrementRotation 90
End Sub
'------------------------------------

Maintenant sous la version 2003, cette version de la
macro se plante, parce que application.Caller retourne
le nom de l'un des 2 objets de la shape et non le nom
du groupe de la shape.
'-------------------------------------
Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub
'-------------------------------------
Sous Excel 2007, cette macro fonctionne mais pour l'élément
retourné par "Application.Caller" et non pour le groupe.

Ta question est équivalent à se demander est-ce que l'on peut
savoir à quel groupe appartient chaque objet, car pour obtenir
ce que tu désires, nous devons passer à l'argument "Shapes" le nom
du groupe et non le nom de l'objet isolé.




"garnote" a écrit dans le message de groupe de
discussion :
uONnN$
Salut Denis,

Astucieux mais si j'ai une centaine de groupes,
ça devient un peu lourd !
Sous Excel 2003, si j'associais une macro à des
formes groupées, MsgBox Application.Caller
me renvoyait le nom du groupe.
M'enfin il me semble. Pourrais-tu vérifier ?
Sous 2007, quand je clique sur le groupe,
MsgBox Application.Caller me renvoie
le nom de la forme du groupe sur laquelle je clique !

Serge


"MichDenis" a écrit dans le message de news:
%
Tu peux utiliser un bout de code comme ceci :

Pour la Shape en L3 de la feuille,
si tu veux que chaque groupe réagisse de la même manière
tu ajoutes un "case" dans le select case pour chaque groupe.

'-----------------------------------
Sub Rotation()
With ActiveSheet
x = .Shapes(Application.Caller).Name
Select Case x
Case Is = "Ellipse 7", "Connecteur droit 8"
x = "Connecteur droit 8"
.Shapes(x).OLEFormat.Object.ShapeRange.IncrementRotation 90

' Case is = "Groupe 2"

' Case is = "Groupe 3"
End Select
End With
End Sub
'-----------------------------------



"garnote" a écrit dans le message de groupe de
discussion :

Voici un petite exemple :

http://www.cijoint.fr/cjlink.php?file=cj200908/cijxPVBxu9.xls

Serge



"MichDenis" a écrit dans le message de news:
uuscR$
Je n'ai pas compris exactement la "forme" que tu manipules...
mais il y a ceci :

ActiveSheet.Shapes(Application.Caller).OLEFormat.Object.ShapeRange.IncrementRotation
90



"garnote" a écrit dans le message de groupe de
discussion :
#
Bonsoir,

Sous Excel 2007 :
J'ai dessiné plusieurs disques noirs contenant chacun un segment
jaune passant par le centre. J'ai groupé chaque disque avec son
segment et associé la macro suivante à chacun des groupes :

Sub Rotation()
Set forme = ActiveSheet.Shapes(Application.Caller)
forme.IncrementRotation 90
End Sub

Mais voilà, je suis obligé de cliquer sur le segment pour que la
rotation
s'effectue.Si je clique dans le disque mais à côté du segment, il ne se
passe rien. Comment remédier à ce léger embarras ?
Il me semble que je n'avais pas ce problème sous 2003.
Et quand pourrons-nous enfin utiliser l'enregistreur de macros
quand on tripote des formes :-)

Serge