Travailler sur Microsoft Office (Excel) avec Purebasic ?

Programmation d'applications complexes
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Travailler sur Microsoft Office (Excel) avec Purebasic ?

Message par Cls »

Bonjour,
je voudrais savoir s'il est possible de créer, modifier, supprimer des données à l'intérieur d'un document Office (incluant les données, les VBA, etc...) ?

J'ai entendu parler du fichier TlbImp.exe permettant de créer une librairie Excel.dll contenant des fonctions de mofication d'un .xls par exemple. Cependant je ne crois pas que cette méthode permette d'utiliser ces fonctions avec n'importe quel langage. Il est seulement possible de l'utiliser avec .NET.
With the help of TlbImp.exe tool we can generate .NET assembly from Type library files and we can use that functionality of Type library file in C#.
http://www.c-sharpcorner.com/Code/2002/ ... eetGAG.asp
Merci d'avance !
Cls
Dernière modification par Cls le ven. 24/juin/2005 9:19, modifié 1 fois.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Déontologiquement parlant Billoux va être furax qu'on trifouille dans les tripes d'un fichier d'Excel :lol:
Est beau ce qui plaît sans concept :)
Speedy Galerie
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Bof il a rien à cacher, à part des noms d'utilisateur, des adresses MAC, des numéros de série, des mots de passe, bref le grand classique quoi... :evil: !
Avatar de l’utilisateur
Droopy
Messages : 1151
Inscription : lun. 19/juil./2004 22:31

Message par Droopy »

Regarde le forum US
Il y a des solutions pour lire/modifier des fichiers XLS
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

J'ai regardé tout ça déjà. Les solutions existent mais elles sont compliquées pour le moment...
Mon problème, c'est que j'ai surtout besoin d'insérer du code VBA dans la feuille Excel. J'ai peut - être mal lu, mais je crois que ce n'est pas possible pour l'instant en tout cas.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

y'a des codes pour executer des macros via OLE...

tu ouvres l'app, tu executes des actions clavier/souris...

le code :

Code : Tout sélectionner

IncludeFile "sendkeys.pbi"
; SendKeys procedure by PB -- do whatever you want with it.  :) 
; Syntax: r=SendKeys(handle,window$,key$) ; r = 0 for failure. 
; Specify either a handle or window$ title to type to, but not both! 
; You cannot type curly braces { } as part of the keystrokes, sorry! 

SendKeys(GetDesktopWindow_(),"","{WINDOWS}r") ; Open the RUN dialog. 
Delay(1000) ; Give it about one second to open, just in case! 
SendKeys(0,"executer","notepad.exe{ENTER}") ; Tell it to run Notepad. 
Delay(1000) ; Another small delay to allow Notepad time to open. 
SendKeys(0,"Untitled - Notepad","Doesn't PureBasic kick butt!") 

Code : Tout sélectionner

; SendKeys procedure by PB -- do whatever you want with it.  :) 
; Syntax: r=SendKeys(handle,window$,key$) ; r = 0 for failure. 
; Specify either a handle or window$ title to type to, but not both! 
; You cannot type curly braces { } as part of the keystrokes, sorry! 

Procedure SendKeys(handle,window$,keys$) 
  If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle. 
  If IsWindow_(handle)=0 ; Does the target window actually exist? 
    ProcedureReturn 0 ; Nope, so report 0 for failure to type. 
  Else 
    ; This block gives the target window the focus before typing. 
    thread1=GetWindowThreadProcessID_(GetForegroundWindow_(),0) 
    thread2=GetWindowThreadProcessID_(handle,0) 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf 
    SetForegroundWindow_(handle) ; Target window now has the focus for typing. 
    Sleep_(125) ; 1/8 second pause before typing to prevent fast CPU problems. 
    ; Now the actual typing starts. 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key before typing. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key before typing. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key before typing. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key before typing. 
    For r=1 To Len(keys$) 
      vk$=Mid(keys$,r,1) 
      If vk$="{" ; Special key found. 
        s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key. 
        s$=Mid(keys$,r+1,s) ; Get special key name. 
        Select s$ ; Get virtual key code of special key. 
          Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down. 
          Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT. 
          Case "BACKSPACE" : vk=#VK_BACK 
          Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down. 
          Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL. 
          Case "DELAY" : vk=0 : Sleep_(1000) ; Delay typing for one second. 
          Case "DELETE" : vk=#VK_DELETE 
          Case "DOWN" : vk=#VK_DOWN 
          Case "END" : vk=#VK_END 
          Case "ENTER" : vk=#VK_RETURN 
          Case "ESCAPE" : vk=#VK_ESCAPE 
          Case "F1" : vk=#VK_F1 
          Case "F2" : vk=#VK_F2 
          Case "F3" : vk=#VK_F3 
          Case "F4" : vk=#VK_F4 
          Case "F5" : vk=#VK_F5 
          Case "F6" : vk=#VK_F6 
          Case "F7" : vk=#VK_F7 
          Case "F8" : vk=#VK_F8 
          Case "F9" : vk=#VK_F9 
          Case "F10" : vk=#VK_F10 
          Case "F11" : vk=#VK_F11 
          Case "F12" : vk=#VK_F12 
          Case "HOME" : vk=#VK_HOME 
          Case "INSERT" : vk=#VK_INSERT 
          Case "LEFT" : vk=#VK_LEFT 
          Case "PAGEDOWN" : vk=#VK_NEXT 
          Case "PAGEUP" : vk=#VK_PRIOR 
          Case "PRINTSCREEN" : vk=#VK_SNAPSHOT 
          Case "RETURN" : vk=#VK_RETURN 
          Case "RIGHT" : vk=#VK_RIGHT 
          Case "SPACE" : vk=#VK_SPACE 
          Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down. 
          Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT. 
          Case "TAB" : vk=#VK_TAB 
          Case "UP" : vk=#VK_UP 
          Case "WINDOWS" : vk=#VK_LWIN 
        EndSelect 
        If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT" 
          keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key. 
        EndIf 
        r+s+1 ; Continue getting the keystrokes that follow the special key. 
      Else 
        vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found. 
        If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character. 
        keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key. 
        If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character. 
      EndIf 
    Next 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window! 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key in case user forgot. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key in case user forgot. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key in case user forgot. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key in case user forgot. 
    ProcedureReturn 1 ; Report successful typing!  :) 
  EndIf 
EndProcedure 
 
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

un autre code qui marche mieux , cela envoie des chaines de texte dans AutoCad, comme avec le DDE sous Windows 3.1

c'est un mixage de trucs piochés à droite et à gauche...

Code : Tout sélectionner

#RC = Chr(13)

Structure STR_ACAD_INFO
  Acad_title.s
  Acad_hWnd.l
EndStructure

Global AutoCAD_TEXT.STR_ACAD_INFO
Global AutoCAD_GRAF.STR_ACAD_INFO

; SendKeys procedure by PB -- do whatever you want with it.  :) 
; Syntax: r=SendKeys(handle,window$,key$) ; r = 0 for failure. 
; Specify either a handle or window$ title to type to, but not both! 
; You cannot type curly braces { } as part of the keystrokes, sorry! 
Procedure SendKeys(handle,window$,keys$) 
  If window$<>"" : handle=FindWindow_(0,window$) : EndIf ; Use window$ instead of handle. 
  If IsWindow_(handle)=0 ; Does the target window actually exist? 
    ProcedureReturn 0 ; Nope, so report 0 for failure to type. 
  Else 
    ; This block gives the target window the focus before typing. 
    thread1=GetWindowThreadProcessID_(GetForegroundWindow_(),0) 
    thread2=GetWindowThreadProcessID_(handle,0) 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#True) : EndIf 
    SetForegroundWindow_(handle) ; Target window now has the focus for typing. 
    Sleep_(125) ; 1/8 second pause before typing to prevent fast CPU problems. 
    ; Now the actual typing starts. 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key before typing. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key before typing. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key before typing. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key before typing. 
    For r=1 To Len(keys$) 
      vk$=Mid(keys$,r,1) 
      If vk$="{" ; Special key found. 
        s=FindString(keys$,"}",r+1)-(r+1) ; Get length of special key. 
        s$=Mid(keys$,r+1,s) ; Get special key name. 
        Select s$ ; Get virtual key code of special key. 
          Case "ALTDOWN" : keybd_event_(#VK_MENU,0,0,0) ; Hold ALT down. 
          Case "ALTUP" : keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT. 
          Case "BACKSPACE" : vk=#VK_BACK 
          Case "CONTROLDOWN" : keybd_event_(#VK_CONTROL,0,0,0) ; Hold CONTROL down. 
          Case "CONTROLUP" : keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL. 
          Case "DELAY" : vk=0 : Sleep_(1000) ; Delay typing for one second. 
          Case "DELETE" : vk=#VK_DELETE 
          Case "DOWN" : vk=#VK_DOWN 
          Case "END" : vk=#VK_END 
          Case "ENTER" : vk=#VK_RETURN 
          Case "ESCAPE" : vk=#VK_ESCAPE 
          Case "F1" : vk=#VK_F1 
          Case "F2" : vk=#VK_F2 
          Case "F3" : vk=#VK_F3 
          Case "F4" : vk=#VK_F4 
          Case "F5" : vk=#VK_F5 
          Case "F6" : vk=#VK_F6 
          Case "F7" : vk=#VK_F7 
          Case "F8" : vk=#VK_F8 
          Case "F9" : vk=#VK_F9 
          Case "F10" : vk=#VK_F10 
          Case "F11" : vk=#VK_F11 
          Case "F12" : vk=#VK_F12 
          Case "HOME" : vk=#VK_HOME 
          Case "INSERT" : vk=#VK_INSERT 
          Case "LEFT" : vk=#VK_LEFT 
          Case "PAGEDOWN" : vk=#VK_NEXT 
          Case "PAGEUP" : vk=#VK_PRIOR 
          Case "PRINTSCREEN" : vk=#VK_SNAPSHOT 
          Case "RETURN" : vk=#VK_RETURN 
          Case "RIGHT" : vk=#VK_RIGHT 
          Case "SPACE" : vk=#VK_SPACE 
          Case "SHIFTDOWN" : shifted=1 : keybd_event_(#VK_SHIFT,0,0,0) ; Hold SHIFT down. 
          Case "SHIFTUP" : shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT. 
          Case "TAB" : vk=#VK_TAB 
          Case "UP" : vk=#VK_UP 
          Case "WINDOWS" : vk=#VK_LWIN 
        EndSelect 
        If Left(s$,3)<>"ALT" And Left(s$,7)<>"CONTROL" And Left(s$,5)<>"SHIFT" 
          keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the special key. 
        EndIf 
        r+s+1 ; Continue getting the keystrokes that follow the special key. 
      Else 
        vk=VkKeyScanEx_(Asc(vk$),GetKeyboardLayout_(0)) ; Normal key found. 
        If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,0,0) : EndIf ; Due to shifted character. 
        keybd_event_(vk,0,0,0) : keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key. 
        If vk>303 And shifted=0 : keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) : EndIf ; Due to shifted character. 
      EndIf 
    Next 
    If thread1<>thread2 : AttachThreadInput_(thread1,thread2,#False) : EndIf ; Finished typing to target window! 
    keybd_event_(#VK_MENU,0,#KEYEVENTF_KEYUP,0) ; Release ALT key in case user forgot. 
    keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) ; Release CONTROL key in case user forgot. 
    keybd_event_(#VK_SHIFT,0,#KEYEVENTF_KEYUP,0) ; Release SHIFT key in case user forgot. 
    keybd_event_(#VK_LWIN,0,#KEYEVENTF_KEYUP,0) ; Release WINDOWS key in case user forgot. 
    ProcedureReturn 1 ; Report successful typing!  :) 
  EndIf 
EndProcedure 
Procedure Fenetres_Ouvertes()
  txt.s
  hWnd.l = FindWindow_( 0, 0 )
  
  While hWnd <> 0
    If GetWindowLong_(hWnd, #GWL_STYLE) & #WS_VISIBLE = #WS_VISIBLE ; pour lister que les fenêtres visibles
      If GetWindowLong_(hWnd, #GWL_EXSTYLE) & #WS_EX_TOOLWINDOW <> #WS_EX_TOOLWINDOW ; pour lister que les fenêtres qui ne sont pas des ToolWindow ou barre d'outils
        txt = Space(256)
        GetWindowText_(hWnd, txt, 256)
        If FindString(UCase(txt),"AUTOCAD LT",1) <> 0
          If FindString(UCase(txt),"TEXTE",1) <> 0
            AutoCAD_TEXT\Acad_title = txt
            AutoCAD_TEXT\Acad_hWnd = hWnd
          Else
            AutoCAD_GRAF\Acad_title = txt
            AutoCAD_GRAF\Acad_hWnd = hWnd
          EndIf
        EndIf
      EndIf
    EndIf
    hWnd = GetWindow_(hWnd, #GW_HWNDNEXT)
  Wend
EndProcedure

Fenetres_Ouvertes()

;cmd.s = "cecolor"+#RC+"1"+#RC+"_LINE"+#RC+"0,0"+#RC+"100,100"+#RC+#RC
cmd.s = "-accrobj"+#RC+"AUCUN"+#RC
SendKeys(AutoCAD_GRAF\Acad_hWnd,"",cmd) 
cmd.s = "_LINE"+#RC+"@0,0"+#RC+"@100,0"+#RC+"@0,10"+#RC+"@-90,0"+#RC
SendKeys(AutoCAD_GRAF\Acad_hWnd,"",cmd)  
Yves Rouquier
Messages : 40
Inscription : mar. 23/mars/2004 10:23

Message par Yves Rouquier »

Merci
Ce bout de code marche super bien pour autocad !
le hazard fait bien les chose , je cherchais justement ce type de code
depuis quelque temp.
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

Yves Rouquier a écrit :Merci
Ce bout de code marche super bien pour autocad !
le hazard fait bien les chose , je cherchais justement ce type de code
depuis quelque temp.
voui... à l'époque d'autocad 12 je mettais fait une palette d'outils supplémentaire en delphi 16 en utilisant le dde en adaptant du code C (ADS)

y'a un autre truc super avec autocad, si tu ouvre une fenêtre internet explorer et que tu fais un glisser lacher d'un fichier autocad, internet explorer ouvre le fichier , tu peux zoomé, impreimer ... etc le dessin, c'est peut-être lié à voloview ou autocad 2005... j'ai pensé faire une bibliothèque de boulon ecrou vis .... visualisation avec int. explorer et insertion dans avec ce code

dans le m^me genre en utilisant les info fournies sur le site de open-dwg alliance, un bote de code pour lire le fichier image contenu dans les dessins autocad... code incomplet ( toutes les infos ne sont pas fournies par le opendwg alliance ou alors faut raquer ....

le code :

Code : Tout sélectionner

  ; b	:	bit (1 Or 0)
	; BB	:	special 2 bit code (entmode in entities, For instance)
	; BS	:	bitshort
	; BL	:	bitlong
	; BD	:	bitdouble
	; 2BD	:	2D Point (2 bitdoubles)
	; 3BD	:	3D Point (3 bitdoubles)
	; RC	:	raw char (not compressed)
	; RS	:	raw short (not compressed)
	; RD	:	raw double (not compressed)
	; RL	:	raw long (not compressed)
	; 2RD	:	2 raw doubles
	; 3RD	:	3 raw doubles
	; MC	:	modular char
	; MS	:	modular short
	; H	:	handle reference (see the handle REFERENCES section)
	; T	:	text  (bitshort length, followed by the string).
	; x	:	special form
	; U	:	unknown
	; SN	:	16 byte sentinel
	; BE	:	BitExtrusion
	; DD	:	bitdouble With Default
	; BT	:	BitThickness
	; 3DD	:	3D point as 3 DD, needing 3 Default values


; Start sentinel
; {0x1F,0x25,0x6D,0x07,0xD4,0x36,0x28,0x28,0x9D,0x57,0xCA,0x3F,0x9D,0x44,0x10,0x2B }
	; overall size	RL		overall size of image area
	; imagespresent	RC		counter indicating what is present here
; Repeat imagespresent times {  
	; Code	RC		Code indicating what follows
  ; If (Code==1) {
	; header Data Start	RL		Start of header Data
   	; header Data size	RL		size of header Data
  ; }
  ; If (Code == 2) {
    	; Start of bmp	RL		Start of bmp Data
    	; size of bmp	RL		size of bmp Data
  ; }
  ; If (Code == 3) {
    	; Start of wmf	RL		Start of wmf Data
    	; size of wmf	RL		size of wmf Data
  ; }
; }
; If (bmpdata is present) {
   	; bmp Data	RC		(there are “size of bmp” bytes of Data)
; }
; If (wmfdata is present) {
	; wmf Data	RC		(there are “size of wmf” bytes of Data)
; }
; End sentinel
; 0xE0,0xDA,0x92,0xF8,0x2B,0xc9,0xD7,0xD7,0x62,0xA8,0x35,0xC0,0x62,0xBB,0xEF,0xD4 };

Enumeration
  #WIN_MAIN
EndEnumeration

DataSection
  DATA_IMAGE_SENTINEL:
  Data.b $1F,$25,$6D,$07,$D4,$36,$28,$28,$9D,$57,$CA,$3F,$9D,$44,$10,$2B 
EndDataSection

Structure STRU_VERSION_ID
  tampon.b[6]
EndStructure

Structure STRU_IMAGE_SENTINEL
  tampon.b[16]
EndStructure

Global VERSION_ID.STRU_VERSION_ID
Global IMAGE_SEEKER.l
Global IMAGE_SENTINEL.STRU_IMAGE_SENTINEL
Global overall_size.l
Global imagespresent.b

Procedure TextXY(x.w,y.w,ch.s)
  If StartDrawing(WindowOutput())
    Locate(x,y)
    DrawText(ch)
    StopDrawing()
  EndIf
EndProcedure

Procedure redess()
  lig.w = 5
  If ReadFile(0,"P0100.dwg")
    CallDebugger
    result = ReadData(@VERSION_ID,SizeOf(STRU_VERSION_ID))
    chaine.s = ""
    For i = 0 To 5
      chaine = chaine + Chr(VERSION_ID\tampon[i])
    Next
    TextXY(5,lig,"DWG ver: "+chaine):lig+20
    FileSeek($0D)
    IMAGE_SEEKER = ReadLong()
    FileSeek(IMAGE_SEEKER)
    result = ReadData(@IMAGE_SENTINEL,SizeOf(STRU_IMAGE_SENTINEL))
    
    Restore DATA_IMAGE_SENTINEL
    octet.b = 0 : result = 0 : chaine.s = ""
    For i=0 To 15
      Read octet
      octet = octet&$FF
      chaine = chaine +  Hex(IMAGE_SENTINEL\tampon[i])
      If IMAGE_SENTINEL\tampon[i] = octet
        result+1
      EndIf
    Next
    If result = 16
      TextXY(5,lig,"IMAGE SENTINEL TROUVEE EN "+Str(IMAGE_SEEKER)):lig+20
      TextXY(5,lig,chaine):lig+20
      
      overall_size = ReadLong()
      TextXY(5,lig,"overall size of image area = "+Str(overall_size)):lig+20
      
      imagespresent = ReadByte()
      TextXY(5,lig,"counter indicating what is present here = "+Str(imagespresent)):lig+20
      
      Select imagespresent
        Case 1 
          TextXY(5,lig,"header Data"):lig+20
        Case 2 
          TextXY(5,lig,"header BMP"):lig+20
        Case 3 
          TextXY(5,lig,"header WMF"):lig+20
      EndSelect
  
    EndIf
    CloseFile(0)
  EndIf
EndProcedure

Procedure efface()
  If StartDrawing(WindowOutput())
    Box(0,0,800,400,RGB(255,255,255))
    StopDrawing()
  EndIf
      
EndProcedure
If OpenWindow(#WIN_MAIN,0,0,800,400,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"")
efface()
redess()
Repeat
  e = WaitWindowEvent()
  
  Select e
    
      
    Case #PB_Event_CloseWindow
      quit = 1
  EndSelect
Until quit<>0

EndIf 
pat
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

oups, le fichier p0100.dwg qui m'a servit à debugger

http://patrick.claude.free.fr/p0100.dwg

bon courage....
Cls
Messages : 620
Inscription : mer. 22/juin/2005 8:51
Localisation : Nantes

Message par Cls »

Très intéréssant comme procédure, merci pour ces réponses que je ne vois que tardivement ! Cela va m'être très utile pour mes travaux futurs.
Merci encore, à bientôt !
Répondre