Script VBA sur excel à appliquer sur AUTOCAD - Besoin d'aide

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Script VBA sur excel à appliquer sur AUTOCAD - Besoin d'aide

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Bonjour,

 

Je suis apprenti conducteur de travaux et dans le cadre de mon projet de fin d'études qui concerne l'optimisation de la gestion d'un chantier et de la planification.

 

Je cherche un moyen afin de pouvoir changer l'état d'une zone de chantier sur un plan (soit réalisé, soit non réalisé, soit en cours avec une couleur respective). C'est à dire sur excel quand je change le statut, la couleur change automatiquement sur autocad.

 

J'ai commencé à réaliser un script VBA sur excel mais qui ne modifie pas la couleur sur autocad :

- J'ai un document test sur autocad avec 3 zones et 3 calques 

- J'ai un tableau test sur excel avec le script joint

 

Pourriez-vous m'aider sur ce sujet ?

 

Je vous remercie par avance.

0 J'aime
Répondre
Solutions acceptées (3)
273 Visites
14 Réponses
  • VBA
Replies (14)

DOMICREA
Advisor
Advisor
Solution acceptée

Bonjour @oguz_kurnaz5ER7W 

Voir ce lien :

CAD Forum - How to create DWG layers from a list in CSV/Excel? (and modify layer properties in Excel...

 





Dominique Michy (EI) - Formateur AutoCAD, Revit Architecture, SketchUp, V-Ray - https://www.domicrea.fr/
0 J'aime

manon_puel
Community Manager
Community Manager

Bonjour @oguz_kurnaz5ER7W 

Merci d’avoir posé cette question sur nos forums ! La communauté a essayé de vous aider au mieux. Si des réponses vous paraissent appropriées, voulez vous avoir l'amabilité de cliquer sur le bouton  APPROUVER LA SOLUTION  en bas de la réponse qui apporte une solution?
Merci de ne pas accepter comme solution le message que vous êtes en train de lire.


Manon Puel animatrice de la communauté francophone
0 J'aime

-didier-
Advisor
Advisor

Bonjour @oguz_kurnaz5ER7W 

 

Vous écrivez ceci :
C'est-à-dire sur Excel, quand je change le statut, la couleur change automatiquement sur AutoCAD.

 

Que faut-il comprendre :

  1. Changer la couleur du calque et donc les entités changeront.
  2. Laisser la couleur du calque en blanc et forcer la couleur des entités.

J'attends votre réponse pour me mettre au travail, car le VBA n'est pas dans la première strate de mon esprit (doux euphémisme).

Amicalement

 

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

0 J'aime

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Bonjour,

 

Mon objectif à travers Excel c'est d'avoir 3 couleurs différentes qui sont respectivement : statut réalisé, statut non réalisé et statut en cours.

 

Sur mon chantier chaque zone évolue, une zone par exemple n'est pas réalisé X date et dans X semaine , la zone sera réalisée ou en cours.

 

Donc sur Excel je souhaite "contrôler" mes calques d'AUTOCAD, et modifié si besoin quand tel zone est réalisée, non réalisée ou en cours.

 

N'ayant pas de connaissance sur le VBA, je vous joins désespérément mon script dans l'espoir d'avoir des conseils 🙂

 

oguz_kurnaz5ER7W_0-1736323760616.png

oguz_kurnaz5ER7W_1-1736323807398.png

 

 

J'espère avoir été clair.

 

Cordialement

0 J'aime

-didier-
Advisor
Advisor

Bonjour @oguz_kurnaz5ER7W 

 

Hélas non, vous n'avez pas clarifié la demande.
Vous ne répondez pas à ma question et nous en sommes au même point.

Je la repose :

Que faut-il comprendre :

  1. Changer la couleur du calque et donc les entités changeront.
  2. Laisser la couleur du calque en blanc et forcer la couleur des entités.

Si c'est la couleur du calque qui change, toutes les entités sur ce calque (qui ne sont pas forcées) changeront de couleur

Si c'est la couleur des entités qui change, il faudra sélectionner quelles entités de ce calque devront subir le changement.
Il est possible, dans mon hypothèse, que plusieurs entités soient sur un calque (zone_bureaux par exemple) mais qu'elles ne soient pas toutes en "statut réalisé".
C'est souvent le cas pendant l'avancement des travaux, les bureaux du client sont faits, mais les bureaux de l'entreprise sont encore en cours de réalisation.

 

Une dernière question :
Tenez-vous absolument à intégrer des couleurs vraies (RGB) ?,
ce n'est pas anodin avec VBA les couleurs "simple" (255) sont plus faciles à gérer.

 

Répondez pour préciser quelles options choisir et je me mets à votre disposition.

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

0 J'aime

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Bonjour,

 

Je tiens à m'excuser pour mon incompréhension.

 

Dans mon cas effectivement ca sera "Laisser la couleur du calque en blanc et forcer la couleur des entités" car comme vous l'avez dit dans mon zoning tout ne sera pas au même niveau d'avancement. Dans une zone ou il y aura des travaux, j'ai plusieurs bureau qui n'auront pas le même état d'avancement.

 

J'ai à ma disposition un plan de zoning avec les zones de projet si vous le souhaitez.

 

Et pour votre deuxième question :

"Tenez-vous absolument à intégrer des couleurs vraies (RGB) ?,
ce n'est pas anodin avec VBA les couleurs "simple" (255) sont plus faciles à gérer"

 

J'ai pas forcément besoin d'intégrer les couleurs vraies (RGB). On peut bien prendre dans mon cas les couleurs "simple" (255).

 

Je vous remercie par avance.

 

Cordialement.

0 J'aime

-didier-
Advisor
Advisor

Bonjour @oguz_kurnaz5ER7W 

 

OK pour les couleurs, c'est noté.

 

Par contre, une nouvelle question apparait suite à l'option que vous choisissez :

j'ai plusieurs bureaux qui n'auront pas le même état d'avancement.

Comment indiquer au VBA quelles sont les entités concernées par le traitement ?

Doit-on prévoir une sélection utilisateur ? (pas très pratique)

Ces zones sont-elles délimitées ou de couleur forcée précédemment ?

 

Autre chose, vous écrivez aussi N'ayant pas de connaissance sur le VBA

du coup la question pourquoi le VBA vient naturellement.

Alors, pourquoi ?

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

0 J'aime

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Bonjour,

 

Pour que ca soit plus parlant je vous joins des images :

oguz_kurnaz5ER7W_0-1736334039229.png

oguz_kurnaz5ER7W_1-1736334301884.png

 

Ci-dessus vous avez les zones concernées 

 

Pour les délimitations j'ai le calque suivant :

oguz_kurnaz5ER7W_2-1736334389283.png

 

Et pour le hachure j'ai cela :

oguz_kurnaz5ER7W_3-1736334441291.png

Une sélection utilisateur sera à prévoir. Si nous arrivons à réaliser cette démarche VBA pour ces zones, je souhaiterais continuer par la suite dans d'autre endroit.

Il faut savoir que les travaux n'ont pas débuté.

 

Sachez que je n'ai aucune exigence, si vous souhaitez me proposer votre point de vue et votre démarche c'est avec plaisir.

 

Si vous le souhaitez, je voudrais avoir un échange avec vous via une reunion teams pour vous expliquer en détail.

 

Concernant votre remarque sur "N'ayant pas de connaissance sur le VBA", ma demande étant dans le cadre de mon projet de fin d'études, je dois appliquer ce projet sur mon chantier. Ce sujet a été choisi en accord avec mon tuteur d'apprentissage qui m'a demandé d'exploiter l'outil macro VBA d'autocad pour optimiser la gestion des plans autocad plutôt de mettre un budget sur un logicel plus adapté sur la gestion. 

N'ayant pas fait de VBA auparavant j'ai dit cela.

 

Je reste à votre disposition.

 

Cordialement.

 

0 J'aime

Y.AUBRY
Advisor
Advisor
Solution acceptée

Bonjour,

 

Ci-joint le fichier Excel avec le code mis à jour :

 

J'ai défini deux modules de classe :

 

- ClCouleur

Public R As Integer 'Red = Rouge
Public G As Integer 'Green = Vert
Public B As Integer 'Blue = Bleu

- ClZone

Public Nom As String
Public Etat As String
Public Couleur As ClCouleur

Private Sub Class_Initialize()
    Set Couleur = New ClCouleur
End Sub

 

et j'ai modifié le code de la sorte :

Public Sub StartAutoCAD()

    ' Déclarations des variables
    Dim acadApp As Object
    Dim AcadDoc As Object
    Dim Ws As Worksheet
    Dim LastRow As Long
    Dim i As Long
    Dim ZoneName As String
    Dim State As String
    Dim Layer As Object
    Dim Red As Integer, Green As Integer, Blue As Integer

    ' Connexion à AutoCAD
    On Error Resume Next
    Set acadApp = GetObject(, "AutoCAD.Application") ' Essayer de se connecter à AutoCAD en cours
    If Err.Number <> 0 Then
        Err.Clear
        Set acadApp = CreateObject("AutoCAD.Application") ' Créer une nouvelle instance d'AutoCAD si aucune n'est en cours
        If Err.Number <> 0 Then
            MsgBox "Erreur lors de la connexion à AutoCAD. Assurez-vous qu'AutoCAD est installé.", vbCritical
            Exit Sub
        End If
    End If
    On Error GoTo 0

    acadApp.Visible = True ' Rendre AutoCAD visible

    ' Vérification et définition du document actif
    On Error Resume Next
    Set AcadDoc = acadApp.ActiveDocument ' Obtenir le document actif ==>  A MODOIFIER PAR OUVERTURE DU DOCUMENT PLEN EXE "XXX"
    If AcadDoc Is Nothing Then
        MsgBox "Aucun document actif dans AutoCAD. Veuillez ouvrir un fichier DWG avant d'exécuter ce script.", vbCritical
        Exit Sub
    End If
    On Error GoTo 0

    ' Accéder à la feuille Excel
    Set Ws = ThisWorkbook.Sheets("Feuil1") ' Remplacer "Feuil1" par le nom de votre feuille
    LastRow = Ws.Cells(Ws.Rows.Count, "F").End(xlUp).Row ' Dernière ligne non vide dans la colonne F

    Dim Zones As Collection 'Création d'une collection (Le genre n'est pas défini mais ca sera une collection de classe ClZone
    Set Zones = New Collection
    
    ' Boucle sur les zones dans Excel et on stocke les valeurs dans une collection de classe
    For i = 6 To LastRow ' Commence à la ligne 6
        
        Dim Zone As ClZone 'Déclaration d'une zone
        Set Zone = New ClZone 'Instanciation d'une Zone
        
        ZoneName = Ws.Cells(i, "F").Value ' Nom de la zone (Colonne F)
        State = Ws.Cells(i, "G").Value ' État de la zone (Colonne G)

        ' Définir la couleur selon l'état
        If State = "Réalisé" Then
            Red = 0: Green = 255: Blue = 0 ' Vert
        ElseIf State = "Non Réalisé" Then
            Red = 255: Green = 0: Blue = 0 ' Rouge
        ElseIf State = "En Cours" Then
            Red = 255: Green = 255: Blue = 0 ' Jaune
        Else
            Red = 200: Green = 200: Blue = 200 ' Gris pour état inconnu
        End If
        
        Zone.Nom = ZoneName
        Zone.Etat = State
        Zone.Couleur.R = Red
        Zone.Couleur.G = Green
        Zone.Couleur.B = Blue
        
        Zones.Add Zone 'On ajoute la Zone dans la collection
        
    Next i
    
    
    Dim ent As AcadEntity 'Entité AutoCAD
    Dim Hatch As AcadHatch 'Hachure AutoCAD
        
    For Each ent In AcadDoc.ModelSpace ' On parcours l'enseble des entités de l'espace objet du dessin courant
        If TypeOf ent Is AcadHatch Then ' Si l'entité est une hachure
            Set Hatch = ent 'Alors on défini la hachure
            Dim Calque As String
            Calque = Hatch.Layer 'On récupère le nom du calque de la hachure
            On Error Resume Next
            'On parcours
            For i = 1 To Zones.Count
                If Zones.Item(i).Nom = Calque Then
'                    Set Zone = New ClZone 'Instanciation d'une Zone
                    Set Zone = Zones.Item(i)
                    If Not Zone Is Nothing Then
                        Dim Couleur As New AcadAcCmColor
                        Set Couleur = AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor." & Left(AcadApplication.Version, 2))
                        Call Couleur.SetRGB(Zone.Couleur.R, Zone.Couleur.G, Zone.Couleur.B)
                        ent.TrueColor = Couleur
                        Exit For
                    End If
                End If
            Next
        End If
    Next
        
        
    'MsgBox "Les modifications de couleur ont été appliquées aux calques dans AutoCAD.", vbInformation
End Sub


 

A+ Yoan

Yoan AUBRY

EESignature

-didier-
Advisor
Advisor

Bonjour @oguz_kurnaz5ER7W 

 

Non, vous n'aidez pas du tout avec les images, malheureusement.

Je vois qu'une réponse de @Y.AUBRY a été postée, Tenez-nous au courant.
Si c'est OK dites-le, s'il faut la retravailler aussi.
Pour l'instant, j'arrête là.

 

Amicalement

Éternel débutant.. my site for learning : Programmer dans AutoCAD

DA

EESignature

0 J'aime

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Merci beaucoup, le script fonctionne parfaitement pour le dwg test. 

 

Je souhaiterais l'appliquer également sur un de mes plans de zoning.

 

Petite question : comment faites-vous pour mettre le bouton Mettre à jour dans le dessin autocad ouvert ?

 

En vous remerciant par avance.

 

0 J'aime

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Le script fonctionne bien sur le dwg test que j'ai envoyé au tout début.

 

Je souhaiterais appliquer par la suite ce script sur d'autre plan DWG.

 

Je vous remercie.

0 J'aime

Y.AUBRY
Advisor
Advisor
Solution acceptée

Pour insérer un "Bouton" dans Excel lançant une commande dans Excel, il faut :

- insérer une forme (shape)

YAUBRY_0-1736350472791.png

- Une fois la forme insérée, lui ajouter un éventuellement un texte (Clic-droit + Modifier le Texte) et ensuite lui associer une macro (Clic droit Affecter une macro)

YAUBRY_1-1736350591021.png

 

 

YAUBRY_2-1736350724921.png

 

Yoan AUBRY

EESignature

oguz_kurnaz5ER7W
Community Visitor
Community Visitor

Je vous remercie de votre réponse.

 

0 J'aime