Trouver la 1ère ligne vide d'une feuille excell

Résolu
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008 - 27 oct. 2006 à 13:32
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008 - 28 oct. 2006 à 12:23
Bonjour,

Tout est dans la question. Je cherche le code qui me permettrai de trouver quel est la 1ère ligne entièrement vide d'une feuille excell.

Merci d'avance.

Oliv

17 réponses

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
27 oct. 2006 à 14:09
Salut,

Pense a regarder sur www.codyx.org, il y a des petit morceaux de codes tout fait (ou facile a adapter)
et notament celui ci

@+,   Ju£i?n
3
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
27 oct. 2006 à 14:38
Autrement, tu as la solution que Mortalino entre autres, ou moi même, donnons à longueur de temps sur le forum (finalement, un bout du forum dédié à Excel, ça serait quand même 'achement bien ) :

Dim PremiereLigneVide as string
PremiereLigneVide = Worksheets("Feuil1").Range("A1").End(xlDown).Address

Tu te positionnes dans une colonne (moi, en A1), et tu vas chercher la première ligne vide à partir de cette cellule.
Le .address te remonte les coordonnées de la première cellule vide sous la forme $A$100 par ex. (tu peux changer la référence avec les options de End(xlDown) pour obtenir sous la forme R100C1 par ex)
Plus qu'à travailler le contenu de ta variable PremiereLigneVide pour sortir le numéro de la ligne qui t'intéresse (Recherche par ex du dernier $ avec la formule InStrRev et récupération de tout ce qui est à droite, ou alors, récupérarion de tout ce qui est entre le R et le C, ...)

Molenn
3
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
27 oct. 2006 à 20:23
bonjour,
quelque chose comme ça :

Sub test()
Do While Not Y
k = k + 1
i = Cells(k, 256).End(xlToLeft).ColumnIf i 1 And Cells(k, i) "" Then Y = True
Loop
MsgBox k
End Sub

A+
3
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
28 oct. 2006 à 07:47
bonjour,
256 est le nombre maximum de colonnes dans Excel...

Rows("1:" & LastLine).Select

A+
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 17
28 oct. 2006 à 10:39
Salut,

quand tu exécutes ma fonction (merci Julien pour le lien  ), le Set MaCellule détermine la cellule de départ pour la recherche.
Il est évident que si A2 est vide, la recherche s'arrête.
Pour palier ce problème, il faut partir de tout en bas du tableur et remonter. Par exemple, pour rechercher la première ligne vide de la colonne A :

For j = 1 To nb
        Worksheets(j).Select
        Set MaCellule = [A65536] 'ça c'est la dernière cellule du tableur
        LastLine = PremiereLigneVide(MaCellule, xlByRows, xlPrevious)
   ' avec Previous, on remonte les cellules
        Cells(LastLine, 1) = "*"
 Next j

@++

<hr width="100%" size="2" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>
3
lilo44 Messages postés 174 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 15 février 2007 2
27 oct. 2006 à 13:35
bonjour,

je pense qu il faut fixer une colonne maximum. Au pire, la mettre relaitvement grande ....

Attention a la vitesse du traitement ceci dit
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 13:44
????????

Je ne comprend pas ce que tu veu dire.

Pour recibler un peu plus la chose, mon pb initiale consiste a trouver la 1ère ligne completement vide du fichier afin de mettre une * dans la 1ère cellule de cette ligne. Cela représente un indicateur de fin utiliser dans la suite du code.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 15:18
Ok c'est noté, j'essaie les 2 solus de suite et merci pour le lien du site qui devrait savérer utile dans l'avenir.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 15:18
Ok c'est noté, j'essaie les 2 solus de suite et merci pour le lien du site qui devrait savérer utile dans l'avenir.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 15:21
Dsl pour le doublon, je comprend pas comment il est aparru surtout à 4 minute d'intervalle.

??
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
27 oct. 2006 à 15:31
Salut,

> [auteurdetail.aspx?ID=407787 olivier857]
: 4 secondes tu veux dire!!!!

Note: ne pas oublier reponse accpetée sur les posts qui ont pu t'aider dans la resolution de ton probleme
@+,   Ju£i?n
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 16:25
Oui exact
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 16:34
je ne comprend pas avec les 2 codes j'obtient un numéro d eligne qui n'est pas vide.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
27 oct. 2006 à 17:24
Voici le code que j'utilise :

Dim MaCellule As Range
 
Public Function PremiereLigneVide(CelluleDepart As Range, MonOrdre As XlSearchOrder, MaDirection As XlSearchDirection) As Long
    If MonOrdre = xlByRows Then
        PremiereLigneVide = Columns(MaCellule.Column).Find("", MaCellule, , , MonOrdre, MaDirection).Row
    Else
        PremiereLigneVide = Columns(MaCellule.Column).Find("", MaCellule, , , MonOrdre, MaDirection).Column
    End If
End Function
    
For j = 1 To nb
        Worksheets(j).Select
        Set MaCellule = [a1]
        LastLine = PremiereLigneVide(MaCellule, xlByRows, xlNext)
        Cells(LastLine, 1) = "*"
 Next j


Le pb est le suivant :
Ca me met bien une étoile dans la colonne A de chaque feuille mais pas au bon endroit.
Ca la place dans la 1ère cellule vide de la colonne A même si la ligne n'est pas complètement vide. 
Le test ne test donc pas si la ligne entière est vide mais s'arette au fait est que la celule de la 1ère colonne est vide.

Quelqu'un a t'il une solution ?
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
28 oct. 2006 à 00:58
Merci galopin1, cette fois c'est bien ce que je voulais.

C'est pas entièrement dynamique puisqu'il faut fixer manuellement la colonne limite du test, mais dans mon cas ca ne pose pas de pb.
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
28 oct. 2006 à 01:39
Pour finir mon travail il me reste une dernière étape à effectuer. Celle-ci consiste a créer un nouvel onglet dans lequel je recapitule le contenu de tous les autres onglets, càd les lignes situé au dessus de l'* positionné dans chque feuille. La recap ce fait donc en copiant les lignes sélectionnées, les unes en dessous des autres dans ce nouvel onglet.

Mon pb est simple, comment effectuer la selection des lignes situé au dessus de l'* sachant que je connais le numéro (variable LastLine) de la ligne contenant l'*.

Une selection basic se fait de la manière suivante :
rows("1:10").select

or dans mon cas le 10 correspond à une variable et la méthode suivante ne marche pas :
Rows("1:," & LastLine).select

Alors comment dois-je  faire ?
0
olivier857 Messages postés 188 Date d'inscription mardi 21 décembre 2004 Statut Membre Dernière intervention 10 avril 2008
28 oct. 2006 à 12:23
Ok je ne savais pa sque 256 était le max de colonne. Dans ce cas la c'est parfait.
Et ok Rows("1:" & LastLine).Select. J'était tellement sure d'avoir bien écrit cette ligne que j'avais pas vu que j'avais laissé une virgule
0
Rejoignez-nous