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 :

Ecrire centrer dans un rectangle autocad en VBA excel [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut Ecrire centrer dans un rectangle autocad en VBA excel
    Bonjour a tous,

    J'ai un petit souci pour vouloir écrire dans des rectangles à partir du VBA excel (version 2007) dans Autocad (version 2018)

    Le rectangle j'arrive a le faire y a pas de souci, je connais également les X et Y des 4 coins.

    Je souhaiterai écrire au centre du rectangle mais le nombre de caractère peux changer, et je ne trouve pas comment faire.

    Pour info les Points(0 à 4) sont déclarer bien avant en Double, se sont les coordonées x et y d'une polyligne qui forme le rectangle
    J'ai donc essayer avec ceci
    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
     
    'déclaration des variables
    Dim ObjTexte As AcadText
    Dim InsPoint(0 To 2) As Double
    Dim Haul_Texte As Double
    Dim Val_Texte As String
    Dim Milieu(0 To 1) As Double
     
    Milieu(0) = Points(0) + ((Points(4) - Points(0)) / 2)
    Milieu(1) = Points(3) + ((Points(1) - Points(3)) / 2)
     
    'affectation des variables
    InsPoint(0) = Milieu(0)
    InsPoint(1) = Milieu(1)
    InsPoint(2) = 0
    Haul_Texte = 60
    Val_Texte = "Cartouche"
     
    ' Création du texte
    Set ObjTexte = AcadPlan.ModelSpace.AddText(Val_Texte, InsPoint, Haul_Texte)
    ObjTexte.Rotation = 0 ' l'angle 0 (zéro) est la direction des X
     
    ObjTexte.Update
    Mais j'obtiens le début du texte et le bas du texte en point d'insertion "InsPoint"

    Nom : Ecriture non centrée.PNG
Affichages : 362
Taille : 6,5 Ko
    Comment je peux dire de reculer de x mm en fonction du nombre de caractère et de descendre de Y mm en fonction de la hauteur du texte ??
    ---------------------------------------------------------------------------------------------------
    Sinon j'ai essayer autrement avec l'envoie de commande mais il ne m'écrit pas le text automatiquement excel m'envoi sur autocad pour que je tape moi même le mot et quand je valide mon mot dans autocad, ma macro excel reprend
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AcadApp.ActiveDocument.SendCommand "TEXTMULT" & vbCr & Origin(0) & "," & Origin(1) & vbCr & "J" & vbCr & "MC" & vbCr & "H" & vbCr & "60" & vbCr & Origin(0) + 1000 & "," & Origin(1) - 100 & vbCr & "CARTOUCHE"
    les Origine(0 à 1) étant les coins de mon rectangle et le "MC" pour le centrage horizontale et verticale
    Et du coup ça fonctionne, mais je suis obliger de taper le texte a chaque fois et je voudrais l'automatiser.
    Nom : Ecriture centrée.PNG
Affichages : 337
Taille : 5,5 Ko

    Auriez vous une idée de comment je peux résoudre mon problème de texte centré automatique ??

    Merci

  2. #2
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,
    ça va être compliqué de calculer la longueur de la chaîne si la police n'est pas fixe.
    Je ne connais pas bien Autocad mais il me semble que dans ce genre d'outil la bonne approche doit être de fair une textbox environ de la largeur de rectangle avec un attribut centré.

  3. #3
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Bonjour,

    Merci d'avoir pris le temps de lire mon problème,

    Avec l'envoi de la commande "TEXTMULT" ca me fait bien un texbox de la même taille que mon rectangle et mon texte est centré , mais le problème c'est qu'Excel ne m'écrit pas le mot, je dois le faire manuellement.

    Et comme il y aura beaucoup de chose à écrire, (référence, désignation, qté etc...) j'aurai voulu l'automatiser dans Excel.

    Alors quand faisant un ".AddText" Excel m'écrit tout seul le mot, mais mon texte n'est plus centré, d'où mon problème.

    Merci pour l'aide

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    Bonjour,
    ne sachant si tu as trouvé une solution!
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Enum ConAutocad
        acBlockReference = 7
        acAlignmentMiddleCenter = 10
    End Enum
    Enum ColorAcad
        acByBlock = 0
        acYellow = 1
        acGreen = 3
        acCyan = 4
        acBlue = 5
        acMagenta = 6
        acWhite = 7
    End Enum
    Sub test()
    Dim InserCadre(1 To 5) As Double
     
     
    Dim MyAutocad As Object
    Set MyAutocad = CreateObject("Autocad.application")
    MyAutocad.Visible = True
     
     
    InserCadre(1) = 100 'Coin Bas gauche  X
    InserCadre(2) = 0   'Coin Bas gauche Y
    InserCadre(3) = 150 'Coin Haut  droite  X
    InserCadre(4) = 25  'Coin Haut droite  Y
    InserCadre(5) = 0
    CrateCadre MyAutocad.Documents(0), InserCadre, acMagenta
    Dim InsertEti(1 To 3) As Double
    InsertEti(1) = 125
    InsertEti(2) = 12.5
    CreateEtiquette MyAutocad.Documents(0), "toto", InsertEti, acCyan, acAlignmentMiddleCenter, Taille:=20
    End Sub
    Public Function CreateEtiquette(MyDocumment, txt As String, XY1, Couleur As ColorAcad, Alignment, Optional Rotation = 0, Optional Taille = 3)
        Set CreateEtiquette = MyDocumment.ModelSpace.AddText(txt, XY1,Taille)
        CreateEtiquette.Alignment = Alignment
        If Alignment <> 0 Then CreateEtiquette.TextAlignmentPoint = XY1
        CreateEtiquette.Rotation = Rotation
        CreateEtiquette.Color = Couleur
        CreateEtiquette.Application.ZoomPrevious
        CreateEtiquette.Application.ZoomAll
    End Function
    Public Function CrateCadre(My Documment, InsertPointCadre, Couleur As ColorAcad)
      Dim points(0 To 14) As Double
        points(0) = InsertPointCadre(1): points(1) = InsertPointCadre(2): points(2) = InsertPointCadre(5)
        points(3) = InsertPointCadre(3): points(4) = InsertPointCadre(2): points(5) = InsertPointCadre(5)
        points(6) = InsertPointCadre(3): points(7) = InsertPointCadre(4): points(8) = InsertPointCadre(5)
        points(9) = InsertPointCadre(1): points(10) = InsertPointCadre(4): points(11) = InsertPointCadre(5)
        points(12) = InsertPointCadre(1): points(13) = InsertPointCadre(2): points(14) = InsertPointCadre(5)
        Set CrateCadre = MyDocumment.ModelSpace.AddPolyline(points)
        CrateCadre.Color = Couleur
        CrateCadre.Application.ZoomPrevious
        CrateCadre.Application.ZoomAll
    End Function

  5. #5
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Bonjour Thumb down,

    Merci pour votre réponse, j'ai pas eu le temps, avec mon travail et la saint-valentin, d'y regarder encore.

    Je vais étudier le code pour le comprendre et reviendrais clôturer le sujet si tout fonctionne.

    Encore merci pour votre réponse

  6. #6
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Rebonjour,

    Alors j'ai tester en l'adaptant a mon code et tout fonctionne parfaitement merci.

    Je ne connaissais pas les "function" mais j'ai compris le fonctionnement et ca vas me permettre de gagner un peu de temps dans mes codes, merci beaucoup.

    Juste une petite question pour les "ENUM" c'est un peu le même principe que les déclarations public des variables ??

    En tout cas un grand merci pour le code.

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    bonjour,
    tu as remarqué que dans mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MyAutocad As Object
    Set MyAutocad = CreateObject("Autocad.application")
    je défini MyAutocad comme object ça veut dire que je n'utilise pas la référence AutoCad dans mon Projet; je n'est donc pas accès aux constantes AutoCad. donc j'ajoute un enumérateur qui simule ces constantes. les énumérateurs sont des liste de constantes pas des variable.


    si j'avais déclaré Dim MyAutocad As new Autocad.application! ça aurait oulu dire que j'aurai déclaré la référence AutoCad et je n'aurai pas besoin de faire un énumérateur car ces constantes serai accessible dans VBA!


    Notes que les fonctions CrateCadre et CreateEtiquette retourne l'objet créé que tu peux récupérer dans un variable et la placer dans l'espion!

    l'exécution Pas à pas , ligne surligné en jaune!, ce fait en appuyant plusieurs Fois sur la touche [F8]

    Nom : Sans titre.png
Affichages : 322
Taille : 340,2 Ko

  8. #8
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Bonjour,

    Merci pour l'explication de "Enum" j'ai compris le principe.

    Le mode pas à pas je m'en sert très souvent j'ai pas de souci de ce coté là, j'ai plus de problème à déclarer mes variables correctement, mais je commence a en prendre l'habitude.

    Par contre le mode espion je ne connais pas, je l'ai ouvert pour voir, mais quand je lance ma macro rien ne s'affiche dedans et je ne peux pas ecrire non plus à l'intérieur de cet espion.

    A quoi sert-il et comment peut-il m'aider ??

    Merci pour tout

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    Bonjour,
    1) tu fait un click droit sur ta variable=> ajouter à l'espion
    2) tu maintiens le click gauche sur ta variable=>déplacer coller vers la fenêtre espion

    L'espion permet de visualiser le contenu de tes variable !

    Il est possible de dire à l'espion de passer en mode arrêt lorsque la variable chenge de valeur.
    Et ainsi comprendre pourquoi tu ne trouves pas la bonne valeur lors de l'utilisation de cette variable par exemple.

    Pour ce qui te concerne tu aurais vu qu'il existait un propriété alignement à l'objet texte voir image de mon poste précédent.

  10. #10
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Merci beaucoup pour toute ces explications,

    J'ai pas tout compris sur le fait que j'aurai pu voir qu'il existait un alignement centre mais je vais utiliser le mode espion a chaque fois et je verrais par moi même ce qu'il me propose.

    J'ai tester rapidement sur une variable "double" et ça m'affiche effectivement les résultat automatique (moi qui plaçai a chaque fois ma souri sur ma variable afin de voir si le résultat était juste

    Encore une fois un grand merci pour votre aide et vos explications

  11. #11
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    Reprenons le code que tu as toi même posté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     'Création du texte
    Set ObjTexte = AcadPlan.ModelSpace.AddText(Val_Texte, InsPoint, Haul_Texte)
    Si tu avais placé ObjTexte dans l'espion tu aurais vu ses propriétés.

    Et avec l'aide de Google sur le nom de la propriété tu aurais réussi mais tu ne connaissais pas l'existence de l'espion !

  12. #12
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    J'ai repris mon ancien code pour testé et j'obtiens donc ça

    Nom : espion.PNG
Affichages : 295
Taille : 37,5 Ko

    Déjà pour être franc avec vous, le code je l'avais trouver sur le net, il ne viens pas de moi.
    Et je ne comprend toujours pas comment je peux deviner avec le mode espion qu'il existe une propriété "acAlignmentMiddleCenter", que vous m'aviez donner en début du post ??

    Votre code j'ai pu l'adapter au miens en modifiant le "mydocument" avec mon document a moi, j'ai bien compris la "function" qui en plus permet de mettre l'ordre que l'on veut pour les parametre d'écriture, mais dans l'exemple que moi j'avais récupérer sur le net, y avais pas la possibilité de rajouter un alignement quand je met ".AddText(" VBA me dit de rentrer mon texte en string, mon point d'insertion et la hauteur de texte en double

    J'aimerai bien pouvoir me débrouillé seul mais j'arrive pas a trouver des sites ou tout est expliquer clairement et je trouve des solution a droite a gauche mais certaine fois sans être capable de le comprendre ou le modifier.

    Mais avec la "function" j'espère pouvoir faire plus de chose moi même car si l'on peux mettre l'ordre que l'on veut avec plusieurs parametre, çà a l'air plus simple.

  13. #13
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    Si tu regardes la deuxième lignes de ton image tu trouves la propriété alignement et en valeur Acalinementleft.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ObjTexte.alignement=acAlignmentMiddleCenter
    ObjTexte.Color=acMagenta
    Il te suffit de chercher sur Google comment utiliser les propriétées qui t'intéresse. Layer par exemple etc.

  14. #14
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Ha ok, donc avec le mode espion tout ce qu'il y a dans la commande "valeur" sont les valeurs par défaut mais avec possibilité d'être changer si on le souhaite

    Et si j'ai bien compris je dois juste rechercher sur google la bonne orthographe pour modifier la valeur de mon objet.

  15. #15
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 587
    Par défaut
    Exactement.
    Il y des choses simples comme heigth
    Et d'autres avec de constantes commençant par AC la il faut chercher !

  16. #16
    Membre averti
    Homme Profil pro
    Menuisier Aluminium
    Inscrit en
    Mai 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Menuisier Aluminium
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2021
    Messages : 13
    Par défaut
    Bonjour Thumb down,

    Merci beaucoup pour votre aide, je passe le message en résolu.

    Merci infiniment pour toutes ces explications.

    Bonne journée et merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. dimensionner la taille d'une image dans un mail outlook via vba excel
    Par eltof dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/12/2020, 02h39
  2. Réponses: 4
    Dernier message: 05/07/2016, 14h57
  3. Ecrire un texte après une liste filtrée VBA excel
    Par Sorayadz dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/02/2014, 18h52
  4. [MFC]Ecrire du texte dans un rectangle
    Par zaz16 dans le forum MFC
    Réponses: 8
    Dernier message: 29/07/2003, 10h31
  5. Comment centrer un Texte dans un rectangle ...
    Par Djedjeridoo dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2003, 21h56

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