Des soucis avec Excel sous Delphi [Résolu]

Tykko 4 Messages postés mercredi 18 mai 2005Date d'inscription 19 mai 2005 Dernière intervention - 18 mai 2005 à 14:42 - Dernière réponse : Tykko 4 Messages postés mercredi 18 mai 2005Date d'inscription 19 mai 2005 Dernière intervention
- 19 mai 2005 à 13:57
Bonjour à tous :)



Je dois réaliser une application en Delphi pour une entreprise et pour
cela j'ai besoin de charger une feuille Excel servant en quelque sorte
de "base de données".

J'ai lu avec attention (enfin essayé ) les divers messages déjà postés ici, mais je n'ai pas trouvé la solution à mon problème actuel



Je souhaite connaitre à l'avance le nombre de lignes de la première
colonne de la feuille Excel pour adapter la taille d'un StringGrid au
lancement de l'application.

Pour ça je cherche donc à sélectionner la premier colonne avec FeuilleTest.Range['A1',EmptyParam].EntireRow;

Ensuite ... bin c'est là tout le problème, je
n'arrive pas à déterminer le nombre de cellules de cette colonne qui
sont occupées par du texte sans avoir à faire un parcours entier avec
une boucle et incrémentation d'une variable. Je trouve ça assez
étonnant et il doit sans aucun doute me manquer LA propriété qui va
bien



Merci d'avance



Tykko
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
moldov 168 Messages postés mercredi 8 octobre 2003Date d'inscription 10 novembre 2008 Dernière intervention - 19 mai 2005 à 11:56
3
Merci
Salut,



J'ai oublier de te filer les déclarations des variables



OleApplication, OleWorkBook, sheet : Variant;

iCol, iRow : Integer;



Bonne Prog

Merci moldov 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de moldov
Meilleure réponse
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 19 mai 2005 à 13:01
3
Merci
Avec la méthode find cité plus haut, c'est Excel qui gèrait la boucle en interne. Moi je voyais le code comme suit :

OleApplication := CreateOleObject('Excel.Application'); // création du lien OLE
OleWorkBook:=OleApplication.Workbooks.open(NomDeTonfichierExcel);
Sheet := OleWorkBook.Sheets[NomDeTaFeuille];

MaSelection := Sheet. range("A:A").Find("", range("A:A").Cells(1, 1), xlValues, xlPart)
iRow : = MaSelection.Cells(1,1).row

OleApplication.Quit;
OleApplication:=Unassigned;

N.B. N'ayant pas d'excel sous la main, impossible de savoir si cela fonctionne.

Cordialement.

Merci WhiteHippo 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de WhiteHippo
WhiteHippo 1270 Messages postés samedi 14 août 2004Date d'inscription 5 avril 2012 Dernière intervention - 19 mai 2005 à 00:16
0
Merci
Peut être en recherchant la première cellule vide avec une méthode Find.

En VBA cela doit ressembler à quelquechose comme ça :

Dim ZoneRecherche, PremiereCelluleVide

Set ZoneRecherche = Sheets("FeuilleTest").Range("A1:A1")
Set PremiereCelluleVide = ZoneRecherche .Find("", ZoneRecherche.Cells(1, 1), xlValues, xlPart)

( y'a plu qu'à l'adapter à Delphi )

Cordialement.
Commenter la réponse de WhiteHippo
Tykko 4 Messages postés mercredi 18 mai 2005Date d'inscription 19 mai 2005 Dernière intervention - 19 mai 2005 à 08:43
0
Merci
Warfeuh ... merci de la réponse, mais je veux justement éviter (si
possible) de faire un parcours complet de la colonne jusqu'à trouver le
premier élément vide.



Pis traduire du VBA en Delphi euh ...
Commenter la réponse de Tykko
moldov 168 Messages postés mercredi 8 octobre 2003Date d'inscription 10 novembre 2008 Dernière intervention - 19 mai 2005 à 10:54
0
Merci
Salut Tykko,



Je pense que c'est une bonne solution de rechercher la dernière cellule vide.

Si tu veux pas utiliser cette solution car tu pense que c'est une
contrainte de temps (cela dépend de la longueur de ta colonne mais moi
sinon je te donne le code delphi pour faire cela.



OleApplication := CreateOleObject('Excel.Application'); // création du lien OLE

OleWorkBook:=OleApplication.Workbooks.open(NomDeTonfichierExcel); // pour créer un nouveau document

Sheet := OleWorkBook.Sheets[NomDeTaFeuille];



while string(Sheet.Cells[iCol,iRow].value) <> '' do

begin

Inc(iRow);

end;

// iRow Contient de nombre de cellule pleine

OleApplication.Quit;

OleApplication:=Unassigned;



Voila, regarde et teste



Bonne Prog
Commenter la réponse de moldov
Tykko 4 Messages postés mercredi 18 mai 2005Date d'inscription 19 mai 2005 Dernière intervention - 19 mai 2005 à 12:29
0
Merci
Merci à toi moldov



En fait, en attendant vos réponses, je me suis penché sur un code d'un
de mes collègues qui avait fait piloté Word depuis Delphi, et ... je
suis arrivé au même code que ce que tu viens de donner

(à la différence près que j'utilise VarToStr() au lieu de string() )



Encore merci
Commenter la réponse de Tykko
Tykko 4 Messages postés mercredi 18 mai 2005Date d'inscription 19 mai 2005 Dernière intervention - 19 mai 2005 à 13:57
0
Merci
ok, merci à toi aussi, je vais regarder ta méthode et je vous dirais quelle est la plus rapide



Une petite remarque sans grand rapport avec ma question : quelle que
soit la taille de la feuille (1 ligne ou 5000 lignes), le temps de
chargement en mémoire sous delphi est identique ... marrant
Commenter la réponse de Tykko

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.