Tracer une ligne entre 2 cellules (Excel) [Résolu]

Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 3 déc. 2014 à 10:17
Bonjour,
Afin de tracer un circuit lors de son évolution, peut-on afficher une ligne entre deux points (centres des 2 cellules) par une macro VBA ?
Les 2 cellules sont définies par une zone (ex: D5:H4) dont les positions (Top, Left, Height et Width) sont à relever, avec connaissance des demi-largeurs et demi-hauteurs des cellules. Toutes les cellules ont le même format.
Merci. Bab
Afficher la suite 

9 réponses

Messages postés
26089
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 août 2019
313
0
Merci
Bonjour.
Cela ressemble à l'énoncé d'un exercice. ..

sur quoi bloques tu ?
Qu'as tu commence à coder ?


Nous pouvons essayer de t'aider. .mais pas le faire à ta place. ..

Commenter la réponse de jordane45
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
0
Merci
bonjour
En fait je voudrais tracer un trait dont les points extrêmes seraient les centres (ou les points supérieur gauche) de 2 cellules distinctes, puis un autre partant de l'une pour la relier une troisième, etc.
Le but est d'imager un parcours ...

En Basic (d'antan), une instruction [Line (x1,y1)-(x2,y2),n] permettait ces tracés.
Existe-t-il de telles instruction en VbA ?
Existe-il un logiciel (gratuit de préférence) pour constituer une telle image à partir de points identifiés ?

Merci, Bab
Commenter la réponse de babu26
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Bonjour,
Ce que tu appelles "Basic d'antan" n'est pas du VBA, mais du VB5 ou VB6.
Line ne peut s'appliquer qu'à un contrôle doté d'un hdc, ce dont ne dispose pas ni Exel, ni son VBA.
Tu ne peux donc qu'insérer une forme (ligne).
Et donc écrire en VBA ce que tu ferais en choisissant dans la barre d'outils de Excel : Insertion ==>> Formes === Lignes (et choix du style de ligne).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
0
Merci
bonjour et merci
Si j'ai bien compris, il me faut autant de forme.lignes (une collection) que j'aurais de traits à tracer ?
Peut-on modifier les points extrêmes de chacune de ces lignes ?
Les propriétés hide / show : comment les appliquer ?

J'avoue que je me ballade beaucoup dans l'aide d'Excel, sans trouver de modèles, ni d'explications très claires. En plus, si je cherche un mot-clé, c'est généralement sans résultat.

Je vais tenter de continuer, mais je commence à trouver cela fastidieux.
Commenter la réponse de babu26
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Insère donc manuellement (comme dit plus haut) une forme de ligne.
Ouvre sa fenêtre (en cliquant droit dessus) et clique sur affecter une macro.
Tu découvriras ainsi son nom (de la forme "Connecteur droit 1")
Cette forme appartient à la collection Shapes de Excel.
Tu t'y réfères donc (comme nous l'avons déjà vu à plusieurs reprises sur ce forum) par :
Me.Shapes("Connecteur droit 1")
Cet objet a plusieurs propriétés, dont Left, Top, Width et Height.
Amuse-toi donc à voir ce qu'elles sont, par un tout petit code du genre :
msgbox Me.Shapes("Connecteur droit 2").nom_de_la_propriété (il y a même une propriété visible ...)
Tu en apprendras ainsi déjà beaucoup
Certaines de ses propriétés ont elles-mêmes des sous-propriétés (c'est par exemple le cas de la propriété Line). Il te suffira d'ajouter un "." derrière le nom de la propriété pour obtenir de l'intellisense les noms des sous-propriétés possibles. Pour chacune d'entre elles, procède comme nous l'avons dit en ce qui concerne la propriété principale.
C'est ainsi que l'on apprend et ainsi que j'ai moi-même appris.
Une fois passée cette étape :
Ta "ligne brisée" devra en effet être nécessairement constituée d'une succession de Shapes. Pour les créer en mode exécution (par VBA), il te faudra utiliser la méthode Add (comme pour toute collection), à bûcher dans ton aide VBA; le moteur de recherche de ce forum te conduira par ailleurs facilement à de nombreuses discussions relatives à la création et l'ajout d'objets (shapes ou autres) de manière dynamique.
Tout cela sera à "acquérir". Et ce d'autant que, dans ce domaine, chaque cas est un cas particulier. Une préhension préalable très claire de ces méthodes te sera donc absolument nécessaire.

Par ailleurs : un objet range (une cellule en est un) possède également les propriétés Top, Left, Width et Height. Un tout petit calcul arithmétique (très simple) te permettra donc de déterminer les coordonnées du centre d'une cellule.
Un segment (tes shapes) est toujours (même si horizontal ou vertical) compris dans un rectangle. Son point de départ est défini par les coordonnées du coin supérieur gauche de ce rectangle et son point d'arrivée par celles du coin inférieur droit de ce rectangle. A partir de la, tout n'est qu'arithmétique.
En te rappelant que toutes ces propriétés sont en échelle de points et non d'autres unités (pixels, cms, etc ...)

Venons-en maintenant à ta remarque :
Je vais tenter de continuer, mais je commence à trouver cela fastidieux

Il est tout-à-fait vrai que Excel est un tableur. Sa vocation n'est pas réellement celle que tu cherches à lui attribuer. La "chose" reste toutefois parfaitement réalisable (mais à quel prix/poids !).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
0
Merci
Bonjour matinal et grand merci.

Je Pense avoir tout compris et je vais m'atteler à résoudre ce problème.

Dans un modèle (BigBen pour le citer), j'avais bien vu des shapes (pour les aiguilles) mais je n'avais pas su comment ils avaient été générés. Maintenant, c'est plus clair.

Je considère le Pb. résolu et te dis encore Merci. Bab
Commenter la réponse de babu26
Messages postés
44
Date d'inscription
samedi 8 juin 2013
Statut
Membre
Dernière intervention
21 janvier 2015
0
Merci
Me re-voila ! Salut.
Je dois être complètement idiot...
Je n'arrive pas à affecter une macro après avoir insérer une forme "Connecteur droit 1".
je vois les formes de la feuille dans la section Sélection et visibilité et suis bloqué.
Via "Enregistrer une macro", mes clics et mes déplacements de la forme ne sont pas enregistrer. Pourquoi ?
A +, Bab
Commenter la réponse de babu26
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Les doigts sont toujours moins agiles le matin ?
Non, je plaisante.
Ce n'est pas toujours évident.
Sur la forme que tu as insérée manuellement : clic droit. Recommence plusieurs fois ainsi jusqu'à obtenir une boîte de dialogue dont l'une des "rubriques" dit "Affecter une macro".
Tu y arriveras après plusieurs essais.
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
regarde :


Ne cherche pas à enregistrer une macro. L'enregistreur de macros ne sait pas le faire en ce qui concerne l'ajout de formes.
En disant que tu veux "affecter une macro", tu apprends simplement le nom de ta Shape (juste pour t'entraîner à la manipuler ensuite à partir de son nom).

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Commenter la réponse de ucfoutu