Aller au contenu

Importer des points depuis un fichier


(gile)

Messages recommandés

Salut,

 

Comme la demande est récurrente et que les fichiers points peuvent être différemment formatés, j'ai essayé de faire quelque chose de polyvalent.

 

L'utilisateur choisis un fichier ascii (.txt .csv ou autre) puis spécifie le format du fichier et les paramètre d'insertion dans une boite de dialogue.

http://img109.imageshack.us/img109/8215/instopo.png

Si le bloc "TCPOINT" n'est pas présent dans le dessin, il est automatiquement créé.

Chacun peut soit modifier ce bloc par la suite, soit en créer un à sa guise. Le bloc doit être nommé "TCPOINT" et contenir au moins deux attributs "MAT" pour le matricule du point et ALT pour l'altitude.

Si le matricule et la coordonnée Z du bloc sont présents dans le fichier et si les case à cocher "Matricule" et "Altitude" sont cochées, ces attributs sont automatiquement renseignés.

 

 

;;; INSTOPO (gile)
;;; Insère le bloc "PointBloc" sur les points décrit dans un fichier ascii (.txt .csv ou autre)
;;;
;;; Modification : possibilité d'insérer un point 02/12/2009

(defun c:instopo (/        *error*  makeblock         filename tmp
                 file     layers   clay     ptlay    blklay   data-sep
                 dec-sep  mat-p    mat      alt      scl      point
                 bloc     dcl_id   space    line     coords   matric
                 insert
                )

 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))

 ;;---------------------------------------------------;;

 (defun *error* (msg)
   (or (= msg "Fonction annulée")
       (princ (strcat "Erreur: " msg))
   )
   (and file (close file))
   (vla-EndUndoMark *acdoc*)
   (princ)
 )

 ;;---------------------------------------------------;;

 ;; MakeBlock
 ;; Crée le bloc PointBloc
 (defun makeblock (/ block)
   (vl-load-com)
   (setq block (vla-add *blocks*
                        (vlax-3d-point '(0. 0. 0.))
                        "TCPOINT"
               )
   )
   (vla-put-Layer
     (vla-addPoint block (vlax-3d-point '(0. 0. 0.)))
     "0"
   )
   (vla-put-Layer
     (vla-addAttribute
       block
       2.5
       acAttributeModePreset
       ""
       (vlax-3d-point '(1. 0.5 0.))
       "MAT"
       ""
     )
     "0"
   )
   (vla-put-Layer
     (vla-addAttribute
       block
       2.5
       acAttributeModePreset
       ""
       (vlax-3d-point '(1. -3. 0.))
       "ALT"
       ""
     )
     "0"
   )
 )

 ;;---------------------------------------------------;;

 (if (setq filename (getfiled "Sélectionner un fichier point"
                              ""
                              "txt;csv;*"
                              0
                    )
     )
   (progn
     ;; Création du fichier DCL temporaire
     (setq tmp  (vl-filename-mktemp "Tmp.dcl")
           file (open tmp "w")
     )
     (write-line
       "InsTopo
:dialog{label=\"InsTopo\";
:boxed_row{label=\"Format du fichier\";
:boxed_radio_column{label=\"Séparateur de données\";key=\"data-sep\";
:radio_button{label=\"Virgule\";key=\"44\";value =\"1\";}
:radio_button{label=\"Point-virgule\";key =\"59\";}
:radio_button{label=\"Espace\";key=\"32\";}
:radio_button{label=\"Tabulation\";key =\"9\";}}
:column{
:boxed_radio_column{label=\"Séparateur décimal\";key=\"dec-sep\";
:radio_button{label=\"Virgule\";key =\"com\";}
:radio_button{label=\"Point\";key=\"dot\";value=\"1\";}}
:boxed_radio_column{label=\"Matricule\";key=\"mat-p\";
:radio_button{label=\"Présent\";key=\"present\";value=\"1\";}
:radio_button{label=\"Absent\";key=\"absent\";}}}}
:boxed_row{label=\"Point\";
:toggle{label=\"Insérer des points\";key=\"point\";value=\"1\";}
:popup_list{label=\"Calque\";key =\"ptlay\";edit_width = 24;}}
spacer;
:boxed_column{label=\"Bloc\";
:toggle{label=\"Insérer de blocs\";key=\"bloc\";value=\"1\";}
:row{
:boxed_column{label=\"Attributs\";
:toggle{label=\"Matricule\";key=\"mat\";value=\"1\";}
:toggle{label=\"Altitude\";key=\"alt\";value=\"1\";}}
spacer;
:column{spacer;
:popup_list{label=\"Calque\";key =\"blklay\";edit_width = 24;}
:edit_box{label=\"Echelle  \";key=\"scl\";value=\"1.0\";fixed_width=true;}
spacer;}}}
ok_cancel;}"
       file
     )
     (close file)

     (vlax-for l (vla-get-Layers *acdoc*)
       (setq layers (cons (vla-get-Name l) layers))
     )
     (setq layers   (vl-sort layers '            clay     (getvar "CLAYER")
           ptlay    clay
           blklay   clay
           data-sep "44"
           dec-sep  "dot"
           mat-p    "present"
           mat      "1"
           alt      "1"
           scl      1.0
           point    T
           bloc     T
     )
     (setq dcl_id (load_dialog tmp))
     (if (not (new_dialog "InsTopo" dcl_id))
       (exit)
     )
     (start_list "ptlay")
     (mapcar 'add_list layers)
     (end_list)
     (start_list "blklay")
     (mapcar 'add_list layers)
     (end_list)
     (set_tile "ptlay" (itoa (vl-position clay layers)))
     (set_tile "blklay" (itoa (vl-position clay layers)))
     (foreach k (list "data-sep" "dec-sep" "mat-p" "mat" "alt")
       (action_tile k "(set (read $key) $value)")
     )
     (action_tile
       "point"
       "(if (= \"1\" $value)
         (progn
           (setq point T)
           (mode_tile \"ptlay\" 0)
         )
         (progn
           (setq point nil)
           (mode_tile \"ptlay\" 1)
         )
       )"
     )
     (action_tile
       "bloc"
       "(if (= \"1\" $value)
         (progn
           (setq bloc T)
           (mode_tile \"blklay\" 0)
           (mode_tile \"mat\" 0)
           (mode_tile \"alt\" 0)
           (mode_tile \"scl\" 0)
         )
         (progn
           (setq bloc nil)
           (mode_tile \"blklay\" 1)
           (mode_tile \"mat\" 1)
           (mode_tile \"alt\" 1)
           (mode_tile \"scl\" 1)
         )
       )"
     )
     (action_tile "ptlay" "(setq ptlay (nth (atoi $value) layers))")
     (action_tile "blklay" "(setq blklay (nth (atoi $value) layers))")
     (action_tile
       "scl"
       "(setq scl (distof $value))
(while (or (not scl) (	(alert \"Nécessite un nombre réel strictement positif\")
(setq scl 1.0)
(set_tile \"scl\" \"1.0\")
(mode_tile \"scl\" 2))"
     )
     (action_tile "cancel" "(setq data-sep nil) (done_dialog 0)")
     (action_tile "accept" "(done_dialog 1)")
     (start_dialog)
     (unload_dialog dcl_id)
     (vl-file-delete tmp)
     (if data-sep
       (progn
         (vla-StartUndoMark *acdoc*)
         (and (vl-catch-all-error-p
                (vl-catch-all-apply
                  'vla-item
                  (list *blocks* "TCPOINT")
                )
              )
              (makeblock)
         )
         (setq space (vla-get-ModelSpace *acdoc*)
               file  (open filename "r")
         )
         (while (setq line (read-line file))
           (setq coords (str2lst line (chr (atoi data-sep))))
           (if (= mat-p "present")
             (setq matric (car coords)
                   coords (cdr coords)
             )
             (setq matric nil)
           )
           (if (= dec-sep "com")
             (setq
               coords (mapcar
                        '(lambda (x)
                           (read (vl-string-translate "," "." x))
                         )
                        coords
                      )
             )
             (setq coords (mapcar 'read coords))
           )
           (setq coords (list (car coords)
                              (cadr coords)
                              (cond ((caddr coords))
                                    (T 0.0)
                              )
                        )
           )
           (if (vl-every 'numberp coords)
             (progn
               (if point
                 (vla-put-Layer (vla-AddPoint space (vlax-3d-point coords))
                                ptlay
                 )
               )
               (if bloc
                 (progn
                   (setq
                     insert
                      (vla-InsertBlock
                        space
                        (vlax-3d-point coords)
                        "TCPOINT"
                        scl
                        scl
                        scl
                        0.0
                      )
                   )
                   (vla-put-Layer insert blklay)
                   (foreach att (vlax-invoke insert 'getAttributes)
                     (if
                       (and
                         (= (vla-get-TagString att) "MAT")
                         matric
                         (= mat "1")
                       )
                        (vla-put-TextString att matric)
                     )
                     (if
                       (and
                         (= (vla-get-TagString att) "ALT")
                         (= alt "1")
                       )
                        (vla-put-TextString att (rtos (caddr coords)))
                     )
                   )
                 )
               )
             )
           )
         )
         (close file)
         (vla-EndUndoMark *acdoc*)
       )
     )
   )
 )
 (princ)
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
         (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Je suis toujours aussi impressionné!!! Il est vraiment temps que je m'attarde sur le langage autolisp...

Chapeau à (gile), qui m'a permis de gagner beaucoup de temps dans mon boulot et s'avère très disponible quand il s'agit d'aider un autre dessinateur, ( :) preuve de le sympathie du personnage) , et qui s'avère un redoutable lispien...

 

Pour x_all : et si, on peut être en grève :) et aller quand même sur le site de cad'xp en attendant le départ de la manif... :cool:

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Merci Gile pour ce lisp qui à l'air très utile!!

J'ai quelques soucis avec....

 

Fichier texte :

 

0,0,0
10,20,0
30,30,0

 

Il me l'implante sur AutoCAD, mais si je localise le 1er point, il me renseigne

X = 0.00 Y = 0.00 Z = 0.00 (normal)

2ème point

X = 20.00 Y = 0.00 Z = 0.00 (y??)

3ème point

X = 30.00 Y = 0.00 Z = 0.00(y??)

 

Il semble avoir un problème avec les "Y"

 

Comment doit être formaté le fichier texte?? (x,y,z)

 

Merci

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

en ce jour de grève générale

J'ai posté hier soir...

 

Jalna,

 

Le fichier peut être formaté de différentes façons. D'après ce que j'ai pu voir (je ne suis pas vraiment dans cette partie), les coordonnées sont souvent précédées d'un numéro (matricule) ce qui n'est pas le cas dans l'exemple que tu donnes.

La partie "Format du fichier" de la boite de dialogue permet à l'utilisateur de renseigner le LISP sur ce format justement pour en permettre la lecture :

"Séparateur de données" dans ton cas la virgule mais on peut aussi spécifier point-virgule, espace ou tabulation.

"Séparateur décimal" généralement le point (défaut) mais dans certains fichiers ça peut être la virgule

"Matricule" présent (défaut) ou absent comme dans ton exemple (ce qui expliquerait que la coordonnée X est lue comme matricule, la coordonnée Y est lue comme coordonnée X etc...)

 

Exemples :

 

10,20,0 => séparateur données = virgule, séparateur décimal = point, matricule = absent

001;10,0;20,0;0,0 => séparateur données = point-virgule, séparateur décimal = virgule, matricule = présent

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Ok gile

Toujours au top au niveau précision!! :)

Je regarde demain et je te donne le résultat, tout en sa :) chant que cela va fonctionner!!

Merci de prendre du temps..............

Bonne soirée ;)

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

Salut!

Ok ça fonctionne!!!

:D

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Salut

 

La variable tmp est définit ici dans le lisp

(setq tmp (vl-filename-mktemp "Tmp.dcl")

 

Tu as bien un fichier écrit dans ton répertoire temporaire nommé Tmp001.dcl (ou Tmp002.dcl, Tmp003.dcl, etc..) ?

Non ?

Ton disque est plein ou on peut y écrire ?

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

L'erreur était probablement due à un smiley qui s'était glissé à la place d'une parenthèse. Parenthèse qui disparaissait alors dans le copier/coller.

C'est réparé.

 

Si toutefois c'était du à un problème avec la fonction vl-filename-mktemp et la version 2002, je met ici une version qui utilise un fichier DCL séparé (à enregistrer dans un répertoire du chemin de recherche sous "InsTopo.dcl"

 

Le LISP

 

;;; INSTOPO (gile)
;;; Insère le bloc "PointBloc" sur les points décrit dans un fichier ascii (.txt .csv ou autre)

(defun c:instopo (/	   *error*  makeblock	      filename tmp
	  file	   layers   lay	     data-sep dec-sep  mat-p
	  mat	   alt	    scl	     dcl_id   space    line
	  coords   matric   insert
	 )

 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))

 ;;---------------------------------------------------;;

 (defun *error* (msg)
   (or	(= msg "Fonction annulée")
(princ (strcat "Erreur: " msg))
   )
   (and file (close file))
   (vla-EndUndoMark *acdoc*)
   (princ)
 )

 ;;---------------------------------------------------;;

 ;; MakeBlock
 ;; Crée le bloc PointBloc
 (defun makeblock (/ block)
   (vl-load-com)
   (setq block	(vla-add *blocks*
		 (vlax-3d-point '(0. 0. 0.))
		 "PointBloc"
	)
   )
   (vla-put-Layer
     (vla-addPoint block (vlax-3d-point '(0. 0. 0.)))
     "0"
   )
   (vla-put-Layer
     (vla-addAttribute
block
2.5
acAttributeModePreset
""
(vlax-3d-point '(1. 0.5 0.))
"MAT"
""
     )
     "0"
   )
   (vla-put-Layer
     (vla-addAttribute
block
2.5
acAttributeModePreset
""
(vlax-3d-point '(1. -3. 0.))
"ALT"
""
     )
     "0"
   )
 )

 ;;---------------------------------------------------;;

 (if (setq filename (getfiled "Sélectionner un fichier point" "" "txt;csv;*" 0))
   (progn
     (vlax-for	l (vla-get-Layers *acdoc*)
(setq layers (cons (vla-get-Name l) layers))
     )
     (setq layers   (vl-sort layers '	    lay	     (getvar "CLAYER")
    data-sep "44"
    dec-sep  "dot"
    mat-p    "present"
    mat	     "1"
    alt	     "1"
    scl	     1.0
     )
     (setq dcl_id (load_dialog "InsTopo.dcl"))
     (if (not (new_dialog "InsTopo" dcl_id))
(exit)
     )
     (start_list "lay")
     (mapcar 'add_list layers)
     (end_list)
     (set_tile "lay" (itoa (vl-position lay layers)))
     (foreach k (list "data-sep" "dec-sep" "mat-p" "mat" "alt")
(action_tile k "(set (read $key) $value)")
     )
     (action_tile "lay" "(setq lay (nth (atoi $value) layers))")
     (action_tile
"scl"
"(setq scl (distof $value))
(while (or (not scl) (	(alert \"Nécessite un nombre réel strictement positif\")
(setq scl 1.0)
(set_tile \"scl\" \"1.0\")
(mode_tile \"scl\" 2))"
     )
     (action_tile "cancel" "(setq data-sep nil) (done_dialog 0)")
     (action_tile "accept" "(done_dialog 1)")
     (start_dialog)
     (unload_dialog dcl_id)
     (if data-sep
(progn
  (vla-StartUndoMark *acdoc*)
  (and (vl-catch-all-error-p
	 (vl-catch-all-apply
	   'vla-item
	   (list *blocks* "PointBloc")
	 )
       )
       (makeblock)
  )
  (setq	space (vla-get-ModelSpace *acdoc*)
	file  (open filename "r")
  )
  (while (setq line (read-line file))
    (setq coords (str2lst line (chr (atoi data-sep))))
    (if	(= mat-p "present")
      (setq matric (car coords)
	    coords (cdr coords)
      )
      (setq matric nil)
    )
    (if	(= dec-sep "com")
      (setq
	coords (mapcar
		 '(lambda (x)
		    (read (vl-string-translate "," "." x))
		  )
		 coords
	       )
      )
      (setq coords (mapcar 'read coords))
    )
    (setq coords (list (car coords)
		       (cadr coords)
		       (cond ((caddr coords))
			     (T 0.0)
		       )
		 )
    )
    (if	(vl-every 'numberp coords)
      (progn
	(setq
	  insert
	   (vla-InsertBlock
	     space
	     (vlax-3d-point
	       coords
	     )
	     "PointBloc"
	     scl
	     scl
	     scl
	     0.0
	   )
	)
	(vla-put-Layer insert lay)
	(foreach att (vlax-invoke insert 'getAttributes)
	  (if
	    (and
	      (= (vla-get-TagString att) "MAT")
	      matric
	      (= mat "1")
	    )
	     (vla-put-TextString att matric)
	  )
	  (if
	    (and
	      (= (vla-get-TagString att) "ALT")
	      (= alt "1")
	    )
	     (vla-put-TextString att (rtos (caddr coords)))
	  )
	)
      )
    )
  )
  (close file)
  (vla-EndUndoMark *acdoc*)
)
     )
   )
 )
 (princ)
)



;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)

(defun str2lst (str sep / pos)
 (if (setq pos (vl-string-search sep str))
   (cons (substr str 1 pos)
  (str2lst (substr str (+ (strlen sep) pos 1)) sep)
   )
   (list str)
 )
)

 

Le DCL

 

InsTopo :dialog
{
 label = "InsTopo";
 :boxed_row
 {
   label = "Format du fichier";
   :boxed_radio_column
   {
     label = "Séparateur de données";
     key = "data-sep";
     :radio_button
     {
       label = "Virgule";
       key = "44";
       value = "1";
     }
     :radio_button
     {
label = "Point-virgule";
key  = "59";
     }
     :radio_button
     {
label = "Espace";
key = "32";
     }
     :radio_button
     {
label = "Tabulation";
key = "9";
     }
   }
   :column
   {
     :boxed_radio_column
     {
       label = "Séparateur décimal";
       key="dec-sep";
       :radio_button
       {
         label = "Virgule";
         key = "com";
       }
:radio_button
{
  label = "Point";
  key = "dot";
  value = "1";
}
     }
     :boxed_radio_column
     {
       label = "Matricule";
       key = "mat-p";
  :radio_button
  {
    label = "Présent";
    key = "present";
    value = "1";
  }
  :radio_button
  {
    label = "Absent";
    key = "absent";
         }
       }
     }
   }
   :boxed_row
   {
     label = "Insertion du bloc";
     :boxed_column
     {
       label = "Attributs";
       :toggle
       {
         label = "Matricule";
         key = "mat";
         value = "1";
       }
       :toggle
       {
         label = "Altitude";
         key = "alt";
         value = "1";
       }
     }
     :column
     {
       spacer;
       :popup_list
     {
       label = "Calque";
       key = "lay";
       width = 32;
     }
     :edit_box
     {
       label = "Echelle  ";
       key = "scl";
       value = "1.0";
       fixed_width = true;
     }
     spacer;
   }
 }
 ok_cancel;
}

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 8 mois après...

Salut les pros de la codif .Gile peut tu preciser le format pour l'utilisation du fichier textes.

Par exemple j'ai ce format ci: 1 690000.000 1160010.000 452.623

Peut il etre compris par ton lisp???

DAO: AutoCAD(2D & 3D), Covadis

CAO: 3D's MAX, Rhinoceros 3D, REVIT

GeoModeliSation: AutoCAD MEP, RhinoTerrain

Rendu: Vray for Rhino, Keyshot, Lumion

Programmation: Grasshopper, Dynamo, VisualStudio

 

C.V.

Profil LinkedIn

Book

Site web

 

http://nsa37.casimages.com/img/2016/09/26/160926023334168603.jpg

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Après choix de ton fichier, la DCL te propose le format de ton .txt ou .csv à régler,

 

A priori, tes réglages dovent être les suivants =>

 

http://free0.hiboox.com/images/4409/f5f8a1c82cce99f3a9ff489f33ab89d5.jpg

 

 

As-tu essayé ?

Civil 3D 2025 - COVADIS_18.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

 

Hello Gilles

 

SVP peux tu faire un ZIP avec ton nouveau INSTOPO !

et un lien pour le telechargement ...

car les copier / coller ne sont pas toujours parfaits !?

 

Merci pour l'amelioration, car en effet utiliser un bloc peut s'averer fort interessant !

 

Le Decapode

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

InsTopo ne fonctionne qu'avec des fichiers ascii : txt, ou csv, par exemple, mais pas avec les fichiers xls.

 

Pour qu'il soit le plus polyvalent possible (qu'il fonctionne avec différents types de fichiers), j'ai mis, dans le haut de la boite de dialogue, des boutons radios concernant le format du fichier, il faut que ces options soient correctement paramétrées pour que le LISP puis lire le fichier sans erreurs :

- séparateur de données

- séparateur décimal

- matricule

Si les points sont numérotés (ils ont un "matricule") il faut cocher "Présent", s'ils sont simplement listés "Absent"

Voir réponse 4.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é