p
u
b
l
i
c
i
t
é
publicité

Discussion: Autocad 2010 et vba

  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut Autocad 2010 et vba

    Bonjour tous le monde.

    Je ne sais pas si c'est le bon endroit pour poser ma question.
    je cherche à automatisé une commande qui je pense est hyper simple à faire.
    Sur Autocad 2010 et vba:

    Je souhaite faire par exemple
    3 lignes de 10 colonnes de rectangle 1000mm x 1700mm avec comme équart 200 sur l'axe X et 100 sur Y.

    Par la suite je voudrais demander par le biais d'un inputbox par exemple le nombre de lignes et de colonne.

    Je voulais me servir de ce post.

    mais comment faire un "réseau" répéter ce rectangle avec un certain nombre de ligne et de colonne ?

    merci à vous

  2. #2
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

    Par défaut

    Bonjour,

    Pour piloter Autocad à partir d'Excel, tu peux tester le code ci-dessous
    N'ayant pas Autocad sous la main le code est fait à l'aveugle...
    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
    Sub Envoi_Cmd()
    'Nécessite d'activer la référence Autocad xxxx type library
    Dim L As Single, H As Single
    Dim X As Single, Y As Single
    Dim ptX As Single, ptY As Single
    Dim posX As Single, posY As Single
    Dim nbLig As Integer, nbCol As Integer
    Dim repLig As Integer, repCol As Integer
    Dim NomDWG As String
     
    'paramètres à définir
    NomDWG = "NomPlan.dwg" '<-- nom du plan dwg
    L = 1000 '<-- Largeur du rectangle
    H = 1700 '<-- Hauteur du rectangle
    X = 200 '<-- écart axe X
    Y = 100 '<-- écart axe Y
    ptX = 0 '<-- point de départ de l'ensemble axe X
    ptY = 0 '<-- point de départ de l'ensemble axe Y
     
    'choix du nombre de ligne via InputBox
    nbLig = Application.InputBox("Veuillez introduire le nombre de lignes", "NOMBRE DE LIGNES", , , , , , 1)
    If nbLig <= 0 Then Exit Sub '<-- on quitte la procédure si le nombre de lignes est inférieur ou égal à 0
     
    'choix du nombre de colonne via InputBox
    nbCol = Application.InputBox("Veuillez introduire le nombre de colonnes", "NOMBRE DE COLONNES", , , , , , 1)
    If nbCol <= 0 Then Exit Sub '<-- on quitte la procédure si le nombre de colonnes est inférieur ou égal à 0
     
    posX = ptX '<-- position sur l'axe X du premier rectangle
    posY = ptY '<-- position sur l'axe Y du premier rectangle
     
    For repLig = 1 To nbLig
        For repCol = 1 To nbCol
            'le fichier Autocad doit être ouvert
            AutoCAD.Documents(NomDWG).SendCommand "_rectang" & vbCr & posX & "," & posY & vbCr & L & "," & H & vbCr
            posX = posX + L + X
        Next repCol
        posX = ptX
        posY = posY + H + Y
    Next repLig
     
    End Sub
    Je suppose que tu sais que sur Autocad il y a une fonction toute faite pour réaliser la copie d'un objet sur X colonnes et Y lignes ?
    LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut

    Merci beaucoup.

    Oui oui je sais cela s'appelle un réseau mais je ne sais pas du tout le piloter via Autocad en vba.

    Et c'est possible de fonctionner cette macro sans excel ? Juste par Autocad. ?
    Le topic a été déplacer dans ce forum car il pensais avoir plus de réponse ici.
    Je le remercie car il ne s'est pas trompé :-).

    Merci a toi :-)

  4. #4
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut

    est-il possible de donner en nom de document Autocad Active drawing ? ou alors tout simplement de relever le nom du document actif ?

    J'ai un souci sinon quand l’input box s'ouvre impossible d'écrire dedans.
    Sa se dé-sélectionne faut cliquer plusieurs fois et appuyer sur la touche numérique pour pouvoir écrire dedans. Bizarre...

    Merci à toi fring

  5. #5
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

    Par défaut

    Directement via VBA Autocad, tu peux tester 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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Option Base 1 '<-- permet de commencer les variables tableaux à 1 au lieu de 0
     
    Sub Trace_Rectangle()
    '*** déclaration des variables ***
    Dim docAcad As AcadDocument
    Dim objPoly As AcadLWPolyline
    Dim Pts(1 To 10) As Double
    Dim RetVal As Variant
    Dim L As Single, H As Single
    Dim X As Single, Y As Single
    Dim ptX As Single, ptY As Single
    Dim nbLig As Long, nbCol As Long
     
    '*** définition des paramètres ***
    L = 1000 '<-- Largeur du rectangle
    H = 1700 '<-- Hauteur du rectangle
    X = 200 '<-- écart axe X
    Y = 100 '<-- écart axe Y
    ptX = 0 '<-- point de départ de l'ensemble axe X
    ptY = 0 '<-- point de départ de l'ensemble axe Y
    nbLig = 3 '<-- nombre de lignes
    nbCol = 10 '<-- nombre de colonnes
     
    '*** définition du plan dwg ***
    Set docAcad = AutoCAD.ActiveDocument 'plan actif
     
    '*** traçage du premier rectangle
    'coordonnées X:Y du point de départ
    Pts(1) = ptX: Pts(2) = ptY
    'coordonnées X:Y du 2ème point formant la 1ère ligne verticale
    Pts(3) = ptX: Pts(4) = ptY + H
    'coordonnées X:Y du 3ème point formant la 2ème ligne horizontale
    Pts(5) = ptX + L: Pts(6) = ptY + H
    'coordonnées X:Y du 4ème point formant la 3ème ligne verticale
    Pts(7) = ptX + L: Pts(8) = ptY
    'coordonnées X:Y du 5ème point formant la 4ème ligne horizontale
    Pts(9) = 0: Pts(10) = 0
    'traçage du rectangle
    Set objPoly = docAcad.ModelSpace.AddLightWeightPolyline(Pts)
     
    'création du réseau de rectangles
    RetVal = objPoly.ArrayRectangular(nbLig, nbCol, 1, Y + H, X + L, 1)
     
    End Sub
    Concernant l'InputBox j'ai le même problème, elle ne semble pas fonctionner correctement

    Une solution moins rigide serait de créer un UserForm avec plusieurs TextBox dans lesquelles tu pourras introduire toutes les valeurs nécessaires (largeur rectangle, hauteur rectangle, positions de départ, nombre de lignes et de colonnes, décalages, etc...)

    Mais je me répète, c'est un peu réinventer la roue et je ne vois pas trop l'intérêt de réaliser cela vu que la fonction existe en base dans Autocad
    LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  6. #6
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

    Par défaut

    Citation Envoyé par toniob44 Voir le message
    J'ai un souci sinon quand l’input box s'ouvre impossible d'écrire dedans.
    Je viens de constater que se problème se produit lorsqu'on lance la macro via l'éditeur VBA. En la lançant directement d'Autocad (Alt+F8) ça fonctionne.

    Ci-dessous le code adapté avec des InputBox
    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
    Option Base 1 '<-- permet de commencer les variables tableaux à 1 au lieu de 0
     
    Sub Trace_Rectangle()
    '*** déclaration des variables ***
    Dim docAcad As AcadDocument
    Dim objPoly As AcadLWPolyline
    Dim Pts(1 To 10) As Double
    Dim RetVal As Variant
    Dim L As Single, H As Single
    Dim X As Single, Y As Single
    Dim ptX As Single, ptY As Single
    Dim nbLig As Long, nbCol As Long
     
    '*** définition des paramètres ***
    L = 1000 '<-- Largeur du rectangle
    H = 1700 '<-- Hauteur du rectangle
    X = 200 '<-- écart axe X
    Y = 100 '<-- écart axe Y
    ptX = 0 '<-- point de départ de l'ensemble axe X
    ptY = 0 '<-- point de départ de l'ensemble axe Y
    nbLig = Val(InputBox("Veuillez définir le nombre de lignes", "NOMBRE DE LIGNES")) '<-- nombre de lignes
    nbCol = Val(InputBox("Veuillez définir le nombre de colonnes", "NOMBRE DE COLONNES")) '<-- nombre de colonnes
     
    '*** définition du plan dwg ***
    Set docAcad = AutoCAD.ActiveDocument 'plan actif
     
    '*** traçage du premier rectangle
    'coordonnées X:Y du point de départ
    Pts(1) = ptX: Pts(2) = ptY
    'coordonnées X:Y du 2ème point formant la 1ère ligne verticale
    Pts(3) = ptX: Pts(4) = ptY + H
    'coordonnées X:Y du 3ème point formant la 2ème ligne horizontale
    Pts(5) = ptX + L: Pts(6) = ptY + H
    'coordonnées X:Y du 4ème point formant la 3ème ligne verticale
    Pts(7) = ptX + L: Pts(8) = ptY
    'coordonnées X:Y du 5ème point formant la 4ème ligne horizontale
    Pts(9) = 0: Pts(10) = 0
    'traçage du rectangle
    Set objPoly = docAcad.ModelSpace.AddLightWeightPolyline(Pts)
     
    'création du réseau de rectangles
    RetVal = objPoly.ArrayRectangular(nbLig, nbCol, 1, Y + H, X + L, 1)
     
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  7. #7
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut

    Merci beaucoup.

    Est-il possible de demander à l'utilisateur la position de départ ?
    En cliquant par exemple dans l'espace objet ?

    Merci de ton aide en tout cas

  8. #8
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

    Par défaut

    Oui c'est possible, teste 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
    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
    Option Base 1 '<-- permet de commencer les variables tableaux à 1 au lieu de 0
     
    Sub Trace_Rectangle()
    '*** déclaration des variables ***
    Dim docAcad As AcadDocument
    Dim objPoly As AcadLWPolyline
    Dim Pts(1 To 10) As Double
    Dim RetVal As Variant, RetPos As Variant
    Dim L As Single, H As Single
    Dim X As Single, Y As Single
    Dim ptX As Single, ptY As Single
    Dim nbLig As Long, nbCol As Long
     
    '*** définition des paramètres ***
    L = 1000 '<-- Largeur du rectangle
    H = 1700 '<-- Hauteur du rectangle
    X = 200 '<-- écart axe X
    Y = 100 '<-- écart axe Y
    nbLig = Val(InputBox("Veuillez définir le nombre de lignes", "NOMBRE DE LIGNES")) '<-- nombre de lignes
    nbCol = Val(InputBox("Veuillez définir le nombre de colonnes", "NOMBRE DE COLONNES")) '<-- nombre de colonnes
     
    '*** définition du plan dwg ***
    Set docAcad = AutoCAD.ActiveDocument 'plan actif
     
    '*** définition du point de départ
    MsgBox "Veuillez sélectionner un point de départ"
    RetPos = docAcad.Utility.GetPoint
    ptX = RetPos(0)
    ptY = RetPos(1)
     
    '*** traçage du premier rectangle
    'coordonnées X:Y du point de départ
    Pts(1) = ptX: Pts(2) = ptY
    'coordonnées X:Y du 2ème point formant la 1ère ligne verticale
    Pts(3) = ptX: Pts(4) = ptY + H
    'coordonnées X:Y du 3ème point formant la 2ème ligne horizontale
    Pts(5) = ptX + L: Pts(6) = ptY + H
    'coordonnées X:Y du 4ème point formant la 3ème ligne verticale
    Pts(7) = ptX + L: Pts(8) = ptY
    'coordonnées X:Y du 5ème point formant la 4ème ligne horizontale
    Pts(9) = ptX: Pts(10) = ptY
    'traçage du rectangle
    Set objPoly = docAcad.ModelSpace.AddLightWeightPolyline(Pts)
     
    'création du réseau de rectangles
    RetVal = objPoly.ArrayRectangular(nbLig, nbCol, 1, Y + H, X + L, 1)
     
    End Sub
    LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  9. #9
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut

    Niquel
    Merci beaucoup Fring !

    Une dernière question est-il possible de garder la macro tout le temps dans autocad ? un peu comme avec excel avec le normal.dot. car il me demande à chaque fois d'enregistrer la macro en .dvb à chaque fois ?

    Merci à toi.

  10. #10
    Expert Confirmé Sénior
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : février 2008
    Messages : 3 900
    Points : 7 765
    Points
    7 765

    Par défaut

    Tu enregistres la macro une seule fois au format dvb et ensuite à chaque fois que tu en as besoin dans un nouveau plan, tu fais glisser le fichier dvb dans la fenêtre du plan autocad
    LES FAQ OFFICE - LES COURS OFFICE - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

    Hormis pour me demander mon numéro de compte afin d'y effectuer un versement, évitez de m'envoyer vos questions par MP, merci d'avance
    En posant une question on risque d'avoir l'air idiot cinq minutes. En n'en posant pas, on risque de le rester toute sa vie (proverbe chinois)

  11. #11
    Candidat au titre de Membre du Club
    Inscrit en
    novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 112
    Points : 11
    Points
    11

    Par défaut

    Citation Envoyé par fring Voir le message
    Tu enregistres la macro une seule fois au format dvb et ensuite à chaque fois que tu en as besoin dans un nouveau plan, tu fais glisser le fichier dvb dans la fenêtre du plan autocad
    Merci beaucoup c'est très gentil.

    Mon problème est donc résolu.
    Je pense que je ferai appel à tes connaissances une nouvelle fois si tu le veux bien avec Autocad.

    Encore une fois merci beaucoup.
    C'est super d'avoir des gens comme toi qui partage leur savoir

    A bientôt sur le fofo

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

Discussions similaires

  1. [Livre] Excel 2010 - programmation VBA, de Daniel-Jean David
    Par Djug dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2015, 01h37
  2. [V6] Exporter vers excel 2010 en VBA
    Par olivier45fr dans le forum Deski
    Réponses: 3
    Dernier message: 29/10/2012, 16h47

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