Ajouter une barre sur un nuage de point

Résolu/Fermé
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018 - 18 avril 2018 à 16:19
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 - 23 avril 2018 à 13:56
Bonjour à la communauté,

J'explique mon problème. Je réalise actuellement un nuage de point en programmation VBA. Pour ce faire, j'ai des données de consommation d'antibiotiques et de résistances bactériennes à ces antibiotiques (consommation en abscisse et résistance en ordonnée). J'ai ces données pour une certaine année et j'obtiens à la fin une médiane pour la consommation et la résistance. C'est la qu'arrive mon problème.

A partir de ce point médian, il faudrait que j'ajoute automatiquement deux barres (1 horizontale et 1 verticale) qui passe par ce point médian. Pour le moment, je n'arrive qu'a ajouter directement une forme de barre que je fais bouger manuellement en fonction des valeurs. Cependant, pour placer la barre a une valeur 8 en abscisse je dois mettre 180 sur le code... Il semble donc n'y avoir aucune logique .

j'utilise pour l'instant le code suivant pour placer mes barres :

ActiveChart.Shapes.AddConnector(msoConnectorStraight, 285, 31, 285, 173).Select


ActiveChart.Shapes.AddConnector(msoConnectorStraight, 32, 78, 313, 78).Select

La première image est le graphique que j'obtiens.



la seconde est le graphique que j'aimerai obtenir ( et donc automatiser en fonction du point médian).



Je suis vraiment bloqué et je ne trouve pas de solution pour automatiser ces barres .....

Merci par avance pour votre aide !
A voir également:

9 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
19 avril 2018 à 15:26
Bonjour à tous les deux

Un petit exemple à adapter
https://www.cjoint.com/c/HDtnz5qBjrB

Cdlmnt
1
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
20 avril 2018 à 14:23
Bonjour,

Merci, c'est une super idée ton code !!

petite question : à quoi sert ces 2 lignes ?

xm = X2(UBound(X2))
ym = Y2(UBound(Y2))

merci par avance !
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
20 avril 2018 à 14:51
J'ai essayé ton code mais sur mes données. Tout marche parfaitement bien jusqu'à la ligne : .seriescollection(3)=hX

Excel me dit : erreur 1004 : paramètre non valide

aurait tu une idée ?

merci par avance !
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
20 avril 2018 à 15:14
J'ai trouvé l'erreur, il refuse de mettre plus de 2 après "seriescollection". Comment puis-je le forcer à ajouter d'autres séries ?
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
20 avril 2018 à 15:19
Vois tout en bas, je t'ai mis 3 messages que tu n'as apparemment pas lu
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 18 avril 2018 à 20:37
bonsoir, je ne comprends pas "je dois mettre 180 sur le code".
utilises-tu Excel?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
18 avril 2018 à 21:12
bonsoir, quand tu utilises AddConnector, les positions que tu spécifies n'ont rien à voir avec les valeurs en abscisse et en ordonnée, ce sont des positions en points dans la zone de graphe.
plutôt que de manipuler le graphe comme un dessin, je suggère plutôt, soit de te limiter à ce que Excel te permet de faire avec un graphe, soit de faire le dessin complet par programme, sans utiliser le graphe de Excel.
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
Modifié le 19 avril 2018 à 11:14
Bonjour,

Tout d'abord merci de votre aide yg_be.

par exemple, pour mettre une barre sur la valeur 28 en abscisse je dois écrire

ActiveChart.Shapes.AddConnector(msoConnectorStraight, 285, 31, 285, 173).Select

La valeur 285 me permettant de placer la barre sur la valeur 28... soit vraiment rien à voir...

Je dois tout automatiser par programme, si jamais quelqu'un saurait comment programmer l'ajout d'une barre selon les valeurs en abscisses ça serait parfait !
0

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

Posez votre question
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
20 avril 2018 à 14:52
' coordonnées du point median
X2 = .SeriesCollection(2).XValues
Y2 = .SeriesCollection(2).Values
xm = X2(UBound(X2))
ym = Y2(UBound(Y2))

X2 et Y2 sont les données source (tableaux à une seule case) de la série 2 (point médian)
xm est ym sont les coordonnées du point median que l'on récupère comme dernières cases (UBound) de X2 et de Y2
qui serviront à définir les données sources des deux barres (définies par deux points)
- la verticale qui aura comme XValues {xm,xm} et comme Values {minY,maxY}
- l'horizontale qui aura comme XValues {minX,maxX} et comme Values {ym,ym}
Ce que tu peux constater et regardant les données sources du point médian et de ces deux barres

Cdlmnt
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 20 avril 2018 à 15:11
J'ai essayé ton code mais sur mes données. Tout marche parfaitement bien jusqu'à la ligne : .seriescollection(3)=hX

Q1. As tu une troisième série dans ton graphique ?
Dans mon exemple, pour faire simple, je suis parti du principe que les 5 séries étaient déjà créées (le nuage de point, le point médian et avec n'importe quoi au départ pour les deux barres)
Q2. qui est hX ?

RQ. Ne réponds pas dans les commentaires mais avec répondre (au fond), sinon, on ne voit plus la chronologies des posts
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 20 avril 2018 à 15:11
Au cas où
Pour ajouter une série à gr (via vba)
.SeriesCollection.NewSeries
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
20 avril 2018 à 15:41
Re,

Désolé je n'avais pas vu les messages ...

Grâce à ta solution ,en rajoutant Newseries je n'ai plus le message d'erreur 1004 merci beaucoup !

Cependant, il m'affiche bien les deux points pour tracer la barre verticale et l'autre horizontal. Mais il ne trace pas de trait reliant les deux comme sur ton graphique :/

désolé je début en VBA et les graphiques je galère vraiment ...

merci par avance encore !
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
20 avril 2018 à 15:53
Créer de toute pièce un graphique avec vba est une vraie galère, est ce vraiment indispensable dans ton cas ?
Il est beaucoup plus simple de créer et formater un graphique comme tu le souhaites et par vba, modifier ses données source
Si vba obligatoire
Tu lances l'enregistreur de macros (outils/macros/Nouvelle macro sous excel 2003 sous 2007 et plus, ça doit être dans l'onglet développeur) et tu formates ton graphique,. puis arrêter l'enregistrement (tu récupères le code dans un Module vba)
Vas y doucement (un seul truc à la fois car il y a une foule de propriétés attachées à des objets du graphique)

Bon courage
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
20 avril 2018 à 15:58
Oui c'est obligatoire, il doit être automatique en fonction de 102 médiane par année et ceci même pour les futures années. Et j'ai essayé comme tu m'as dis et donc j'ai rajouté le code :

".seriescollection(4).select
.seriescollection(4).charttype.xlXYScatterSmoothNoMarkers

mais ça ne me modifie strictement rien :/

peut-être que le problème me vient de la variable X1 : VBA me dit incompatibilité de type quand j’exécute le code ligne par ligne. Mais quand je clic sur mon bouton qui éxécute tout le code. La, aucune erreur :/

une idée ?

encore merci pour ton aide précieuse !
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
20 avril 2018 à 16:10
Pour tracer la ligne entre les deux points
.SeriesCollection(4).Border.LineStyle=xlContinous
et pour la colorier en rouge
.SeriesCollection(4).Border..ColorIndex = 3
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 20 avril 2018 à 16:38
Avec un nuage de points, je ne vois pas.
Par contre on peut colorier les points de chaque région d'une couleur différente
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
20 avril 2018 à 17:01
un exemple en ce sens
https://www.cjoint.com/c/HDuo3wGu22B
0
swarmill Messages postés 10 Date d'inscription mercredi 18 avril 2018 Statut Membre Dernière intervention 22 mai 2018
23 avril 2018 à 11:16
Merci de ta proposition ça marche niquel !

tu as réglé tous mes problèmes en seulement 2 jours.

Merci beaucoup pour ton aide !
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
23 avril 2018 à 13:56
De rien

Si c'est fini, peux tu mettre le sujet à résolu (en haut à droite, la roue dentée)

Bon après midi
0