[résolu] sendkeys style de trait type de lettrine à deux dimensions

Misange

XLDnaute Barbatruc
Hello,
Le VBA d'excel 2010 est encore incomplet pour les graphiques et en particulier microsoft a oublié qu'on pouvait avoir besoin de faire en VBA des traits larges et à bouts plats (je m'en sers pour simuler des boites de type boxplot ou graphique boursier mais avec un axe des X proportionnel aux données).
J'ai cherché un peu partout et je n'ai trouvé comme solution une proposition de Andy Pope avec des sendkeys. Pb elle ne marche pas sur un excel en Français et je n'arrive pas à trouver la bonne combinaison d'instructions.

Manuellement il faut après avoir sélectionné la série à transformer :
- ouvrir la boite de dialogue formatage
- sélectionner style de trait
- dans la partie droite de cette fenêtre sélectionner type de trait "lettrine à deux dimensions" (super intuitif non comme traduction : en anglais c'est flat cap c'est quand même plus simple !)

Si quelqu'un peut m'aider à trouver cette combinaison de touche il aura toute ma reconnaissance.
 

Pièces jointes

  • fc-nuagedeboites.xlsm
    58.3 KB · Affichages: 128
Dernière édition:

PMO2

XLDnaute Accro
Re : sendkeys style de trait type de lettrine à deux dimensions

Bonjour,

Essayez de remplacer la portion de code

Code:
    With ActiveChart.SeriesCollection(2).Format.Line
            .ForeColor.ObjectThemeColor = msoThemeColorText1
            .Weight = 15
    End With

par

Code:
    With ActiveChart.SeriesCollection(2).Format.Line
            .ForeColor.ObjectThemeColor = msoThemeColorText1
            .Weight = 15
            .DashStyle = msoLineSquareDot
    End With

Cordialement.
 

PMO2

XLDnaute Accro
Re : sendkeys style de trait type de lettrine à deux dimensions

Salut Misange,

Ta question m'a intéressé car c'est le genre de challenge auquel j'aime être confronté. Je n'ai pas trouvé l'info mais j'ai découvert la solution. Voilà la démarche qui m'y a amenée :

J'ai d'abord recherché quel objet Excel pouvait correspondre à "ActiveChart.SeriesCollection(2).Format.Line" et l'ai trouvé dans l'Explorateur d'objets. Il s'agit de "LineFormat".
J'ai fait des essais avec les propriétés de l'objet au moyen du code suivant en ayant au préalable sélectionner le graphique concerné

Code:
Sub aa()
Dim LF As LineFormat
Dim i&
Set LF = ActiveChart.SeriesCollection(2).Format.Line
With LF
  .ForeColor.RGB = vbRed
  .Weight = 15
  
'''--- Pour visualiser le pas à pas de DashStyle ---
''  On Error Resume Next
''  For i& = 1 To 12
''    .DashStyle = i&
''Stop
''  Next i&
''  Err.Clear
''  On Error GoTo 0
'''--------------------------------------------------
 
  .DashStyle = msoLineSquareDot

'--- Les autres propriétés ---
  .Transparency = 0.4
  .Pattern = msoPatternDarkDownwardDiagonal
  .BackColor.RGB = vbBlue
  .Style = msoLineThickBetweenThin
      ''' etc
End With
End Sub

Par le biais de cette petite procédure, tu peux tester l'effet des autres propriétés de l'objet.

Je suis fort aise de ton rappel du MPFE et de nos retrouvailles.
A plus pour de nouvelles aventures.
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Re hello
J'apprécie beaucoup ce type d'approche bien structurée :)
mais je reste toujours surprise de comment tu as trouvé Dashstyle :)
quand tu lis ça
Renvoie ou définit le style tiret pour la ligne spécifiée. Il peut s’agir de l’une des constantes de l’énumération MsoLineDashStyle. Type de données Long en lecture-écriture.
et
msoLineSquareDot Line is made up of square dots.
il faut comprendre ce qu'est une ligne faite de points carrés !
en tous cas merci et je retourne à la suite de mon "nuagedeboites"
et au plaisir, ici ou ailleurs
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

:( ben non en fait ça va pas du tout...
msolinedashstyle crée une ligne en pointillés. Et du coup mes "barres" ne sont hautes que de la moitié de ce qu'elles devraient. J'ai mis un peu de temps à m'en rendre compte. Bon ben je repars en campagne pour essayer de trouver... Si tu as d'autres idées Patrick (ou d'autres ...) je prends !
 

PMO2

XLDnaute Accro
Re : sendkeys style de trait type de lettrine à deux dimensions

Bonjour à tous,

Cela fonctionne très bien chez moi et on obtient le résultat attendu.
Cependant il faut faire attention à appliquer le DashStyle sur la série adéquate.
En l'occurence sur la série 2 pour ce cas (et non pas la série 1 OU la série 1 et la série 2).


Je joins un classeur exemple qui traite les 3 cas
- Série 2
- Série 1
- Série 1 et série 2
Il suffit de lancer la macro "AddChartObject_pmo" pour visualiser.

Cordialement.
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Re hello,
En fait c'est moi qui me suis trompée dans mon fichier d'exemple ...
Reprends le et sur le graphique de gauche sélectionne la série 2 et dans le formatage de la droite, demande style de trait et lettrine : à deux dimensions.
Tu verras qu'en faisant cela la taille de "boîte" ainsi obtenue est très différente de celle qu'on obtient avec la propriété dashline qui en mange une partie (même si effectivement elle remets les bouts au carré).
:(

J'ai passé une grande partie de la soirée à essayer de faire fonctionner le send keys de Andy pope mais en vain.
LA combinaison de touche est pourtant la bonne
bas bas bas bas
tab tab tab tab
à (en fait je suis obligée de faire E puis à, à seul n'ouvrant pas le menu déroulant...)
enter enter

impossible de la faire fonctionner via une macro (je ne suis vraiment pas une spé des sendkeys que j'évite en général comme la peste sachant que si ça marche sur un poste ça ne garantit jamais que ça marche sur un autre mais là j'ai vraiment un grand besoin de cet outil).

Si tu as une solution ...
Et merci de suivre !
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Bonjour Misange, Patrick

Il est vrai que faire des box plots avec Excel, c'est pas simple :eek:.

J'avais trouvé, il y a peu, cette macro sous forme de .xla :) (mais tu connaît surement :eek:) .

Revue MODULAD Excel'Ense, statistique avec Excel

Excuse moi Michel, j'avais loupé ton message.
Je ne connaissais pas (j'utilise une macro que j'avais faite) et c'est très bien fichu mais ça ne répond pas à mon besoin actuel qui est d'avoir les boites réparties sur l'axe des X en fonction de la valeur de X. Une sorte de mélange entre un nuage de points et les box plot en somme.
 

MJ13

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Bonjour Misange, Patrick

Excuse moi Michel, j'avais loupé ton message.

C'est pas grave, je me doutais bien :eek:.

Mais comme je l'avais recherché un certain temps pour trouver à faire des box plots, j'ai mis le lien (cela pourra me servir si j'en ai besoin à nouveau). Pour ton problème, je n'ai pas trop le temps, mais c'est vrai que c'est galère à faire.

Et quand on voit les données qu'il faut générer pour avoir un box plot sympa, je me dit que je passerai plutôt par une macro toute faite comme le .xla.
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Oui ça prend vraiment beaucoup de temps à faire manuellement et surtout il y a un risque d'erreur. D'autant que quand on utilise ce type de représentation on y a souvent recours de façon régulière. Mais si en plus tu dois mettre les deux axes en log je te dis pas la super galère !

Le xla en tous cas est sympa. Au moins quand il prend des bouts de codes ailleurs (chez John Walkenbach en l'occurrence), il cite ses sources ce que j'apprécie ++. Et le code est entièrement accessible ce qui peut donner une bonne base pour refaire un truc adapté à une problématique différente. Je regarderai surement son code de plus près. Merci pour le lien.
 

PMO2

XLDnaute Accro
Re : sendkeys style de trait type de lettrine à deux dimensions

Salut Misange et MJ13,

Effectivement, ce que je proposais ne répond plus à la demande puisqu'elle avait été mal formulée.

Je reprends l'idée d'Andy Pope mais je propose d'utiliser une autre méthode que SendKeys qui semble obsolète pour les versions 2007 et plus. J'utilise donc l'API keybd_event qui fonctionne très bien chez moi mais en sera-t-il de même chez toi ?
Il faudra faire attention aux 2 points suivants :
1) ne pas lancer la macro à partir du VBE à cause des simulations de touches
2) j'ai remplacé Quartile_Inc (qui n'existe pas sur ma version 2007) par Quartile

Il n'y a plus qu'à lancer la macro AddChartObject_PMO et voir si tu obtiens le résultat espéré.

A plus.
 

Misange

XLDnaute Barbatruc
Re : sendkeys style de trait type de lettrine à deux dimensions

Merci de tes efforts, on (très singulier le on car là c'est toi !) va finir par y arriver j'espère mais chez moi, même en lançant la macro depuis la feuille avec un bouton, il ne se passe... rien. Le graph est créé mais les bouts restent ronds et ne deviennent pas carrés...
Cela vient peut être du fait que j'ai 2010. A priori c'est pourtant la même séquence de touches.
Je continue à chercher de mon côté.
 

PMO2

XLDnaute Accro
Re : sendkeys style de trait type de lettrine à deux dimensions

OK.
On va essayer de visualiser pas à pas si la boîte de dialogue apparaît et que chaque simulation de touche s'effectue correctement. Remplace la portion de code par celle ci-dessous
Code:
'//////// Modif pmo ////////
Dim i&
ActiveChart.SeriesCollection(2).Select
keybd_event VK_CONTROL, 0, 0, 0
keybd_event KEY_1, 0, 0, 0
keybd_event KEY_1, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0

Exit Sub

For i& = 1 To 4
  keybd_event VK_DOWN, 0, 0, 0
  keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0
Next i&

Exit Sub

For i& = 1 To 4
  keybd_event VK_TAB, 0, 0, 0
  keybd_event VK_TAB, 0, KEYEVENTF_KEYUP, 0
Next i&

Exit Sub

For i& = 1 To 2
  keybd_event VK_DOWN, 0, 0, 0
  keybd_event VK_DOWN, 0, KEYEVENTF_KEYUP, 0
Next i&

Exit Sub

keybd_event VK_RETURN, 0, 0, 0
keybd_event VK_RETURN, 0, KEYEVENTF_KEYUP, 0

Exit Sub

keybd_event VK_ESCAPE, 0, 0, 0
keybd_event VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0
'//////////////////////////
Si le premier envoi de touche est opérant alors flague ou supprime le Exit Sub puis relance la macro.
Dis moi où cela s'arrête.

J'ai l'intuition que la procédure s'effectue trop vite et que les envois de touche n'ont pas le temps d'être pris en compte. Si c'est de cela qu'il s'agit on pourra utiliser l'API Sleep.
Tiens moi au courant.
 

Statistiques des forums

Discussions
311 720
Messages
2 081 886
Membres
101 830
dernier inscrit
sonia poulaert