robine Posté(e) le 18 mars 2019 Posté(e) le 18 mars 2019 Bonjour à tous, J'ai essayé de réutiliser une macro que j'avais au fond d'un tiroir et qui fonctionnait parfaitement avant.J'ai un message " erreur de compilation : Projet ou bibliothèque introuvableMalheureusement mon niveau 0 en VBA ne me permet pas d'identifier et de régler cette erreur ... Pouvez vous m'aider svp ?Merci :)
Lommig Posté(e) le 18 mars 2019 Posté(e) le 18 mars 2019 Bonjour, Tu exécutes ton projet VBA dans AutoCAD ?Quelle est ta version d'AutoCAD ?Peux-tu nous transmettre ton projet VBA (fichier .DVB pour AutoCAD) ?Ton projet VBA utilise Excel ? Guillaume AutoCAD, AutoCAD Map3D, AutoCAD Architecture, Revit, COVADIS, InfraWorks 360, ReCap 360, ...BIM Infrastructure
robine Posté(e) le 18 mars 2019 Auteur Posté(e) le 18 mars 2019 Tu exécutes ton projet VBA dans AutoCAD ? oui Quelle est ta version d'AutoCAD ? Autocad 2018Peux-tu nous transmettre ton projet VBA (fichier .DVB pour AutoCAD) ?Ton projet VBA utilise Excel ? oui Je n'arrive pas a le mettre en PJ (pb d'erreur du serveur), alors le voici : Sub Métrés() Dim i, j, NbrBlocs, NbrPlignes, NbrLwPlines, NbrObjets As DoubleDim Largeur, Echelle, Couleur, Nbr, Longueur, Surface As VariantDim NomCalque, NomObjet, NomBloc, TypeTrait As StringDim Bloc As AcadBlockReferenceDim L() As VariantDim objet As AcadObjectDim Selection As AcadSelectionSetDim Coord As VariantOn Error Resume NextThisDrawing.SelectionSets("SEL").DeleteSet Selection = ThisDrawing.SelectionSets.Add("SEL")Selection.SelectOnScreen NbrObjets = Selection.CountReDim L(NbrObjets, 10)L(0, 1) = 0 For Each objet In Selection NomCalque = objet.LayerIf Len(NomCalque) = 1 Then NomCalque = "Layer " & NomCalqueNomObjet = objet.ObjectName If NomObjet = "AcDbBlockReference" ThenNomObjet = "Bloc"Set Bloc = objetNomBloc = Bloc.NameIf Left(NomBloc, 1) <> "*" Then j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 2) = NomBloc)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 2) = NomBloc L(i, 7) = L(i, 7) + 1 i = j End If Next iEnd IfEnd If If NomObjet = "AcDbBlock" ThenNomObjet = "Bloc"Set Bloc = objetNomBloc = Bloc.NameIf Left(NomBloc, 1) <> "*" Then j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 2) = NomBloc)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 2) = NomBloc L(i, 7) = L(i, 7) + 1 i = j End If Next iEnd IfEnd If If NomObjet = "AcDbLWPolyline" ThenNomObjet = "Pline"NomBloc = ""TypeTrait = objet.LinetypeLargeur = objet.LineweightEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.Length If objet.Closed Then Surface = objet.Area Else Surface = 0 j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd If If NomObjet = "AcDbPolyline" ThenNomBloc = ""NomObjet = "Pline"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.Length Surface = objet.Area If objet.Closed Then Surface = objet.Area Else Surface = 0 j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd If If NomObjet = "AcDb2dPolyline" ThenNomBloc = ""NomObjet = "SpLine"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.Length If objet.Closed Then Surface = objet.Area Else Surface = 0 j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd If If NomObjet = "AcDbMline" ThenNomBloc = ""NomObjet = "MLine"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.Length If objet.Closed Then Surface = objet.Area Else Surface = 0 j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur 'L(i, 9) = L(i, 9) + Surface 'If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd If If NomObjet = "AcDbCircle" ThenNomBloc = ""NomObjet = "Cercle"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.LengthSurface = objet.Area j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface i = j End If Next iEnd If If NomObjet = "AcDbArc" ThenNomBloc = ""NomObjet = "Arc"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.LengthSurface = objet.Area j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface i = j End If Next iEnd If If NomObjet = "AcDbEllipse" ThenNomBloc = ""NomObjet = "Ellipse"TypeTrait = objet.LinetypeLargeur = objet.ConstantWidthEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.LengthSurface = objet.Area j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = NomObjet And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = NomObjet: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface i = j End If Next iEnd If If NomObjet = "AcDbLine" ThenNomBloc = ""TypeTrait = objet.LinetypeLargeur = objet.LineweightEchelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.LengthSurface = 0j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = "Line" And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = "Line": L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur i = j End If Next iEnd If If NomObjet = "AcDbAlignedDimension" ThenNomBloc = objet.TextPrefixTypeTrait = objet.LinetypeLargeur = objet.Lineweight / 100Echelle = objet.LinetypeScaleCouleur = objet.colorLongueur = objet.MeasurementSurface = 0j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = "Cote" And L(i, 2) = NomBloc And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = "Cote": L(i, 2) = NomBloc: L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 8) = L(i, 8) + Longueur: L(i, 9) = L(i, 9) + Surface If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd If If NomObjet = "AcDbHatch" ThenNomBloc = ""TypeTrait = objet.PatternNameLargeur = objet.LineweightEchelle = objet.PatternScaleCouleur = objet.colorLongueur = 0Surface = 0 j = L(0, 1) + 1 For i = 1 To j If L(i, 0) = "" Then L(0, 1) = L(0, 1) + 1 If (L(i, 0) = "" Or (L(i, 0) = NomCalque And L(i, 1) = "Hachure" And L(i, 3) = TypeTrait And L(i, 4) = Largeur And L(i, 5) = Echelle And L(i, 6) = Couleur)) Then L(i, 0) = NomCalque: L(i, 1) = "Hachure": L(i, 3) = TypeTrait L(i, 4) = Largeur: L(i, 5) = Echelle: L(i, 6) = Couleur L(i, 7) = L(i, 7) + 1: L(i, 9) = L(i, 9) + Surface If Surface <> 0 Then L(i, 10) = L(i, 10) + 1 i = j End If Next iEnd IfNext Set xl = CreateObject("Excel.Application")xl.Visible = TrueSet Classeur = xl.workbooks.AddSet feuille = xl.worksheets(1)feuille.Name = "métrés"With feuille.Range("A1:K1").Font.Name = "Arial".Font.Size = 10.Font.Bold = TrueEnd WithWith feuille.cells(1, 1).Value = "Nom" & vbLf & "Couche"End Withfeuille.cells(1, 2) = "Nom" & vbLf & "Objet"feuille.cells(1, 3) = "Nom" & vbLf & "Bloc"feuille.cells(1, 4) = "Type" & vbLf & "Trait"feuille.cells(1, 5) = "Largeur"feuille.cells(1, 6) = "Echelle"feuille.cells(1, 7) = "Couleur"feuille.cells(1, 8) = "Nombre" & vbLf & "Total"feuille.cells(1, 9) = "Longueur" & vbLf & "Totale"feuille.cells(1, 10) = "Surface" & vbLf & "Totale"feuille.cells(1, 11) = "Contrôle" & vbLf & "Surface" For i = 1 To L(0, 1)For j = 0 To 10feuille.cells(i + 1, j + 1) = L(i, j)Next jNext i End Sub
(gile) Posté(e) le 18 mars 2019 Posté(e) le 18 mars 2019 Salut, As-tu téléchargé et installé le module VBA ? Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
robine Posté(e) le 18 mars 2019 Auteur Posté(e) le 18 mars 2019 Salut, As-tu téléchargé et installé le module VBA ? oui oui
Lommig Posté(e) le 19 mars 2019 Posté(e) le 19 mars 2019 Bonjour, Peux-tu essayer de joindre ton projet par une plate-forme de téléchargement (DropBox, WeTransfert, OneDrive, Google Drive, GrosFichiers, ...) ?Je pense qu'il s'agit d'un problème de référence à la bibliothèque Excel (pb assez courant).Je te demande de suivre la procédure suivante :- Ouvrir l'éditeur VBA (pour afficher le code VBA)- Aller dans le menu Outils > Références- Nous transmettre une copie d'écran des références à ton projet. Guillaume AutoCAD, AutoCAD Map3D, AutoCAD Architecture, Revit, COVADIS, InfraWorks 360, ReCap 360, ...BIM Infrastructure
robine Posté(e) le 22 mars 2019 Auteur Posté(e) le 22 mars 2019 Bonjour, Peux-tu essayer de joindre ton projet par une plate-forme de téléchargement (DropBox, WeTransfert, OneDrive, Google Drive, GrosFichiers, ...) ?Je pense qu'il s'agit d'un problème de référence à la bibliothèque Excel (pb assez courant).Je te demande de suivre la procédure suivante :- Ouvrir l'éditeur VBA (pour afficher le code VBA)- Aller dans le menu Outils > Références- Nous transmettre une copie d'écran des références à ton projet. Guillaume Voila le lien (le fichier dvb et la copie d'écran) : https://we.tl/t-5ixQ829nUo
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant