La gpetite débutante que je suis s'ets lancée dans un projet et je suis en rade complète.
Voila le topo :
J'ai d'un côté un fichier excel avec différentes colones A B et C et un paquet de lignes.
Dans ma Form j'ai 4 ComboBox et ce que je souhaite faire c'est que mon prog garde en mémoire les choix des ComboBox (enfin çà je sais le faire), ouvre excel et lance une recherche avec les critères choisis dans les combobox pour me retourner le contenu d'une cellule (et çà je sais pas faire).
Chais pas si c'est très clair, mais ce que je ne parviens pas à faire c'est : lui demander d'ouvrir excel, de lancer la recherche des choix des combobox et de me retourner le contenu de la cellule correspondante...
J'ai trouvé + ou - des explications mais je ne m'en sors pas du tout donc un peu d'aide serait la bienvenue :)
Si biensure c'est possible. Perso je connais pas les commandes Ole pour faire un filtre dans excel.
Alors pour avoir les commandes ole tu dois avoir le code visual basic excel de ce que tu veux faire puis l'adapter en ole sous Delphi.
Dans ce cas la le plus simple c'est de faire une macro en visual basic dans ton fichier excel puis ensuite quand tu fais ta connection ole avec le fichier excel tu lances ta macro et hop le tour est joué.
Pour info pour lancer une macro la commande est la suivante :
OleApplication.Run('Start'); {Avec "Start" le nom de ta macro}
Pour récupérer le contenu d'une cellule, tu peux utiliser les méthodes getvalue et getcellbyposition.
getvalue: récupère la valeur d'une cellule
getbyposition: permet d'accéder à une cellule
var feuilleclass, classeur, valeur:variant;
colonne,ligne:word;
begin
// on lance Excel tout en ouvrant le classeur "c:\fichier.xls"
classeur:=excelapplication1.workbooks.open('c:\fichier.xls',
false, false, emptyparam, emptyparam, emptyparam,
emptyparam, emptyparam, emptyparam,
emptyparam, emptyparam, emptyparam,
emptyparam, 0);
// ensuite on accède à une cellule depuis ce classeur
classeur:=document.getsheets;
feuilleclass:=classeur.getbyname('nom_de_la_feuille');
valeur:=feuilleclass:=getcellbyposition(colonne,ligne).getvalue;
end;
Tu peux utiliser la procédure SetValue si tu désire plutôt modifier le contenu d'une cellule.
Je ne te promets pas que ça marchera(car je l'ai écrit à la volée) mais sache tout de même que c'est la démarche à suivre. Tu peux aussi utiliser l'éditeur Visual Basic livré avec la suite Office.
Previens moi si ça t'a aidé.
S'il y a des erreurs éventuelles dans du code, je suis ouvert aux critiques du forum.
Au fait j'ai oublié une chose très importante.
lorsque tu accède à une cellule directement depuis un classeur comme c'est le cas dans le code ci-dessus, tu peux faire cette déclaration:
var classeur: _workbook; //plutôt que var classeur: variant;