Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2010 dessiner avec VBA sous excel 2010

artlight

XLDnaute Nouveau
bonjour à tous
je suis passionné de moteurs 2 temps depuis ma tendre enfance
avec mon frangin on voudrait compiler une base de données de pas mal de moteurs qu'on a accumulé au cours des ans.
ce qui nous intéresse est de dessiner l’intérieur d'un cylindre du moteur 2 temps
c'est un fut dans lequel coulisse un piston qui ouvre et ferme des "lumières"
admission 'A) , échappement (E et B) , transferts (T1 > T4): que des rectangles (pour rester simple)

on fait un relevé de cotes interne puis on le transcris sur un dessin qui est un "développé" du cylindre (comme si le cylindre était déroulé à plat)

je me suis fait un petit fichier dans lequel on entre les relevés, puis une macro qui va dessiner les rectangles sur un onglet "dessin"
la macro va lire les données qui sont résultats de calculs des relevés (tableau W6 - Z19)
le développé d'un cylindre étant toujours un dessin symétrique par rapport à l'axe central (qui passe par le centre de "E"), on ne renseigne que les valeurs des lumieres à gauche de E , chaque rectangle de gauche a son jumeau à droite de E.

jusqu'ici tout va bien
je vous préviens, je suis un quiche en VBA, sans doute mon code est tout pourri... ou trop enfantin. j'ai fait avec ce que j'ai glané ci et la.
rien de transcendant
mais ça fonctionne, alors ... c'est déjà des heures de gagné plutôt que de le faire à la main avec une réglet sur une feuille volante !


je cherche à faire d'autres choses avec ce même bidule :
les rectangles doivent être d'une certaine couleur (contour et épaisseur du contour) et "transparent" en remplissage
comme sur mon onglet ; rouge pour "E" et "B" / bleu pour tous les "T" / vert pour les "A" / noir pour le développé total
2 lignes "PMH" et "PMB" (j'ai fait des rectangle sans épaisseur... je ne sais pas faire de ligne ! ) , je les voudrais en pointillés, d'une certaine épaisseur également : idem, comme sur mon onglet données. et pourquoi pars aussi d'une autre couleur

je voudrais aussi pouvoir jouer sur l’échelle globale du dessin tracé car il est tout petit !
je saurais le faire :
- sur le tableau dans l'onglet de données. mais tout est en mm (valeurs réelles), c'est dommage de changer
- j'ai vu qu'on pouvait ajouter un multiplicateur (*1 / *2 etc...) à chaque "mesure" des coordonnées du rectangle sous VBA. avec plus de 15 rectangles, c'est un peu fastidieux. le plus simple serait de se servir d'une case dans l'onglet données que VBA aille lire pour faire une échelle globale. (c'est moi qui ecrit 1, ou 2, ou 5 ou 10 .. dans cette case "echelle", suivant la taille que je veux). ça peut se faire en "global" ou faut le faire forme par forme ?


et enfin, je voudrais savoir la possibilité -ou non- d’écrire des infos sur le dessin tracé. (info qui seront à lire dans l'onglet "données" : pas encore présente)
infos qu'il faudrait écrire dans les rectangles tracés : donc un texte à positionner en fonction de la taille des formes : jamais au même endroit de la feuille, mais toujorus au même endroit de la forme

merci de votre aide précieuse
Joël
 

Pièces jointes

  • developpé cylindre 2temps.xls
    265.5 KB · Affichages: 32

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Artlight,
En PJ un essai.
J'ai un peu simplifier le code, le facteur d'échelle est la cellule I23 ( Echelle du dessin )
Pour le second point il faudrait savoir quoi écrire où, sous quelle forme. Où se trouvent les données ...
 

Pièces jointes

  • developpé cylindre 2temps.xls
    446 KB · Affichages: 28

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
En PJ un exemple de changement de couleur, de contour...
J'ai mis dans le VBA les sites de référence Microsoft pour la documentation des propriétés.
 

Pièces jointes

  • developpé cylindre 2temps(V2).xls
    768 KB · Affichages: 10

artlight

XLDnaute Nouveau
vive le fun

par contre, c'est pas très lisible !
en fait voici ce que je voulais faire :
chaque type de lumière (rectangle) a son code couleur qui lui est propre
c'est pour ca que dans mon premier code, j'ai fait des groupes de lignes : chaque groupe a son code couleur.
groupe trait noir (cadre du developpé) : (1)
groupe pointillé noir (course du piston) : (2) +(3)
groupe trait rouge (lumières d'échappement): (4) + (5) + (6)
groupe trait bleu (lumières de transferts) : (7) à (14)
groupe trait vert (lumières d'admission) : (15) + (16)

comme avec ce nouveau code tous les rectangles sont les mêmes sous VBA , ça rend la chose plus compliquée à faire comme je veux ?
ci dessous une image avec les mise en forme que je cherche à faire.


autre chose :
je me demande aussi comment faire pour que le tracé s'imprime au centre de ma feuille..
suivant le diamètre du cylindre, le développé n'a pas la même largeur et le fait que le tracé ne soit pas centré sur le quadrillage de la feuille rend l’opération longue et fastidieuse pour l'impression.

la zone d'impression sera toujours la même, figée et formatée pour une impression A4 au centre (cadre double lignes violet sur l'image)

je me disais que le plus simple serait de pouvoir gérer le point "zéro" du traçage avec 2 cases (décalage X et Y) que je peux remplir à souhait dans l'onglet (comme l’échelle)
sur l'image, j'ai mis une case rouge (A:1) qui représenterai ce décalage initial
peut être c'est pas une bonne idée .. je ne sais pas. .. ton avis ?

 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Ci joint la V4.
A chaque forme on peut associer une couleur,un contour, une épaisseur, un type de trait et une couleur de trait.
Le tout est dans votre matrice en V4:AE19.
Vous avez maintenant tout pour peaufiner.
 

Pièces jointes

  • developpé cylindre 2temps(V4).xls
    685.5 KB · Affichages: 11

artlight

XLDnaute Nouveau
je voulais te remercier car j'ai bien avancé et ton aide m'a vraiment été précieuse !

je n'ai pas réussi à rendre les rectangles transparents (aucune couleur, même pas de blanc : rien. en RVB .. je n'ai pas réussi à le faire).
il y a sans doute un moyen de le faire. en attendant et pour me simplifier la tache, j'ai enlevé l'option sur le tableau.

DU coup serait-ce aussi possible de rendre un contour transparent ? (ils sont aussi en "RVB")
Car j'ai rajouté des formes qui seront -si c'est possible- des zones de texte pour afficher des cotes sur le tracé.
ce sont à l'heure actuelle tous les rectangles avec un contour épais : j'ai fait une colonne dans le tableau qui contient le texte que je voudrais afficher dans ces "formes" (colonne AJ = 36)
sur le tracé : le texte est au milieu et centre de sa forme / tous même typo "arial" et même hauteur "8".


autre question : est-il possible d'afficher différentes formes en se servant aussi du tableau ?
pour l'instant toutes les formes sont identiques et nommées au début du code.
j'ai essayé de bidouiller, mais sans succès ...
:-(

j'ai fait une autre colonne dans le tableau a cet effet
rect = msoShapeRectangle
rect2 = msoShapeRound2SameRectangle
text = msoTextBox ? (une zone de texte)
fleche = une ligne avec une flèche à chaque extrémité (j'ai pas trouvé ... ça existe, non ? pour montrer une distance)
ligne = msoLine ? (juste une simple ligne)


bon déconfinement !
Joël
 

Pièces jointes

  • developpé cylindre 2temps(V5).xls
    264 KB · Affichages: 8

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour ArtLight,
Pour le premier point :
VB:
Sub Transparent()
    With Feuil4.Shapes.AddShape(msoShapeRectangle, _
        100, 200, 200, 200)
        .Fill.Visible = msoFalse          ' Fond tranparent
        .Line.Visible = msoFalse          ' Traits transparent
    End With
End Sub
Pour le second point je regarde.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Pour le texte dans les shapes :
Code:
Sub TexteCouleurDansShape()
    With Feuil4.Shapes.AddShape(msoShapeRectangle, _
        100, 200, 200, 200)
        .Name = "EssaiTexte"
        .DrawingObject.Text = "Texte au sein du shape"
    End With
    ActiveSheet.Shapes("EssaiTexte").Select
    With Selection.Font
        .Size = 32              'Taille police
        .Name = "Calibri"       'Type police
        .Bold = True            'Gras
        .Color = RGB(255, 0, 0) 'Couleur
    End With
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Pour le second point, vous vous embarquez dans quelque chose de compliqué.
Chaque shape a ses propres paramètres. Par ex le rectangle en a 4, la flèche 4 plus les paramètres de mise en forme. par ex :
Code:
Sub Fleche()
Set myDocument = ActiveSheet
With myDocument.Shapes.AddLine(100, 100, 200, 300).Line
    .DashStyle = msoLineDashDotDot
    .ForeColor.RGB = RGB(50, 0, 128)
    .BeginArrowheadLength = msoArrowheadShort
    .BeginArrowheadStyle = msoArrowheadOval
    .BeginArrowheadWidth = msoArrowheadNarrow
    .EndArrowheadLength = msoArrowheadLong
    .EndArrowheadStyle = msoArrowheadTriangle
    .EndArrowheadWidth = msoArrowheadWide
End With
End Sub
Le cercle 4 aussi, mais c'est le rayon qui est spécifié :
Code:
Sub LeCercle()
Dim Rayon As Single
Rayon = 50
ActiveSheet.Shapes.AddShape msoShapeOval, [C3].Left, [C3].Top, Rayon, Rayon
End Sub
Ça veut dire que pour chaque forme vous devrez développer une macro spécifique.
 

artlight

XLDnaute Nouveau
c'est encore moi !
je te re-préviens je suis une vrai quiche en VBA

je creuse depuis plusieurs heures, impossible de finaliser un truc qui doit être simple

j'ai trouvé comment changer de forme à souhait, comment mettre un texte, qui va lire dans mon tableau, gérer la taille de police, le style, etc .. je suis content (je me contente de pas grand chose)
en fait, j'ai juste fait des groupe de "i" (les rectangles, les rectangle arrondi, les texbox, etc ..)
à chaque groupe ses lignes de code qui leur sont propre.
du coup j'ai simplifié le "tableau" et mis les paramètres direct dans les codes des groupes

voici mon bout de code pour l'affichage des mesures d'angles,
impossible de :
- dire au texte de s'aligner au milieu et au centre de sa forme
- dire au texte de respecter le format d’où il est issu (1 chiffre après la virgule + suivi de l'unité "°" -dégrées-). ou s'il le faut lui dire en code quel format prendre
- dire au cadre de ce texte d’être transparent
- dire à ce textbox d'avoir un fond blanc et de se mettre au premier plan

toutes les textbox de cette section auront le même format (milieu centre+ unité degré + cadre transparent + fond blanc)




For i = 21 To 33 ' MESURES ANGLES
With Feuil3.Shapes.AddTextbox(msoShapeRectangle, _
Echelle * Cells(i, 27), Echelle * Cells(i, 28), Echelle * Cells(i, 29), Echelle * Cells(i, 30)) _
.TextFrame.Characters
.Text = Cells(i, 36)
With .Font
.Name = "Arial"
.FontStyle = "Normal"
.Size = 16
.ColorIndex = Cells(i, 35)
End With
End With
Next i



j'ai enregistré une macro pour en extraire des choses qui étaient en rapport, tenté de les placer a tous les endroits possibles / rien n'y fait : je suis nul.
je peux gérer ce que je veux du "font" dans le cadre, mais impossible de gérer "le cadre" et sa mise en forme.

aurais-tu une idée brillante qui pourrait m'aider ?
merci
 

Discussions similaires

Réponses
10
Affichages
333
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…