Pb Excel coordonnees graphique formes

Fermé
charluche Messages postés 57 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 10 novembre 2009 - 14 août 2007 à 15:47
charluche Messages postés 57 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 10 novembre 2009 - 28 août 2007 à 17:40
Probleme excel.
Bonjour a tous, je souhaiterai creer des formes (des carres ou des rectangles) dans ma feuille et que ces dernieres soient reperees en coordonnes x y ou meme par rapportaux cellules sur lesquelles elles se trouvent. Le but est de pouvoir deplacer ces formes avec la souris et que les coordonnees soient automatiquement mise a jour dans des cellules. Si quelqu un a une idee ou peu au moins me dire si c est possible, je suis preneur car je me prends la tete depuis un bout de temps sur ce probleme.
Merci de votre aide.
charluche.
PS je suis sous Vista avec Office 2007
A voir également:

7 réponses

coco49rico Messages postés 92 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 30 novembre 2011 76
14 août 2007 à 18:18
Salut,

Dessine une forme et copie cette macro.
Elle donne la position en "points" par rapport au coin supérieur gauche

Sub macro1()

ActiveSheet.Shapes(1).Select
x = Windows(1).Selection.ShapeRange.Left
Range("E2").Select
ActiveCell.FormulaR1C1 = x
ActiveSheet.Shapes(1).Select
y = Windows(1).Selection.ShapeRange.Top
Range("G2").Select
ActiveCell.FormulaR1C1 = y

End Sub


Rico
1
Merci beaucoup coco49rico,
une fois de plus je me dis qu il faut que je me lance dans le VBA.
Peux tu en revanche me donner 2 ou trois infos supplementaires, a savoir a quoi correspondent les points (unite ou cellule?) et si c est possible d adapter cette macro pour qu elle fasse le calcul a chaque fois que je mets une nouvelle forme sans que je doive retaper la macro...
dans tous les cas, je te remercies grandement pour ton aide,
charluche.
0
coco49rico Messages postés 92 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 30 novembre 2011 76
14 août 2007 à 19:17
En faisant une petite règle de trois, il doit y avoir environ 21 points par cm.
Tu peux faire un quadrillage déplacer la forme et mesurer si tu veux plus de précision.

Dans la macro, le (1) de Shapes(1) donne la première forme. en remplaçant par un 2 , tu obtiens les coordonnées de la deuxième forme que tu auras créé.

Il y a beaucoup de possibilités sous VBA. On dois pouvoir rendre cette macro générique, à chaque fois que l'on sélectionne un objet et par appui sur un bouton, il donne sa position.

Peux-tu me donner des précisions sur ce que tu veux faire ?
Rajouter des formes à l'infini ?
Toujours la même forme ?
...
Plus j'aurais de détails et plus je pourrais t'aider sur ton projet final

Rico
0
C est pour faire un plan de chargement de bateau.
Les colis charges etant de formes standards, mon but est de faire apparaitre une forme aux dimensions predefinies en cliquant sur un bouton cette forme sera alors deplacee sur une feuille avec en arriere plan le plan du pont. Une fois la forme en place, je souhaite avoir les coordonnees de toute les formes pour ensuite calculer le barycentre de tous les poids charges.
De plus il me faudrait les coordonnes du centre de la forme et non celle de coin sup gauche mais ca je pense qus ca se bidouille...
Voila j espere que mes explications son assez comprehensibles, encrore merci pour ton interet et ta rapidite.
charluche.
0
coco49rico Messages postés 92 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 30 novembre 2011 76
14 août 2007 à 22:21
Je n'aurais pas forcement eu une approche graphique pour ton exemple, un tableau aurait peut être pu faire l'affaire ... mais bon, si telle est ton idée et comme j'aime les défis, voici le code :

Cette macro calcule tous les centres des objets de la feuille et les place dans les colonnes B et C
(que je nettoie au lancement de la macro !).
Si le bateau est une forme son centre sera aussi calculé.
Il ne reste plus qu'à ajouter le calcul du barycentre, à toi de jouer

Rico


Sub macrobateau()

'selection premier onglet par defaut
Set myDocument = Worksheets(1)

'nettoyage des colonnes B et C des coordonnées existantes
Columns("B:C").Select
Selection.ClearContents
'ajout de titres pour coordonnées
Range("B1").Select
ActiveCell.FormulaR1C1 = "centreX"
Range("C1").Select
ActiveCell.FormulaR1C1 = "centreY"
'cellule de reference
Range("A1").Select
Ligne = 1
Colonne = 1
'routine pour toutes les formes présentes sur la feuille(boucle qui scrute les formes)
For Each sh In myDocument.Shapes
If sh.Type = msoAutoShape Then
sh.Select
x = Windows(1).Selection.ShapeRange.Left
y = Windows(1).Selection.ShapeRange.Top
lo = Windows(1).Selection.ShapeRange.Width
la = Windows(1).Selection.ShapeRange.Height
' calcul du centre par rapport au coordonnees récupérées
centreX = x + (lo / 2)
centreY = y + (la / 2)

ActiveCell.Offset(Ligne, Colonne) = centreX
ActiveCell.Offset(Ligne, Colonne + 1) = centreY

Ligne = Ligne + 1

End If

Next
End Sub
0
Bonjour cocorico
merci pour ton code, je pense que c est vraiment le top. Je vais mettre tout ca a profit, mais ca risaue de prendre un peu de temps. Je risque donc de te demander encore des tuyaux mais peut etre dans une semaine ou 2.
Peux tu me dire comment s y prendre pour se mettre au vb. Faut il une formation speciale ou est ce possible d apprendre seul, faut il dans ce cas prendre des livres specialise? De plus je me demande si ca vaut le coup de se mettre a se langage, me risque t il pas d etre depace dans un futur trop proche?
Encore merci.
Charluche.
0
coco49rico Messages postés 92 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 30 novembre 2011 76
15 août 2007 à 18:52
Bonjour Charluche,

Pour le vb, tu peux commencer par l'enregistreur de macro (Outils/Macro/Nouvelle Macro).
Tu lances l'enregistreur, tu fais les opérations à la main, tu stoppes l'enregistreur et tu vas voir le code.
C'est une méthode pour apprendre simplement. Pas la peine de se lancer dans la programmation pure.
Il faut juste connaître certaines astuces pour faire des boucles ou pour généraliser le code.

Admettons que tu veuille copier la case courante, avec l'enregistreur de macro quand tu sélectionnes la case A1 par exemple, l'enregistreur va te mettre :
Range(A1).Select
Selection.Copy
Pour généraliser à n'importe quelle case, tu mets ActiveCell.Select et dans ce cas là quand tu lanceras la macro il prendra la case en cours et non plus que la case A1.


Rico
coco49rico@orange.fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour Coco49rico,
je suis de retour dans excel, j ai bien essaye l enregistreur de macro, mais il ne se montre pas tres conciliant en matiere de formes... Il faut que je commence sur un autre exemple plus facile et que j apprenne pas a pas. Pour en revenir a mon probleme initial, je souhaiterai qu apres avoir dessine ma forme, je puisse donner des informations quant a la hauteur du centre de gravite et au poids. Je sais que je peux les rentrer manuellement dans les colones b et c, mais cela me plairait d avantage si une boite de dialogue ou une macro pouvait me permettre de d automatiser la chose forme par forme.
Merci d avance.
0
Bonjour cocorico,
je me suis un peu plonge dans VBA et je suis deja face a un mur. Tu remarqueras que j'ai pas mal tape dans ta macro! En gros les problemes que je rencontre actuellement sont les suivantes:
- quand je dessine une seconde forme, les infos relatives a la premiere forme sont effacees, elles ne veulent pas se mettrent a la "ligne + 1" comme ca le fait pour ta macro.
-si je supprime une forme, j aimerai que les informations relatives a cette forme (info provenant de l inputbox) soient elles aussi supprimees. Pour que les coordonnees de ta macro correspondent aux entree de la mienne il faudrait, je pense, que les cellules contenant les informations soient supprimees de facon a faire remonter les suivantes au niveau de leur coordonnees correspondantes.
Voila ou j en suis.
J espere que tu pourras me sortir de la.
Merci de ton attention.
charluche.
PS: j ai remarque aue ton mail figure dans la precedente conversation, cela signifie t il que je dois continuer la conversation en prive? J ne suis suis pas familie aux forums, je ne sais donc pas si c autorise.
0
charluche Messages postés 57 Date d'inscription mardi 14 août 2007 Statut Membre Dernière intervention 10 novembre 2009
28 août 2007 à 17:40
Je suis desole, j avais oublie de te donner mon code....
Sub Conteneur()
'ajout de titres pour coordonnées
Range("D1").Select
ActiveCell.FormulaR1C1 = "Hauteur"
Range("E1").Select
ActiveCell.FormulaR1C1 = "Poids"
'cellule de reference
Range("C1").Select
Ligne = 1
Colonne = 1
'Informations sur le conteneur
Longueur = InputBox("Longueur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Longueur du conteneur", "1")
Largeur = InputBox("Largeur du conteneur en metre, si vous ne connaissez pas la longueur exacte, tapez 1 et ajustez manuellement avec les poignees.", "Largeur du conteneur", "1")
Hauteur = InputBox("Hauteur du conteneur en metre, cette hauteur sera automatiquement ponderee du coefficient 2/3 pour le calcul du KG.", "Hauteur du conteneur")
Poids = InputBox("Poids du conteneur en tonnes.", "Poids du conteneur")
ActiveCell.Offset(Ligne, Colonne) = Hauteur
ActiveCell.Offset(Ligne, Colonne + 1) = Poids

Ligne = Ligne + 1
'dessin de la forme
Set myDocument = Worksheets(1)
With myDocument.Shapes
With .AddShape(msoShapeRectangle, 5, 5, Longueur, Largeur)

End With
End With
End Sub
0