Aller au contenu

Cartouche mis à jour automatiquement par fichier Excel


Messages recommandés

Posté(e)

Bonjour à tous,

Voici mon problème :

Je voudrais mettre à jour des cartouches (modèle unique) qui contiennent des attributs (nom de l’opération, bâtiment, niveau, nom du plan, indices, modification, référence plans archi, etc.) directement depuis une « liste de plans » sous Excel qui contient exactement les même informations.

Actuellement je mets à jour ma « liste de plans » et ensuite j’ouvre systématiquement chaque fichier qui contient les cartouches pour les modifier manuellement et individuellement, avec le risque d’erreur que cela comporte…

J’ai lancé une recherche mais je n'ai rien trouvé qui corresponde exactement à ce que j’ai besoin.

Si vous avez déjà fait un programme qui fait ça ou si vous pouvez m’aider… :yltype:

Merci par avance.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

  • Réponses 90
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Posté(e)

Salut

Oui, c'est faisable et on peux t'aider

L'idée serait d'associer un attribut à un fichier+onglet+cellule via les vlax-ldata, de lancer une commande de mise à jour et le tour serait joué. Il y a suffisament d'éléments sur le site pour que tu parviennes à faire le lisp. ;)

Il faut aussi songer au déplacement éventuelle du fichier, de son effacement ou encore d'un changement de nom. Idem en ce qui concerne l'onglet et la cellule

Bonnes recherches :P

 

ps : on peut te donner un coup de main :cool:

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Saluts les gars,

je suis vraiment désolé mais je n’arrive pas à trouver les infos qu’il me faut pour faire le lisp dont j’ai, pardon, nous avons besoins, peut-être tout simplement parce que je n’arrive toujours pas à piger ne serais ce que les rudiments du lisp. :mad2:

Alors si Goldorak arrive à faire quelque chose et/ou si Patrick35 (et/ou d’autres aussi, bien sur personne n’est exclu !) peut nous donner un petit coup de mains (enfin un coup de main de plus…) ça serait super bien, parce si vous comptez sur moi pour arriver à pondre un pro-gramme on est vraiment mal barrés. :calim:

Si vous pensez que j’en demande beaucoup vous avez raison jusqu'à aujourd’hui je n’ait fait que demander et je n’ai rien donné…:red:

Alors voilà je ne sais pas quoi dire de plus…

Bonne journée à tous.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Salut.

 

Sans répondre directement à ta demande mais presque (ou alors je n'ai rien compris), j'ai tapé il y a quelque temps quelques lignes de code vba pour aller chercher des informations dans un fichier excel. Je te les livre ci-dessous, peut-être cela pourra t'aider.

 

Public Sub SérénadeEpine()

 

Workbooks.Open ("C:\Documents and Settings\moi\Mes documents\fichierexcel.xls")

 

Dim Chevron(0 To 35) As AcadLine

Dim PtA(0 To 2) As Double

Dim PtG1(0 To 2) As Double

 

For I = 0 To 35

 

PtA(0) = Cells(2 + I, 33).Value

PtA(1) = Cells(2 + I, 34).Value

PtG1(0) = Cells(2 + I, 28).Value

PtG1(1) = Cells(2 + I, 29).Value

 

Set Chevron(I) = ThisDrawing.ModelSpace.AddLine(PtA, PtG1)

Set Chevron(I) = Nothing

Next I

 

Workbooks.Close 'Ne pas écrire le chemin du fichier à fermer

 

End Sub

Posté(e)

Je travail dessus

Voilà un premier aperçu

 

Fichier LXL.LSP

(defun c:lxl(/ cla fic ok sel wks xl xl_fichier xl_lance xls)

 (defun MsgBox (Titre Bouttons Message / Reponse WshShell)
   (setq WshShell (vlax-create-object "WScript.Shell"))
   (setq Reponse (vlax-invoke WshShell 'Popup Message 0 Titre (itoa Bouttons)))
   (vlax-release-object WshShell)
   Reponse
 )

 (defun lancer_excel(/ sel)
   (if (setq xl (vlax-get-object "Excel.Application"))
     (setq xl_lance T)
     (setq xl (vlax-create-object "Excel.Application"))
   )
   (setq wks (vlax-get xl 'Workbooks))
   (vlax-for sel wks
     (if (eq (vlax-get sel 'fullname) fic)
       (setq xls sel
             xl_fichier T
       )
     )
   )
 )

 (defun choix_feuille(cla / feu lxl_dia pos res)
   (if (setq lxl_dia (findfile "lxl.dcl"))
     (progn
       (setq lxl_dia (load_dialog lxl_dia) res 0)
       (new_dialog "lxl" lxl_dia "")
       (start_list "feuille")
       (vlax-for feu cla
         (add_list (vlax-get feu 'name))
         (if (eq (vlax-get feu 'name) (vlax-get (vlax-get (vlax-get cla 'parent) 'activesheet) 'name))
           (setq pos (itoa res))
         )
         (setq res (1+ res))
       )
       (end_list)
       (set_tile "feuille" pos)
       (mode_tile "feuille" 2)
       (action_tile "feuille" "(setq pos $value)")
       (action_tile "accept"  "(done_dialog 1)")
       (action_tile "cancel"  "(done_dialog 0)")
       (setq res (start_dialog))
       (unload_dialog lxl_dia)
       (if (eq res 0)
         (setq feu nil)
         (setq feu (vlax-get (vlax-get-property cla 'item (1+ (atoi pos))) 'name))
       )
     )
     (msgbox "LXL" 16 "Fichier LXL.DCL introuvable.")
   )
 )

 (defun lecture(cel feu)
   (vlax-get (vlax-get-property (vlax-get-property cla 'item feu) 'range cel) 'value2)
 )

 (defun fermer_excel()
   (if (not xl_fichier)
     (vlax-invoke-method xls 'close :vlax-false)
   )
   (foreach sel (list xl wks xls cla)
     (vlax-release-object sel)
   )
   (gc)(gc)
 )

 (defun liste_fichiers(/ fic lst tbl)
   (if (setq tbl (reverse (vlax-ldata-list cle)))
     (foreach fic tbl
       (setq lst (append lst (list (vl-filename-base (cadr fic)))))
     )
   )
   lst
 )

 (defun ajouter_fichier(/ fic sel)
   (if (setq fic (getfiled "Veuillez sélectionner un fichier Excel" (getvar "dwgprefix") "xls" 16))
     (progn
       (setq position_fichier_excel (itoa (length (vlax-ldata-list cle))))
       (vlax-ldata-put cle position_fichier_excel (list fic))
       (if (eq position_fichier_excel "0")
         (foreach sel (list "fichier" "sfichier" "cfichier" "chemin" "gfeuille")
           (mode_tile sel 0)
         )
       )
       (foreach sel (list "feuille" "sfeuille" "cfeuille" "att")
         (mode_tile sel 1)
       )
       (start_list "fichier" 2)
         (add_list (vl-filename-base fic))
       (end_list)
       (set_tile "fichier" position_fichier_excel)
       (set_tile "chemin" (vl-filename-directory fic))
     )
   )
 )

 (setq cle "Patrick_35_Excel")
;  (if (not (vlax-ldata-list "Patrick_35_Excel"))
;    (if (setq fic (choix_fichier))
;      (progn
;        (lancer_excel)
;        (if (not xls)
;          (setq xls (vlax-invoke wks 'open fic))
;        )
;        (setq cla (vlax-get xls 'sheets))
;        (if (setq feu (choix_feuille cla))
;          (vlax-ldata-put "Patrick_35_Excel" "0" (list fic feu))
;        )
;      )
;    )
;  )
;  (if (vlax-ldata-list cle)
   (if (setq lxl_dia (findfile "lxl.dcl"))
     (progn
       (setq lxl_dia (load_dialog lxl_dia))
       (new_dialog "att" lxl_dia "")
       (if (not (vlax-ldata-list cle))
         (foreach sel (list "fichier" "sfichier" "cfichier" "chemin" "gfeuille" "att" "maj")
           (mode_tile sel 1)
         )
         (progn
           (start_list "fichier")
             (mapcar 'add_list (liste_fichiers))
           (end_list)
           (if (not position_fichier_excel)
             (setq position_fichier_excel "0")
           )
           (set_tile "fichier" position_fichier_excel)
           (set_tile "chemin" (vl-filename-directory (car (vlax-ldata-get cle position_fichier_excel))))
           (if (not (cadr (vlax-ldata-get cle position_fichier_excel)))
             (foreach sel (list "feuille" "sfeuille" "cfeuille" "att" "maj")
               (mode_tile sel 1)
             )
           )
         )
       )
       (set_tile "accept" "2")
       (action_tile "afichier" "(ajouter_fichier)") 
       (action_tile "accept"   "(done_dialog 0)")
       (setq res (start_dialog))
       (unload_dialog lxl_dia)
     )
     (msgbox "LXL" 16 "Fichier LXL.DCL introuvable.")
   )
;  )
 (if xl
   (fermer_excel)
 )
 (princ)
)

 

Fichier LXL.DCL

// =================================================================
//
//  LXL.DCL V1.00
//
//  Copyright (C) Patrick_35
//
// =================================================================

lxl : dialog {
 label        = "Choix de la feuille Excel";
 fixed_width  = true;
 alignment    = centered;
 allow_accept = true;
 is_cancel = true;
 : popup_list {key = "feuille";}
 spacer;
 ok_cancel;
}

att : dialog {
 label        = "LXL V1.00";
 fixed_width  = true;
 alignment    = centered;
 allow_accept = true;
 is_cancel = true;
 : row {
   : column {
     width = 40;
     :boxed_column {
       label = "Fichier Excel";
       : popup_list {key = "fichier";}
       : button {label = "Ajouter";   key = "afichier";}
       : button {label = "Supprimer"; key = "sfichier";}
       : button {label = "Changer";   key = "cfichier";}
       : text {label = "Chemin";      key = "chemin";}
     }
     :boxed_column {
       label = "Feuille Excel";
       key = "gfeuille";
       : popup_list {key = "feuille";}
       : button {label = "Ajouter";   key = "afeuille";}
       : button {label = "Supprimer"; key = "sfeuille";}
       : button {label = "Changer";   key = "cfeuille";}
       spacer;
     }
   }
   : boxed_column {
     width = 40;
     label = "Attributs";
     key = "att";
     : list_box {label = "ID";      key = "id"; height = 10; multiple_select = true;}
     : button {label = "Ajouter";   key = "aatt";}
     : button {label = "Supprimer"; key = "satt";}
     : button {label = "Modifier";  key = "matt";}
     : row {
       : column {
         : text {label = "Cellule affectée";}
         : text {label = "Bloc";}
         : text {label = "Etiquette";}
         : text {label = "Valeur";}
       }
       : column {
         : text {key = "cellule";}
         : text {key = "bloc";}
         : text {key = "etiquette";}
         : text {key = "valeur";}
       }
     }
     spacer;
   }
 }
 spacer;
 : button {label = "Mise à jour des Attributs liés avec Excel"; key = "maj";}
 spacer;
 ok_button;
}

 

ps : dans le code, il y a tout ce qui faut pour travailler avec Excel

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour à tous,

Tout d’abord je voudrais remercier Encoretoutpetit pour sa bonne volonté et sa participation, c’est très sympa. ;)

Puis bien sûr je voudrais remercier Patrick35, je voudrais te dire toute ma reconnaissance de t’intéresse à ma demande et surtout de fournir un travail aussi bon.

J’ai chargé ton « premier aperçu » et j’entrevois (même si elles ne sont pas encore activées) déjà toutes les fonctions que j’ai vu en « rêve », c’est comme si tu avait lu dans mon esprit…

Bien entendu on remarque aussi la finition minutieuse qui te caractérise, c’est fantastique. :o

Bon je t’embête plus et je te laisse travailler.

Encore milles merci. :heartpump:

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

  • 2 semaines après...
Posté(e)

Bonjour Patrick_35,

Ecoute je ne voudrais pas être pénible mais je préfère savoir à quoi m’en tenir.

Voilà, il m’a semblé comprendre que tu étais en train de plancher sur le lisp dont tu nous as donné un « aperçu ».

Mais comme je ne vois rien venir je m’inquiète :

1) Dois-je attendre patiemment (et en silence) que tu aies fini de travailler ? :yltype:

2) Ou ce n’est pas la peine d’attendre parce que tu n’a pas prévu d’en faire plus (ce qui est, sois dit entre nous, tout à fait ton droit !). :o

Comprends-moi bien je n’ai nullement l’intention de te bousculer, je sais attendre patiemment et en silence (si, si) s’il le faut ! :angel:

Merci par avance.

@+

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Tu as le droit de t'inquiéter et je te rassure car je continue de travailler dessus.

Pour être plus prècis, les fonctions ajouter dans les fichiers, feuilles et attributs sont opérationnels, ce qui n'est pas une mince affaire mais plus facile à gérer maintenant que la structure est bien définit.

C'est un outil qui va aussi me servir pour la simple raison est qu'il va permettre de lier n'importe quel attribut à n'importe quelle cellule Excel, ce qui va beaucoup plus loin que le cartouche

Ca avance, certes pas à la vitesse que l'on pourrait souhaiter, mais ça avance.

 

@+

 

ps : Quand je promets et qu'en plus je donne un aperçu, c'est pour aller au bout ;)

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour Patrick_35,

Tout d’abord toutes mes excuses, mais je ne voulais surtout pas entendre que tu ne tient pas parole ! :red:

Je sais de quoi je parle c’est n’est pas la première fois que tu me sort d’affaire en élaborant un programme et je confirme et signe tu est toujours allé jusqu’au bout.

On và donc dire que j’ai péché d’impatience….c’est grave docteur ? :mad2:

 

Je me doutais bien quand je t’ai embarqué dans cette affaire que ça n’allait pas être une mince affaire, mais je ne pensai pas que ça pouvait te mener si loin.

En tout cas j’en suis heureux, pas pour le travail que ça te donne bien entendu, mais pour les possibilités que j’entrevois, j’en ai déjà l’eau à la bouche… :D

Bon écoute comme je l’ai dit dans mon précèdent message je sais aussi me taire quand il le faut (mais arrêtés, c’est vrai !) donc je vais te laisser travailler en paix. :cool:

A bientôt.

 

PS pour winfield : avant de remplir mes cartouches je remplis toujours une liste de plans qui comporte une bonne partie des informations que vont se retrouver sur les cartouches (nom de l’opération, bâtiment, niveau, nom du plan, indices, modification, référence plans archi, etc.) dont certains vont être modifiés au fur et à mesure de l’avancement du projet (indices, modifications, référence plans archi, etc.). (Voir mon premier message sur ce sujet.)

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Je suis également preneur du projet final, cela fonctionne t-il dans

les 2 sens ?

je mets a jour les attributs dans le cartouche, lance une commande lisp et la liste EXCEL est a jour , possible ?

Posté(e)

Bien sure, sauf que pour l'instant, je suis parti dans le sens Excel-->Autocad

Je finalise déjà et on verra ensuite, bien que ce ne soit pas grand chose à faire

 

@+

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bon, bah voilà le lisp

C'est pour l'instant une version béta car d'habitude je le "conserve" chez moi histoire de le tester à fond, de voir s'il ne reste pas des bugs ou s'il n'y a pas d'améliorations à apporter.

Essayez le et testez le et dites moi s’il y a des choses qui clochent.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Tous d'abord chapeau,

aprés mon premier test, pas de bugs

Pour les sugestions: Est-il possible de selectionner le Bloc du cartouche avec plusieurs attributs,

et qu'il remplisse automatiquement le tableau, plutot que de selectionner un a un les attributs.

Cela permet également d'avoir toujour le même classement des attributs dans les colonnes d'excel.

Si j'abuse, incrémentation des lignes du tableau (car je resonne de autocad vers excel)

 

@+

 

Et encore bravo !!

 

 

Posté(e)

Mes plus grandes marques de respect cher Patrick.....

 

Ton lisp est génial....

 

une toute petite question : Est-il possible d'écrire les attribut en ligne dans excel au lieu d'une colonne lorsqu'on selectionne un Bloc ???

 

Encore Bravo

Thierry Garré

 

Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap

Posté(e)

Merci.

Tout est possible ;)

Comme je l'ai déjà dit, c'est une version béta et je pense justement proposer comme option une saisie libre, incrémentation automatique par ligne ou colonne aussi bien par le choix d'un bloc que celui d'attributs.

De plus, il faut que je fasse la vérification que le calque lors de la modification d'un attribut ne soit pas verrouillé et aussi lors lors de l'écritrure dans les cellules Excel, lors de la sauvegarde, que le fichier ne soit pas en lecture seule ou déjà ouvert par quelqu'un d'autre.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Bonjour Patrick_35,

Je viens de découvrir il y quelques instants que le rêve est devenu réalité !

Merci beaucouppppppp, t’es énorme… :yltype:

Je n’ai donné qu’un petit coup d’œil pour l’instant et j’en bave déjà.

Je vais bien entendu tester à fond ce bijou, et je vais te faire mes commentaires.

Merci beaucoup et à très bientôt.

 

PS. ça valait vraiment le coup d’attendre :D

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Peut-être un bug dans la deuxiéme version: (remarque, j'utilise le même fichier dwg et excel qu'avec la premiere version du lisp, important ? dans mon cas les attributs sont dans un bloc )

 

-je dupliques une presentation dans mon dwg, je change les valeurs des attributs

 

-j'ouvre excel ou il y a 3 feuilles avec deja des valeurs de cartouches dont un essai de ce matin

avec la nouvelle version du lisp (valeurs enregistrées dans la feuille n°3)

 

-dans autocad je lance la routine, selectionne la feuille n°1, selectionne le bloc ,indique A20 comme cellule, mise a jour du fichier excel

 

-Le probleme est qu'il ne place pas les valeurs dans la bonne feuille, ni dans la bonne ligne, en fait il a conservé les parametres de ma derniere intervention soit la feuille n°3 ligne A10

 

@+

Posté(e)
j'utilise le même fichier dwg et excel qu'avec la premiere version du lisp, important ?

Non

 

-je dupliques une presentation dans mon dwg, je change les valeurs des attributs

Ok

 

-j'ouvre excel ou il y a 3 feuilles avec deja des valeurs de cartouches dont un essai de ce matin

avec la nouvelle version du lisp (valeurs enregistrées dans la feuille n°3)

Ok, mais pas obligatoire d'ouvrir excel

 

-dans autocad je lance la routine, selectionne la feuille n°1, selectionne le bloc ,indique A20 comme cellule, mise a jour du fichier excel

Ok

 

-Le probleme est qu'il ne place pas les valeurs dans la bonne feuille, ni dans la bonne ligne, en fait il a conservé les parametres de ma derniere intervention soit la feuille n°3 ligne A10

C'est là où je ne comprends plus

Un traitement se fait toutes les feuilles d'excel ont été indiqués.

Si tu as des valeurs pour la feuil1, elles seront misent à jour, idem en ce qui concerne la feuil3 et autres

 

La logique du lisp est de traiter tous les attributs qui sont liés avec Excel, quelques soit la feuille et le fichier.

De cette manière, on peut très bien travailler sur 20 fichiers et 10 feuilles par fichier à partir d'un seul dessin avec une mise à jour global

La base est le dessin. Ensuite, à toi de savoir comment t'organiser

 

@+

 

ps : continuez de tester, et d'avancer vos idées. Plus on est de fous et plus on rit et c'est comme cela que l'on fait avancer le Schmilblick

 

[Edité le 12/2/2007 par Patrick_35]

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Depuis la version 1.10 plus de probléme.

 

citation extraite du message original:

-j'ouvre excel ou il y a 3 feuilles avec deja des valeurs de cartouches dont un essai de ce matin

avec la nouvelle version du lisp (valeurs enregistrées dans la feuille n°3)

 

Ok, mais pas obligatoire d'ouvrir excel

 

En fait cela permet de savoir quel numero de ligne il faut entrer.

Pourrais-tu incrementer en ligne ou en colonne suivant le choix deja fait dans la boite de dialogue, pour que l'entrée suivante (nouveau cartouche) soit placée a la suite ?

 

-J'en rajoute une couche... hors contexte des attributs, rajouter pour chauque plan la liste des xref ACTIF (avec le chemin ) a la suite des colonnes ou des lignes suivant l'option de remplissage.

 

Encore du boulot.....

Posté(e)

Pourrais-tu incrementer en ligne ou en colonne suivant le choix deja fait dans la boite de dialogue, pour que l'entrée suivante (nouveau cartouche) soit placée a la suite ?

C'est ce qui est proposé avec le choix libre/inc ligne et inc colonne, sinon je ne comprends pas le souhait.

 

-J'en rajoute une couche... hors contexte des attributs, rajouter pour chauque plan la liste des xref ACTIF (avec le chemin ) a la suite des colonnes ou des lignes suivant l'option de remplissage.

Pourquoi faire ? . Le but est de travailler Excel <--> Autocad depuis le dessin en cours. Pas avec les xrefs ?

 

Encore du boulot.....

C'sst comme ça que les choses avancent.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité