Atteindre derniere cellule non vide

Bonjour à tous,

J'ai un fichier pour gérer mes inventaire.

Je souhaiterai, que quelque soit la situation ( avec filtre, sans filtre, ajout article, retrait article ) , lorsque je réalise une entrée ou une sortie de stock, je vois s'afficher la dernière ligne rempli de texte de mon tableau.

Pourriez vous m'aider à coder cela svp ?

Je pensai faire comme cela mais ça ne fonctionne pas =>

Range("A1048576").Select

Selection.End(xlUp).Show

Cordialement,

Manoss

57inventaire-biqp.xlsm (283.78 Ko)

bonjour

j'ai pas regarder ton fichier mais pour récupérer la dernière ligne quand il y a des filtres j'utilise :

derlig = .Cells.SpecialCells(xlCellTypeLastCell).Row

fred

Bonjour et merci de ta réponse.

Malheureusement cela ne fonctionne pas ?

Je doit simplement copier ta ligne à la fin de ma macro c'est ça?

Cordialement,

Manoss

La ligne de code que j'ai fourni ne permet que de savoir la dernière ligne occupée sur la feuille, il faut ensuite faire quelque chose avec cette information... si tu veux selectionner la derligne colonne "A" par exemple :

il faut faire :

derlig = .Cells.SpecialCells(xlCellTypeLastCell).Row
cells(derlig,"A").select 

fred

Bonjour Manoss, Fred, bonjour le forum,

Ton code est presque correct !... Le mot clé Show s'utilise pour afficher une UserForm. Il faut aussi éviter autant que tu le peux les Select qui ne font que ralentir l'exécution du code. Si tu veux visualiser le numéro de ligne de la dernière cellule éditée d'une colonne (colonne B par exemple) :

MsgBox Range("B" & Application.Rows.Count).End(xlUp).Row

Attention, Si tu utilises un filtre le même code te renverra non plus la dernière cellule éditée mais la dernière cellule après filtre.

Dans ton exemple, sans aucun filtre le message renvoie : 2359

Si je filtre la colonne B (dates) en décochant les mois Juin, juillet et août pour l'année 2016, le message renvoie : 1924

En utilisant le code de Fred adapté :

MsgBox Columns(2).Cells.SpecialCells(xlCellTypeLastCell).Row

le message renvoyé est bizarrement : 3373 ? Ce qui m'amène à penser que sa méthode n'est pas très fiable...

Pour ma part je ne sais pas comment obtenir 2359 avec le filtre utiliser plus haut...

Tu peux aussi, comme l'a proposé Fred, stocker cette valeur dans une variable de type Integer (ou Long si tu dépasses les 32 767 lignes) ou bien de type Range si tu veux l'utiliser comme référence de cellule avec par exemple :

Dim DL As Integer 'ou Long
DL = Range("B" & Application.Rows.Count).End(xlUp).Row

ou

Dim DEST As Range
Set DEST = Range("B" & Application.Rows.Count).End(xlUp)

Tu pourras ensuite utiliser cette variable pour rajouter des donnée avec :

Cells(DL + 1, 1).Value = "Texte1"
Cells(DL + 1, 2).Value = "Texte2"
'etc.

ou

DEST.Offset(1, 0).Value = "Texte1"
DEST.Offset(1, 1).Value = "Texte2"
'etc.

rebonjour

bonjour Thautheme

tu dis ceci :

le message renvoyé est bizarrement : 3373 ? Ce qui m'amène à penser que sa méthode n'est pas très fiable...

en fait ce n'est pas bizarre, cette ligne renvoi bien la dernière ligne du tableau qui devrait etre dynamique.... mais comme je l'avais préciser avant je n'avais pas regarder le fichier.... mais quand tu regarde le tableau (multicolor) tu vois qu'il va jusqu’à la ligne 3373.... cela veut dire que Manoss a prévu bcp de lignes d'avance au lieu de faire un tableau qui augmente dynamiquement...

sinon ma ligne renvoi toujours la derniere ligne du tableau avec filtre ou sans filtre....

fred

Bonjour le fil, bonjour le forum,

Oui Fred tu as raison (je n'avais même pas remarqué d'ailleurs), je ne conteste pas mais puisque cela ne renvoie pas la dernière ligne éditée, je ne me fie pas à cette méthode qui peut être erronée...

Pas de soucis...

fred

Bonjour,

Un exemple à adapter avec la mise sous forme de tableau de tes données.

Cdlt.

79inventaire-biqp.xlsb (164.26 Ko)
Public Sub Journal()
Dim lo As ListObject
Dim LR As ListRow

    Application.ScreenUpdating = False

    Set lo = ActiveSheet.ListObjects("tblDonnées")
    Set LR = lo.ListRows.Add
    With LR.Range
        .Cells(1, 1) = [B4]
        .Cells(1, 2) = [C4]
        .Cells(1, 3) = [D4]
        .Cells(1, 4) = [E4]
        .Cells(1, 5) = [F4]
        .Cells(1, 6) = [G4]
    End With

    Set LR = Nothing: Set lo = Nothing

End Sub

Bonjour à tous et merci pour vos réponse.

La solution de Jean-Eric me va bien c'est justement ce à quoi je voulais arriver.

Merci !

Manoss

Bonjour,

Cela fonctionne maintenant.

Cependant, j'ai l'impression que cela ralenti le fichier.

Existe t'il une méthode pour accélérer le processus?

Cordialement,

Manoss

Rechercher des sujets similaires à "atteindre derniere vide"