COMate avec Excel

Programmation d'applications complexes
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

COMate avec Excel

Message par Malo »

Bonjour

Pour résoudre mes problèmes avec Excel sur les conseils de KCC j'ai commencé
à utiliser COMate qui permet certainement de réaliser pas mal de choses.
Si j'ai compris un peu COMate pour Excel, une fois que l'on a créer l'ObjetExcel on utilise
les propriétés et méthode comme en VBA ex:

Ajout d'un classeur avec COMate :WorkBook = ExcelObject\GetObjectProperty("Workbooks\Add")
Ajout d'un classeur en VBA : Workbooks.Add

J'arrive également à :
ouvrir un classeur avec un nb de feuille déterminées
sélectionner la feuille qui m'intérresse
de remplir une cellule et de la formater

Ce que je n'arrive pas à faire :
Ouvrir un fichier existant
En VBA : Workbooks.Open Filename:="C:\Repertoire 1\Prog\Classeur.xls", password:="blabla"

Ecrire dans des cellules avec une boucle
En VBA
c = 1
r = 1
valcel = 0
For i = 1 To 10
Cells(r, c) = valcel
valcel = valcel + 10
r = r + 2
Next

Enregistrer le document actif
En VBA
ActiveWorkbook.SaveAs Filename:="D:\ProgPureBasic\ClasseurXXX.xls"
FileFormat:=xlNormal, Password:="blabla", WriteResPassword:="blabla"


J'espère que vous allez pouvoir m'apporter quelques réponses à mes questions.
Merci par avance.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: COMate avec Excel

Message par Kwai chang caine »

Sur le forum FR pas beaucoup de monde utilisent COMATE, ou alors personne n'en parle.
Peut etre que quelqu'un pourra t'aider, mais sinon il va falloir sortir les livres d'anglais de l'armoire :D

Tout ce que je peux te dire, car j'ai aussi beaucoup de mal a utiliser cette librarie, c'est que pour les createurs ainsi que KIFFY, TsSoft etc ça leur parait tres simple.

En fait SROD s'est arrangé pour creer les fonctions de base du OLE.
Les connections aux objets, les envois d'ordres par le COM

De ce que j'ai compris, il n'y a pas beaucoups de commandes differentes.....
La seule chose c'est que y'a une commande du style INVOKE, une fonction (moi je l'appelle comme ça), et le ou les parametres a envoyer que necessite la fonction.

En fin de compte une fois que tu as compris le principe, (ce qui ne m'est encore pas arrivé :cry: ), il te suffit de "piquer" un code VB....et de le "traduire" avec les quelques fonctions extra puissantes de COMATE.
En principe..tout ce que peut faire VB....COMATE peut le faire....le tout est de comprendre la syntaxe.

Il y a de nombreux exemples de COMATE, il faut les croiser et essayer de comprendre le mecanisme.
Apres tu pourra de toi meme creer tes commandes COM :wink:

Si personne ne peut te repondre sur le FR.
Fait des recherches sur le US des fois que quelqu'un ai deja posé le meme style de questions, car tu sais personne n'aime dans les forums que l'on pose plusieurs fois la meme question.
Commence a construire ton code, avec les commandes de COMATE, et apres demande gentillement a SROD, si il pourrait pas t'aider.
Avec de la patience, de la courtoisie tout est possible... :D
C'est comme ça que j'ai procédé, et j'ai toujours eu satisfaction ce dont je le remercie 8)
Parfois c'est meme KIFFY ou TsSoft des caids en la matiere ou meme d'autres qui pourront t'aider. 8)

En tout cas ce sont des gens qui sont tres souvent sur le forum.
TsSoft m'avait aussi beaucoup aidé et est tres reactif, mais c'est avec sa lib PureDishelper qui n'est pas opensource.
C'est presque la meme chose, mais pas tout a fait la meme syntaxe

Quand a SROD il est sur tous les terrains en meme temps et il chome pas, alors esperont qu'il pourra te consacrer un peu de son precieux temps :roll:
En tout cas ils preferent que tu bosse un peu en essayant de creer le code....(sans mettre trop n'importe quoi hein :wink:)
Que quand tu leur pose directement la question sans rien donner :?

D'ailleurs c'est aussi un peu le cas ici :D

Voila...désolé de ne pas pouvoir t'aider plus...
Comme je te l'ai dit....ça fait 4 ans que je suis un debutant :(
Et pourtant c'est pas faute de me defoncer de 12 a 13 h par jour.... :oops:

Dans ma famille on est tous des ouvriers et ma mere n'a pas jugé bon de prendre l'option "brain inside" ça sert a rien pour monter les moellons :?
D'ailleurs programmer pour ma famille c'est presque une "tare"...c'est synonyme de "jouer" 8O
Et dans la vie .....comme ils disent.....y'a pas que le jeux .....y'a surtout le "vrai" travail :?
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

Re: COMate avec Excel

Message par Malo »

Merci pour ta réponse , je vais aller faire un tour du côté de chez SROD.
Avant de poster j'avais quand même essayé plusieurs trucs avec COMate, comme je fais du VBA
surtout avec Excel et un peu Acces, j'avais essayer de transcrire, mais comme tu dis il faut comprendre le mécanisme de COMate.
Bon je vais aller écumer les autres forum, avec Google pour la traduction je vais peut être réussir.
J'espère revenir avec quelques nouvelles sur ce post.
A bientôt.........
Malo
Messages : 79
Inscription : dim. 09/août/2009 17:48

Re: Résolu :COMate avec Excel

Message par Malo »

Bonjour

J'ai résolu mon problème entre COMate et Excel , je mets ces quelques codes en lignes, cela
pourra peut être servir à quelqu'un.

Code : Tout sélectionner

IncludePath "..\"; chemin de COMatePlus ici c'est  le dossier parent de votre sous repertoire
XIncludeFile "COMatePLUS.pbi"

Define.COMateObject Exl
Define.COMateObject Workbook
Define.COMateObject WorkSheet
Define.COMateObject Sheet
Define.COMateObject Range

mois$="septembre"
an$="2009"

hStatement = COMate_PrepareStatement("Cells(" + Str(@row) + " As long BYREF," + Str(@col) + " As long BYREF) = " + Str(@value) + " As string BYREF")
  If hStatement = 0
    MessageRequester("COMatePLUS!", "Couldn't create the statement!" + #CRLF$ + #CRLF$ + "COMatePLUS error : " + COMate_GetLastErrorDescription())
    
  EndIf
  

  Exl = COMate_CreateObject("Excel.Application")
If Exl
  If Exl\SetProperty("Visible = #True") = #S_OK
  
  ;ouvrir un fichier existant
      Workbook=Exl\GetObjectProperty("Workbooks\Open('C:\MonRepertoire\ClasseurPB.xls')")
    
  ;enregistrer un fichier avec un nom spécifique
      leFichierSave$= "ActiveWorkbook\SaveAs ('C:\MonRepertoire\Classeur_2_PB.xls')"
  ;ou si l'on veut construire le nom du fichier 
      leFichierSave0$=mois$+an$+".xls"
      leFichierSave$= "ActiveWorkbook\SaveAs ('C:\MonRepertoire\" + leFichierSave0$ + "')"
      Workbook= Exl\GetObjectProperty(leFichierSave$)
      
     
  ;activer un classeur
  Workbook= Exl\GetObjectProperty("ActiveWorkbook")
  
  ;Supprimer la feuille 1  
      WorkSheet = Workbook\GetObjectProperty("worksheets(1)\Delete")
  
  ;sélectionner une feuille
      Sheet = Workbook\GetObjectProperty("worksheets(2)\select")
      
  ;activer une feuille
  Sheet = Workbook\GetObjectProperty("ActiveSheet")
  
  ;En ce qui concerne l'écriture avec une boucle sur plusieurs cellules contigues
  ; il fuat utiliser COMatePlus et se service de PrepareStatement, cela fon   ctionne très bien.
  j=1
  For col = 5 To 45 
          For row = 10 To 110
            value = COMate_MakeBSTR( Str(j))
            ;Execute  prepared statement.
             Exl\SetProperty("", hStatement)
             SysFreeString_(value)
              j=j+1
          Next
        Next
    Exl\Invoke("Quit()") 
    Workbook\Release()
  EndIf
  Exl\Release()
EndIf  
  
Je vous invite a aller voir http://www.purebasic.fr/french/viewtopic.php?f=3&t=5812
ou il y a du code très intéressant sur COMate.

Il me reste quand même certains points à régler, mais là je crois que je vais intérroger les gens du forum anglais.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: COMate avec Excel

Message par Kwai chang caine »

Je te remercie MALO de ton partage.
Etant moi-meme un passionné de la question, ton code me sera surement utile un jour

Encore merci et au plaisir 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Répondre