Nomenclatures autocad vers excel

Soyez le premier à donner votre avis sur cette source.

Snippet vu 31 270 fois - Téléchargée 29 fois

Contenu du snippet

Mon programme (en VBA AutoCAD) permet de transférer des nomenclatures autoCAD vers une feuille Excel, ce qui peut se revélé bien pratique.

Explication : Pour créer des nomenclatures sous autoCAD créez d'abord pour chacune de vos pièces de plan un info-point (ou référence de pièce), celà alimente une nomenclature dans autoCAD. LA nomenclature est ainsi géré automatiquement par AutoCAD
Cette nomenclature se met a jour à chaque modification de vos info point, et gere automatiquement les quentité de pièce,etc...

Comment l'utiliser : Ouvrez Excel, et créez une nouvelle feuille. Enuite ouvrez un plan autoCAD avec des references de pièces, et lancez la macro.

Il se peut que vous ayez à modifier la macro pour l'adapter à vos besoins !

Source / Exemple :


'**************************************
'*                                    *
'* EXPORT DE NOMENCLATURE AUTOCAD     *
'* VERS MICROSOFT EXCEL               *
'*                                    *
'* Ecrit par LEVEUGLE Damien (c) 2005 *
'*                                    *
'**************************************

Option Explicit

Public Enum EXCELCOL
    IGNORE = 0
    REFERE = 1
    REPER = 2
    DESIGN = 4
    MATIERE = 5
    NUM_DE_PLAN = 7
    CODE_ARTICLE = 9
    MASSE = 10
    DESCR = 11
End Enum

Public Sub subExtracToXL()
    
    '****************
    '* DECLARATIONS *
    '****************
    Const REEL69SS = "REEL_PARTREFERENCE"
    
    Dim objExelApp      As Excel.Application
    Dim objExelSheet    As Excel.Worksheet
    Dim gpCode(0)       As Integer
    Dim dataValue(0)    As Variant
    Dim groupCode       As Variant
    Dim dataCode        As Variant
    Dim MySelectionSet  As AcadSelectionSet
    Dim MyMPR           As McadPartReference
    Dim I               As Integer
    Dim LigneExcel      As Integer
    Dim ColonneExcel    As EXCELCOL

    '******************
    '* INITIALISATION *
    '******************
       
    On Error Resume Next    ' Gestion erreurs
    
    ThisDrawing.SelectionSets(REEL69SS).Delete
    Set MySelectionSet = ThisDrawing.SelectionSets.Add(REEL69SS)
    
    gpCode(0) = 0
    dataValue(0) = "ACMPARTREF"
    groupCode = gpCode
    dataCode = dataValue
    LigneExcel = 9
    ColonneExcel = IGNORE

    '*************
    '* SELECTION *
    '*************
    
    ThisDrawing.SelectionSets(REEL69SS).Select acSelectionSetAll, , , groupCode, dataCode
    If ThisDrawing.SelectionSets(REEL69SS).Count = 0 Then
        MsgBox "Aucune pièce dans la nomenclature présente.", vbInformation, "Pas de pièces"
        Exit Sub
    End If

    Err.Clear

    '*********************
    '* APPLICATION EXCEL *
    '*********************

    Set objExelApp = GetObject(, "excel.application") ' ouvre le classeur courant

    If Err Then    ' si excel non ouvert on en crée un !
        Err.Clear
        Set objExelApp = Nothing
        Set objExelApp = CreateObject("excel.application")
        If Err Then
            Err.Clear
            MsgBox "L'application Excel n'est pas présente sur votre poste", vbCritical, "EXCEL"
            Exit Sub
        End If
    End If

    objExelApp.Visible = True

    Set objExelSheet = objExelApp.ActiveSheet

    On Error GoTo 0
    
    '**********************************
    '* PLACE PIECE TROUVER DANS EXCEL *
    '**********************************
    
    For Each MyMPR In ThisDrawing.SelectionSets(REEL69SS)       ' Parcoure chaque ligne de la NT
        
        If IsEmpty(MyMPR.Data) Then
            MsgBox "Nomenclature vide", vbInformation, "Vide"
            GoTo final
        Else

            LigneExcel = LigneExcel + 1                         ' position dans excel

            objExelSheet.Cells(LigneExcel, 3).Value = MyMPR.Quantity

            For I = LBound(MyMPR.Data) To UBound(MyMPR.Data)    ' Lit chaque champs de la ligne

                Select Case MyMPR.Data(I, 0)
                    Case "REF": ColonneExcel = REFERE           ' Associe les champs de nomenclature AutoCAD
                    Case "REPERE": ColonneExcel = REPER         ' aux colonnes d'Excel
                    Case "NAME": ColonneExcel = DESIGN
                    Case "MATERIAL": ColonneExcel = MATIERE
                    Case "N°_DE_PLAN": ColonneExcel = NUM_DE_PLAN
                    Case "CODE_ARTICLE": ColonneExcel = CODE_ARTICLE
                    Case "MASS": ColonneExcel = MASSE
                    Case "DESCR": ColonneExcel = DESCR
                Case Else
                    ColonneExcel = IGNORE
                End Select

                If ColonneExcel <> IGNORE Then objExelSheet.Cells(LigneExcel, ColonneExcel).Value = MyMPR.Data(I, 1)

            Next I

        End If

    Next

'*******************
'* TRIE DANS EXCEL *
'*******************

    objExelSheet.Range("B10:J600").Sort Key1:=objExelSheet.Columns("B"), Order1:=xlAscending, MatchCase:=False, Orientation:=xlTopToBottom
    objExelSheet.Range("A10").Select
    
final:

    '*********************
    '* LIBERE LA MEMOIRE *
    '*********************

    Set objExelApp = Nothing
    Set objExelSheet = Nothing
    Set MySelectionSet = Nothing

End Sub

Conclusion :


J'ai trimé pour trouver comment faire, et je n'ai trouvé aucune source sur le net ni même de documentation pour l'utilisation des nomenclatures sous AutoCAD, donc si c'est mal codé priere de m'escuser.

Sinon je suis preneur pour les vos améliorations et vos insultes (lol)

NB : Des fois VBA vous renvoi des erreurs, ceci peut être du à des references (librairies) non coché !

A voir également

Ajouter un commentaire

Commentaires

cs_aminou
Messages postés
4
Date d'inscription
jeudi 27 novembre 2003
Statut
Membre
Dernière intervention
12 mai 2008

Bonjour
j'ai pas pu testé la macro, j'ai un message d'erreur
---------------------------
Erreur de compilation:

Type défini par l'utilisateur non défini
---------------------------
à la ligne Dim MyMPR As McadPartReference

Peut être un problème de références mais je ne sais pas la quelle ajouter!!!!

Merci d'avance
sechanbask
Messages postés
21
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
12 mai 2009

J'ai testé la macro et malgré beaucoup de référence VBA de coché, j'ai pas réussi à le faire fonctionner, il bloque sur "Dim MyMPR As AcadPartReference". Pourrais-tu me donner la référence nécessaire pour le faire fonctionner...
Merci d'avance
Khwartz
Messages postés
3
Date d'inscription
mardi 27 mars 2007
Statut
Membre
Dernière intervention
28 mars 2007

Bonjour Damien, je suis complètement néophyte au niveau des macros, langage VBA et autres. Je sais que ça existe, en connais je pense un peu le principe et à quoi ça sert, mais pratiquement, je n'ai jamais pratiqué.
Tu donnes ici ton code source, et cette macro m'intéresse au plus haut point car je suis métreur, et cherche à pouvoir extraire des données d'Autocad, des données à partir justement des bibliothèques.
Plus exactement, j'ai besoin de pouvoir désigner sous Autocad des objets, en pointant sur les "calques", avec un numéro ou une désignation alphanumérique, de définir les caractéristiques de chaque type d'objets (béton de tel type) et de pouvoir en calculer le volume de gravier, de ciment, le ferraillage, etc., d'après mes propres "défintions".
Penses-tu que je puisse faire cela à partir des nomenclatures que ta macro, si j'ai bien compris permet d'extraire vers Excel, et si oui, comment je fais pour faire que ta macro puisse fonctionner dans Excel ? Dois-je faire un "copier-coller", et si oui, où ?
Quelque soit ta réponse, merci d'avoir mis à disposition ton travail.
Cordialement.
elguevel
Messages postés
718
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
22 novembre 2016
3
"Infopoint", ou "part reference" je sais pas comment il l'appel dans la doc mais ce sont des references sur des pièces pour les associés à la nomenclature.

D'ailleur il faudra que je mette cette source à jour car j'en ai fait d'autres versions depuis.

@+ et Bonnes Fêtes !!!!
M i g u e l
Messages postés
1
Date d'inscription
dimanche 18 décembre 2005
Statut
Membre
Dernière intervention
18 décembre 2005

Un info point?
Comme on faire.... Sur la doc de Autocad je ne pas trouvé.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.