IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Dessiner via VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut Dessiner via VBA
    Bonjour à tous!

    Je débute en VBA et je cherche depuis quelques heures déjà s'il est possible de tracer un dessin avec du VBA.

    Je m'explique:
    Je souhaite qu'une partie de mon programme puisse tracer des rectangles (avec des choses dedans mais partons du rectangle pour rester le plus simple possible). L'utilisateur devra renseigner des valeurs telles que par exemple la largeur et la hauteur du rectangle. et je souhaite qu'à partir de ce lots d'informations, le rectangle se trace automatiquement sur ma feuille Excel..

    Est-ce possible??
    merci d'avance pour vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    oui c'est possible

    Un peu de lecture sur ce qui peut être fait avec l'excellent article d'Arkham46
    http://arkham46.developpez.com/artic...e/dessincarte/

    Autres pistes évoquées dans d'autres discussions :
    http://www.developpez.net/forums/d62...ner-excel-vba/
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Les formes graphiques en VBA, ce sont les "Shapes", des propriétés de Worksheet.

    Pour ajouter un rectangle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("MaFeuille").Shapes.AddShape msoShapeRectangle, 50, 50, 100, 200
    Pour tracer autre chose, remplacer msoShapeRectangle par l'une des constantes de MsoAutoShapeType

    Pour changer ses propriétés, voir les membres de l'objet Shape dans l'aide intégrée VBA d'Excel.

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    merci à vous!!

    menhir, en fait je veux pouvoir que pour quelque soit b et h le tracé soit instantané .
    je vais d'abord consulter les liens de jpcheck

    Merci encore

    jai une petite question..
    Jai en fait créer une Macro dans un premier temps et tracer le rectangle..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub MaPremiereMacro()
    '
    ' MaPremiereMacro Macro
    '
     
    '
        Range("G15").Select
        ActiveSheet.Shapes.AddShape(msoShapeRectangle, 397, 191, 171, 122).Select
    End Sub
    A quoi correspondent : 397, 191, 171, 122??

    Jai compris que les deux derniers nombres dans la parenthèse correspondent à la largeur et à la hauteur

    En fait dans la feuille excel l'utilisateur renseigne un certains nombre de données dont b et h correspondant respectivement à la largeur et à la hauteur.
    Si je prends b=12 et h=7 et que le 12 et le 7 correspondent par exemple aux cellules D3 et D4, j'ai renommé D3 en b et D4 en h
    Du coup dans ma Macro j'ai placé b et h dans la parenthèse mais cela ne fonctionne pas. Pourtant en remplaçant D3 et D4 j'ai déclaré mes variables non?

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    Bonjour à tous!
    Après plusieurs manipulations j'ai enfin pu obtenir une partie de ce que je voulais avec ce code (je n'ai mis ici que les sections circulaires mais le code est le meme pour les sections rectangulaires)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Sub MaTroisiemeMacro()
    '
    ' MaTroisiemeMacro Macro
    '
    Dim d As Single
    d = InputBox("Entrer le diametre")
    '
        ActiveSheet.Shapes.AddShape(msoShapeOval, 280.1724409449, 146.5517322835, d, _
            d).Select
        With Selection.ShapeRange.Line
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorText1
            .ForeColor.TintAndShade = 0
            .ForeColor.Brightness = 0
            .Transparency = 0
        End With
        With Selection.ShapeRange.Fill
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorBackground1
            .ForeColor.TintAndShade = 0
            .ForeColor.Brightness = -0.150000006
            .Transparency = 0
            .Solid
        End With
        With Selection.ShapeRange.Fill
            .Visible = msoTrue
            .ForeColor.ObjectThemeColor = msoThemeColorBackground1
            .ForeColor.TintAndShade = 0
            .ForeColor.Brightness = -0.150000006
            .BackColor.ObjectThemeColor = msoThemeColorBackground1
            .BackColor.TintAndShade = 0
            .BackColor.Brightness = 0
            .Patterned msoPattern5Percent
        End With
        With Selection.ShapeRange.Fill
            .Visible = msoTrue
            .Patterned msoPatternLargeConfetti
        End With
        With Selection.ShapeRange.Fill
            .Visible = msoTrue
            .Patterned msoPatternLargeConfetti
        End With
    End Sub
    J'ai également intégré 2 boutons (1 pour la section rectangulaire, l'autre pour la section circulaire) qiui me permettent le tracé de chacune des sections.

    Seulement voilà :

    1. je souhaite récupérer la variable d dans une case Excel car l'utilisateur la rentre par l'intermédiaire d'une fenêtre qui s'affiche dans Excel. j'ai essayé plusieurs code mais je n'ai pas réussi, ça me modifie le tracé de la section.
    2.Je souhaite tracer une seule section: lorsque j'appuie une seconde fois sur un bouton pour modifier les dimensions de la sections, il m'en retrace une autre par dessus la précédente
    3.Je souhaite pouvoir ajouter de petits cercles dans les sections rectangulaires et circulaires. en effet la finalité de cette partie du programme consiste à tracer des sections en béton armé donc les petits cercles correspondent aux armatures. ces armatures dépendent à leur tour de plusieurs données d'entrée: nombres de lits d'armatures, nombre de barres par lits, enrobage et diamètre de barre

    J'ai énormément perdu de temps hier pour régler ces 3 points, merci d'avance à ceux qui m'aideront

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par eliamat Voir le message
    A quoi correspondent : 397, 191, 171, 122??
    Comme je te l'ai déjà conseillé dans mon précédent message, lis l'aide intégrée à VBA d'Excel (le bouton bleu en forme de point d'intérogation dans l'éditeur VBA) en mettant "AddShape" dans la case "Recherche".
    Ensuite, tu mettras "Shape" dans cette même case et tu iras voir tous les membres de cet objet pour en avoir les possibilités.

    Mais, étant donné tes autres questions, je pense que tu devrais commencer par quelques tutoriels de base de VBA. http://excel.developpez.com/cours/
    Avant de penser à faire des looping, il faut apprendre le vol à l'horizontale.

    Citation Envoyé par eliamat Voir le message
    1. je souhaite récupérer la variable d dans une case Excel
    Voir ma remarque sur les tutoriels de base.
    Récupérer la valeur d'une cellule, c'est la propriété Value de l'objet Cells ou de l'objet Range.

    2.Je souhaite tracer une seule section: lorsque j'appuie une seconde fois sur un bouton pour modifier les dimensions de la sections, il m'en retrace une autre par dessus la précédente
    Ce qui est normal puisque c'est ce que tu demandes dans ton code : AddShape sert à ajouter une nouvelle forme.
    Si tu veux pouvoir créer ou modifier, il faut soit avoir deux boutons différents qui seront liés à des macros différentes, soit rechercher en début de macro s'il existe déjà une forme et n'en créer une que s'il n'y en a pas déjà.

    3.Je souhaite pouvoir ajouter de petits cercles dans les sections rectangulaires et circulaires. en effet la finalité de cette partie du programme consiste à tracer des sections en béton armé donc les petits cercles correspondent aux armatures. ces armatures dépendent à leur tour de plusieurs données d'entrée: nombres de lits d'armatures, nombre de barres par lits, enrobage et diamètre de barre
    Je te conseille d'abandonner cette idée pour plusieurs raisons :

    On ne peut pas mettre une forme DANS une autre. On peut éventuellement la mettre dessus puis la grouper mais pas la mettre "dedans".

    Excel ne peut pas intégrer de motif à une forme. Il peut intégrer une couleur ou un dégradé. Ce qui se rapproche le plus de ce que tu veux faire serait d'y intégrer une image mais ce n'est pas simple et je ne suis pas sur que ça correspondrait à ce que tu souhaites.

    Excel n'est pas une CAO. Pour faire ce que tu décris, il faut passer par un logiciel de CAO. Certains, comme AutoCAD, incluent la possibilité de faire des macros en VBA ou VBNet et il est donc possible de créer des applications qui utilisent à la fois Excel et la CAO (je l'ai déjà fait).

    Mais, surtout, j'ai l'impression que tu mets la charrue avant les bœufs et que tu commences à taper du code avant d'avoir clairement réfléchi à ta conception. C'est une erreurs qui se paye généralement en dizaines d'heures perdues.

Discussions similaires

  1. Réponses: 69
    Dernier message: 15/06/2006, 11h42
  2. comment modifier le nom d'une colonne via VBA?
    Par Invité dans le forum Access
    Réponses: 6
    Dernier message: 24/11/2005, 15h36
  3. Réponses: 2
    Dernier message: 24/11/2005, 11h46
  4. Faire des modifs sur une sheet excel Read Only via VBA
    Par beegees dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/11/2005, 18h02
  5. Manipulation du carnet d'adresse outlook via VBA Excel?
    Par Dragon Tours dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/11/2005, 12h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo