Des soucis avec Excel sous Delphi [Résolu]

Signaler
Messages postés
4
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 mai 2005
-
Messages postés
4
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 mai 2005
-
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
A voir également:

7 réponses

Messages postés
165
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
10 novembre 2008

Salut,



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



OleApplication, OleWorkBook, sheet : Variant;

iCol, iRow : Integer;



Bonne Prog
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
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.
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
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.
Messages postés
4
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 mai 2005

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 ...
Messages postés
165
Date d'inscription
mercredi 8 octobre 2003
Statut
Membre
Dernière intervention
10 novembre 2008

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
Messages postés
4
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 mai 2005

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
Messages postés
4
Date d'inscription
mercredi 18 mai 2005
Statut
Membre
Dernière intervention
19 mai 2005

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