[Excel] Ecrire à la suite

Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010
-
Bonjour,

J'écrit dynamiquement dans un fichier excel et j'aimerais ajouter du texte à celui déjà existant s'il y en a.

Comment obtenir la première celule vide d'une colone ?

J'ai fait ça:
while VarToStr(MaFeuille.Cells.Item[index,1].Value)<>'' do
index := index+1;

Mais ça devient très lent s'il y a beaucoup de données déjà.

6 réponses

Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

Essaie de jouer avec Fin + flèche, et d'enregistrer ça dans une macro.

De mémoire (parce que si je teste sous OpenOffice ça ne va pas beaucoup
t'aider), en étant situé dans une cellule non vide, Fin + flèche bas
t'amène sur la cellule au-dessus de la prochaine cellule vide.
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Bonjour yopai_v
Non, fin+bas emmène juste avant la PREMIERE cellule vide rencontrée, s'il y a un trou dans les données, cela ne fonctionne pas.

En fait, si on fait: ctrl+bas et origin+haut, ça doit être plus fidèle à ce que je recherche...
Sais tu comment simuler l'appui de ces touches sur un classeur qui n'est pas forcement visibe ?
Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

tu as essayé d'enregistrer ces séquences de touches dans une macro ?
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Non, je ne peux pas car je n'ai pas main mise sur le fichier excel, il peut être différent à chaque fois.
Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

Je me suis mal exprimé :

dans un classeur quelconque, tu fais "Enregistrer macro"

tu enregistres la séquence de touches que tu veux

et tu arrêtes

> la macro contient le code que tu cherches

C'est une méthode à retenir pour savoir comment "simuler" certaines choses.


En l'occurrence, je te conseille la séquence suivante :

   Ctrl+Fin, Origine, puis bas


Ce qui donne :

      ActiveCell.SpecialCells(xlLastCell).Select    ' Ctrl + Fin

      Cells(ActiveCell.Row,
1).Select                  
' Origine

      ActiveCell.Offset(1,
0).Select                     
' Bas

     
Selection.End(xlUp).Select                         
' Fin / haut

      ActiveCell.Offset(1,
0).Select                     
' Bas


Explications :

Ctrl+Fin t'amène sur la dernière cellule du "UsedRange", cad la plage utilisée de ta feuille de calcul.

Origine revient sur la première cellule

Là, j'ai ajouté (bas, puis fin/haut), car le "UsedRange" peut contenir
des lignes vides (lorsque tu supprimes des lignes, la limite basse du
"UsedRange" n'est pas remontée). Donc je fais bas + Fin/haut pour être
sûr de me retrouver sur la première ligne non vide en partant de la fin.

Et donc, je descend d'un cran pour être sur la ligne qui suit.
Messages postés
47
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010

bien sûr, si classeur n'est pas visible, il faut remplacer les .Select par des affectations, ce qui donne quelque chose comme :

     set cell = Cells(0,0).SpecialCells(xlLastCell)    ' Ctrl + Fin

      set cell = Cells(cell.Row,
1)            
' Origine

      set cell = Offset(1,
0)                     
' Bas

      set cell =
cell.End(xlUp)                 
' Fin / haut

      set cell = cell.Offset(1,
0)               
' Bas