Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

NOMENCLATURES AUTOCAD VERS EXCEL


Information sur la source

Description

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

  • '**************************************
  • '* *
  • '* 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
'**************************************
'*                                    *
'* 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é !
 

Commentaires et avis

signaler à un administrateur
Commentaire de LeVoleur le 30/06/2005 08:22:52

Salut
C'est bien. Pas d'insulte! J'utilise ce genre de trucs en bureaux d'études pour liste de matériel, de plans etc.
A part que tu écris mieux que moi

signaler à un administrateur
Commentaire de BZY1 le 01/07/2005 13:56:57

c vraiment bien si t'as d'autres prog du meme genre n'hesite pas!

signaler à un administrateur
Commentaire de M i g u e l le 18/12/2005 12:17:42

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

signaler à un administrateur
Commentaire de elguevel le 24/12/2005 09:20:45

"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 !!!!

signaler à un administrateur
Commentaire de Khwartz le 28/03/2007 15:39:41

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.

signaler à un administrateur
Commentaire de sechanbask le 11/05/2007 22:12:07

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

signaler à un administrateur
Commentaire de aminou le 12/05/2008 12:21:56

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

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.