Problème pour compter le nombre de lignes d'une feuille [Résolu]

Signaler
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour le Forum,

Pour compter le nombre de lignes utilisées d'une feuille Excel, j'utilise le code suivant :

Dim n As Long
n =    ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques
MsgBox "Le nombre de lignes actuel est de " & n


Ça fonctionne très bien. Mais je rencontre un cas ou je n'arrive pas à compter le nombre de lignes.

Dans une feuille Excel placez les 4 valeurs suivantes :

Range("U5") =50
Range("U6")= 1
Range("U12")=0,001
Range("U14")= 1

Ensuite placez ce code dans le module "ThisWorkBook"

Voici le code complet ( code à placer dans "ThisWorkBook") :

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating    = False 'Désactive l'affichage
Application.DisplayAlerts = False 'Désactive les alertes

Dim n As Long, Début As Long, Fin As Long

If Target.Address Range("U5").Address Or Target.Address Range("U6").Address Or Target.Address = Range("U12").Address Or Target.Address = Range("U14").Address Then

Début = (Range("U5") / Range("U12")) + 4
Fin = Début + (Range("U6") * Range("U14") / Range("U12"))

n = ActiveSheet.UsedRange.Rows.Count 'Compte le nombre de lignes dynamiques
MsgBox "Le nombre de lignes actuel est de " & n
Range("B10:Q" & n + 4).Clear
MsgBox "Après suppréssion de certaines lignes, ce nombre vaut maintenant " & n

Dim Tableau() As Variant
Dim i As Long
ReDim Tableau(1 To Fin - Début + 1, 1 To 16) As Variant 'On peut maintenant redimensionner le tableau dynamique (i Lignes et 4 colonnes dans ce cas la)

For i = 1 To Fin - Début + 1 'On parcours maintenant l'intégralité des points se trouvant à l'intérieur de la maille circulaire

        Tableau(i, 1) = 10 'On remplit le tableau dynamique comme on l'entends (Pour le maillage circulaire, seule 2 colonnes suffisent)
        Tableau(i, 2) = 10
        Tableau(i, 3) = 10
        Tableau(i, 4) = 10
        Tableau(i, 5) = 10
        Tableau(i, 6) = 10
        Tableau(i, 7) = 10
        Tableau(i, 8) = 10
        Tableau(i, 9) = 10
        Tableau(i, 10) = 10
        Tableau(i, 11) = 10
        Tableau(i, 12) = 10
        Tableau(i, 13) = 10
        Tableau(i, 14) = 10
        Tableau(i, 15) = 10
        Tableau(i, 16) = 10
Next i

Range(Cells(5, 2), Cells(UBound(Tableau, 1) + 4, UBound(Tableau, 2) + 1)) = Tableau 'On transfère les éléments du tableau dans la feuille de calcul

End If

Application.ScreenUpdating = True 'Désactive l'affichage
Application.DisplayAlerts = True 'Désactive les alertes

End Sub



En gros j'ai un tableau avec des valeurs qui sont injectées dans la feuille Excel. J'ai donc un certain nombre de lignes. Je supprime ensuite quelques lignes, et j'aimerais pouvoir compter le nouveau nombre de lignes présent sur la feuille. Et ben c'est toujours le même nombre de lignes alors que ça ne le devrait pas.

Quelqu'un peut il m'aiguiller à savoir pourquoi le nombre de lignes ne change t'il pas malgré que je supprime des lignes ???

Bien cordialement,

André

19 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour,
UsedRange est la plage utilisée.
Si elle commence à la ligne 3, par exemple, les 2 premières lignes n'étant pas dans le UsedRange, elle ne seront pas comptées par le Count .
Il le faut alors les rajouter au count.
Il est plus simple de dire alors :
   Dim derlig As Long
  derlig = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
  MsgBox derlig

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

ou bien la méthode suivante plus usitée:

derlig = ActiveSheet.range("U" & Columns("U").rows.Count).end(XlUp).Row


A+
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bonjour, bigfish_le vrai

Mais pourquoi n'aui-je pas dit cela ? === >> parce que :
Bonjour le Forum,

Pour compter le nombre de lignes utilisées d'une feuille Excel

et que ton code ne va pas retourner ce nombre, mais la dernière ligne remplie d'une seule colonne.
Quid si, un peu plus bas, les cellules Des colonnes A ou B ... sont remplies sans que pour autant il y ait quelque-chose en colonne U ?

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Je suis d'accord avec ton code Ucfoutu (c'est une meilleur utilisation vis à vis du code que je proposais au début). Je vais l’intégrer de suite d'ailleurs.

Dans tous les cas, j'ai vite pris conscience que ma méthode comptait la plage utilisée. Et que pour avoir le nombre de lignes utilisées il fallait s'amuser avec un certain offset de départ pour retomber sur le bon nombre.

Ceci était déjà intégré dans ma tête. Ce qui me pose hélas encore problème (même avec le code que tu propose) c'est pourquoi la plage utilisée reste t'elle inchangée après avoir supprimé des lignes de cette plage ???


Par exemple :

J'ai une plage qui commence en A1 et qui se termine en A10. Je supprime les 5 dernières lignes et pourtant j'ai toujours une plage utile considérée comme étant [A1;A10] alors que j'ai justement raccourcis cette plage !


Mon problème se situe plutôt à ce niveau. Je ne comprends pas pourquoi. Et pourtant j'ai bien supprimer les valeurs de toutes les cellules. Rien n'y fait, Excel interprète la plage utile comme l'ancienne plus grande palge créé juste avant.

Comment pourrais je m'en sortir du coup ?


Je ne sais pas si je suis clair ? Dites le moi surtout.

André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Il te faut comprendre une chose.
La suppression des valeurs est un effacement, non une suppression de ligne.
Le UsedRange est la plage allant de la première cellule non vide à la dernière non vide. Il n'est pas la plage des cellules remplies.
Que cherches-tu à faire exactement ? Je t'indiquerai alors la solution correspondant à ce but très précis.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Ce que je cherche à faire :

J'ai un tableau dont les dimensions sont les suivantes :

-Nombre de lignes variables
-16 colonnes

Je remplis mon tableau avec une macro. Et une fois le tableau rempli, je réinjecte son contenu dans une feuille Excel.

Je veux récupérer la valeur de la ligne la plus en bas qui contient la dernière valeur de mon tableau en gros.

   Dim derlig As Long
  derlig = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
  MsgBox derlig


Fonctionne bien dans tous mes applications précédentes. Mais cette fois ci, comme mon tableau va voir sa taille varier suivant les valeurs d'entrées...Excel interprète la plage utile comme la plus grande déjà utilisée. Et moi les cellules vides remplies par le passée ne m’intéressent pas. Je veux la valeur de la ligne la plus basse qui contient une valeur.

J'ai vraiment du mal à décrire mon problème. Décidément c'est pas ma tasse de thé les descriptions^^

Si je ne suis pas clair je recommencerais Ucfoutu. N'hésite pas à me reprendre

André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Je comprends également maintenant mieux pourquoi ça fonctionnait bien dans mes applis précédentes.

Dans mes applis précédentes j'avais toujours une dimension fixe. Le code suivant fonctionnait alors très bien :

   Dim derlig As Long
  derlig = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
  MsgBox derlig


Cette fois ci, j'ai un tableau qui a une taille variable. Un coup ma feuille Excel aura bcp de données, un autre elle en aura presque pas. Et comme la taille varie, le "problème" se manifeste à mes yeux.

Supprimer le contenu des cellules n'affecte pas la plage déjà utilisée de la feuille. C'est donc que cette méthode n'est pas appropriée pour cette utilisation précise.

C'est bien intégré


Conclusion, ce n'est donc pas la plage utile qui m’intéresse, mais bien la dernière cellule qui continent une valeur.


Et dans ce cas la, je pense que le code proposé par Big Fish dévient directement bien adapté à ce besoin. Je dois pas trop dire de conneries sur ce coup la je pense^^. Sinon dsl

J'attends ta réponse quand même Ucfoutu.


André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Le code de bigfish_le vrai est :
- vrai dans l'absolu uniquement si toutes les cellules de toutes les lignes sont remplies ou encore si la colonne à laquelle tu l'appliques est celle donty toutes les cellules sont remplies
- te retournera exactement, quel que soit le cas de figure, le même résultat que le mien si tu t'es bien exprimé, à savoir : le rang de la dernière ligne utilisée.

Je devine donc que tu cherches à exprimer autre chose (mais quoi, alors, exactement ?)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Ucfoutu :

Je devine donc que tu cherches à exprimer autre chose


Non non Ucfoutu

Je cherchais bien à récupérer le rang de la dernière ligne utilisée cette fois ci. Aucune idée saugrenue cachée. Pour une fois que ma demande est simplissime. J'avais l'habitude d'utiliser les plages utiles parce que ça marchait bien mais sans réellement comprendre ce que je faisais. Et que dans ce cas précis la méthode n'est pas valable.

Maintenant j'ai compris pourquoi ça marche ou ne marche pas et pourrais utiliser l'une ou l'autre des deux méthodes suivant l'application.

Me reste encore à tester la solution de bigfish_le vrai. Mais son code semble bien compatible en effet.

Je Pense conclure pour cette discussion.

Merci à vous deux pour vos réponses et surtout pour la compréhension de ce qui se cachait derrière

Bonne soirée à vous.

Bien cordialement,

André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Arf j'ai parlé trop vite évidement !

Je viens de tester la solution de bigfish_le vrai. Elle fonctionne parfaitement.

Par contre j'ai encore ce souci de plage utile !

Je m'explique

Cas 1)
Ma feuille contient 1000 lignes
Le rang de la dernière ligne utilisée est 1000
La plage utile est donc [A1;A1000]

Cas 2)
Le coup d'après, ma feuille contient 10 lignes
Le rang de la dernière ligne utilisée est 10
La plage utile reste donc [A1;A1000] !!!


Du coup j'ai bien 10 lignes dans ma feuilles Excel...Mais l'ascenseur vertical (situé à droite) est dimensionné pour la plage utile soit pour 10000 lignes. L'asscenceur est donc tout petit et permet de désecendre 10000 lignes alors que ma feuille n'en possède que 10


C'est pas agréable du tout. Qu'est ce que j'ai raté, mal expliqué ou mal compris ???

Finalement on dirait bien que ça ressemble à un problème de plage utile plus qu'a la récupération du rang de la dernière ligne utilisée.

Des nouvelles idées pour bien résoudre ce post ?


André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
je ne comprends plus rien à ce que tu veux faire
Ce sont maintenant les ascenseurs qui t'embêtent ?
Regarde ce que ferait ceci, par exemple :
Dim OTIS As String
 OTIS = ActiveSheet.UsedRange.Address
 ActiveSheet.ScrollArea = OTIS


remplace ensuite la valeur de OTIS par (par exemple) :
Dim OTIS As String
 OTIS = "B30:X80"
 ActiveSheet.ScrollArea = OTIS
 ScrollRow 30: ScrollColumn 2

A chaque fois : joue avec les ascenseurs et regarde ce qui se passe.
C'est cela que tu cherches, finalement ?
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Re bonsoir,

Oui j'avoue que j'exprime mal ma demande. Normal que ce ne soit pas simple à comprendre pour vous. Pourtant le problème est "évident"

En ce qui concerne les ascenseurs et le code que tu fournis Ucfoutu, je peux me débrouiller avec. Mais bon je trouve que ça reste encore bricolage. Et la très franchement je demande pas grand chose. Donc si je suis obligé de faire appel à une méthode bricolage pour si peu...Je suis un peu déçu quoi.

C'est pourquoi je vais quand même essayer de réexpliquer pour résoudre réellement ce problème.

Je n'ai pas réussi à mettre en évidence le problème avec un code très simple. Donc excusez moi, mais il faudra essayer de jouer avec le code que je propose pour voir de quoi je parle.

[b]Je recommence donc :/b

Dans une feuille Excel placer les 4 valeurs suivantes dans les bonnes cellules :

U5 = 50
U6 = 2
U12 = 0,001
U14 = 1

Ensuite placez ce code dans le module "ThisWorkBook"

Option Explicit

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Application.ScreenUpdating = False 'Désactive l'affichage
Application.DisplayAlerts = False 'Désactive les alertes

Dim n As Long, Début As Long, Fin As Long

If Target.Address Range("U5").Address Or Target.Address Range("U6").Address Or Target.Address = Range("U12").Address Or Target.Address = Range("U14").Address Then

Début = (Range("U5") / Range("U12")) + 4
Fin = Début + (Range("U6") * Range("U14") / Range("U12"))

Dim Tableau() As Variant
Dim i As Long
ReDim Tableau(1 To Fin - Début + 1, 1 To 16) As Variant 'On peut maintenant redimensionner le tableau dynamique (i Lignes et 4 colonnes dans ce cas la)

For i = 1 To Fin - Début + 1 'On parcours maintenant l'intégralité des points se trouvant à l'intérieur de la maille circulaire
        Tableau(i, 1) = 10 'On remplit le tableau dynamique comme on l'entends (Pour le maillage circulaire, seule 2 colonnes suffisent)
        Tableau(i, 2) = "=B" & i + 4 & "-B" & i + 3
        Tableau(i, 3) = 10
        Tableau(i, 4) = "=D" & i + 4 & "-D" & i + 3
        Tableau(i, 5) = "=$U$12*Cos(2*Pi()*$U$8*B" & i + 4 & "+ Acos(U9/U12))"
        Tableau(i, 6) = "=F" & i + 4 & "-F" & i + 3
        Tableau(i, 7) = "=-$U$12*2*Pi()*$U$8*Sin(2*Pi()*$U$8*B" & i + 4 & "+ Acos(U9/U12))"
        Tableau(i, 8) = "=H" & i + 4 & "-H" & i + 3
        Tableau(i, 9) = "=-$U$12*(2*Pi()*$U$8)^2*Cos(2*Pi()*$U$8*B" & i + 4 & "+ Acos(U9/U12))"
        Tableau(i, 10) = "=J" & i + 4 & "-J" & i + 3
        Tableau(i, 11) = 10
        Tableau(i, 12) = "=L" & i + 4 & "-L" & i + 3
        Tableau(i, 13) = 10
        Tableau(i, 14) = "=N" & i + 4 & "-N" & i + 3
        Tableau(i, 15) = "=L" & i + 4 & "/N" & i + 4
        Tableau(i, 16) = "=P" & i + 4 & "-P" & i + 3
Next i

Range(Cells(5, 2), Cells(UBound(Tableau, 1) + 4, UBound(Tableau, 2) + 1)) = Tableau 'On transfère les éléments du tableau dans la feuille de calcul

n = ActiveSheet.Range("B" & Columns("B").Rows.Count).End(xlUp).Row 'Détermine le rang de la dernière ligne utilisée
MsgBox "Le rang de la dernière ligne utilisée est " & n
Range("B21:Q" & n).Clear
n = ActiveSheet.Range("B" & Columns("B").Rows.Count).End(xlUp).Row 'Détermine le rang de la dernière ligne utilisée
MsgBox "Après suppréssion des dernières lignes, le rang de la dernière ligne utilisée est " & n

End If

Application.ScreenUpdating = True 'Désactive l'affichage
Application.DisplayAlerts = True 'Désactive les alertes

End Sub


Voila tout est prêt.

Double cliquer sur la cellule U6 sans changer la valeur. On se rend compte d'une chose. La plage utile reste toujours la même malgré qu'il y ai peu de cellules occupées. Excel garde donc en mémoire l'adresse de la cellule dont le rang le plus grand a été utilisé. Et il base l'ascenseur sur cette cellule "virtuelle".

Du coup si je veux afficher 20 lignes, l'ascenseur garde en mémoire les 2005 lignes précédemment affichées. Si je déplace l'ascenseur tout en bas, je n'aurai pas mes 20 lignes, mais bien ma plage utile de 2005 lignes.

Comment faire en sorte que l’ascenseur s'adapte sur la dernière cellule occupée et non sur la plage utile virtuelle?

Toute la problématique est la.


J'espère avoir été un peu plus clair. Ce que j'aimerais, c'est pouvoir feinter Excel en lui faisant croire que la plage utile (UsedRange) est définis sur la dernière cellule qui contient une valeur.

Courage pour me déchiffrer, je ne suis pas très fière de mes explications la.

Bon je vais me coucher, ça ira mieux demain.

Bonsoir,

André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Je préfère rajouter que j'aimerais une solution n'utilisant pas les "ScrollArea". Une solution ou l'ascenseur se mette à jour naturellement.

Une solution que j'ai trouvé, serai de supprimer la feuille et de repartir sur une nouvelle feuille. Ainsi l'ascenseur s'adapte bien à la bonne plage utile qui correspond à la dernière cellule contenant une valeur.

Mais je veux conserver la même feuille justement.


Je rappel que je peux jouer avec les ascenseurs pour solutionner mon problème mais que par curiosité j'aimerais voir si l'on peut faire plus simple.

Cordialement,

André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Mais ...
Le responsable, c'est toi-même !
Regarde donc ce que tu fais :
Tu dimensionnes ton tableau tableau, dans cet exemple, à 2001 lignes
Tu remplis complètement ce tableau, puisque tu y insères des formules sur toutes ses lignes, en colonnes 2,4,5,6,7,8,9,10,12,14,15 et 16 !
Puis tu injectes ton tableau (donc 2001 lignes) à partir de la ligne 5. Tu déclares donc de cette manière que tu utilises les 4 premières lignes (de 1 à 4) + les 2001 de ton tableau ===>> 2001 + 4 = 2005.
Il est clair que si tu fais une telle manip, Excel considère que tu as vraiment la volonté de mobiliser ces 2005 lignes ! Et, mobilisées, elles le sont de fait, puisque tu y as mis des formules !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
J'ai bien suivis ton raisonnement Ucfoutu. Il est conforme au mien.

J'ai bien mobilisé temporairement 2005 Lignes une première fois. Il est donc normal que la plage utile aille jusqu'à 2005 Lignes et que l'ascenseur vertical aussi.

Mais une fois que j'envoie 10 lignes utiles et que j'ai supprimé le contenu des cellules inutiles dans la feuille Excel, j'aurais voulu faire un espèce de "resize" de la la plage utile. Il n'y a pas un truc pour faire ça ???

Comment font alors les gens qui travaillent avec des plages de données variables ??? Un coup 1000 lignes un coup 10 lignes et hop, Excel garde en mémoire une plage utile qui n'a pas d'intérêt puisqu'elle est surdimensionnée.

Je ne connaissais pas ce problème auparavant. C'est un peu handicapant et pas très ergonomique je trouve.


Sans jouer sur l'ascenseur, est il possible de jouer avec "Delete" plutôt que "Clear" ? Est il possible de supprimer les lignes en trop, plutôt que de supprimer le contenu des cellules ?

J'ai le sentiment que dans mon code, au lieu d'utiliser

Range("B21:Q" & n).Clear


Je devrais peut être bien supprimer les lignes avec un genre de

Raw("B21:Q" & n).Delete


D'ailleurs je vais essayer cette piste. Qu'en pense tu Ucfoutu ?


André
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
Je viens d'essayer et rien n'y fait. Que j'utilise un "Clear", un "Delete" ou un "EntireRow.Delete" rien n'y fait. Excel pense toujours que la plage utile est la plus grande déjà utilisée

C'est nul je trouve. Mais c'est mon avis


Ben j'ai plus d'idées la. Je vais donc feinter Excel en jouant avec les ascenseurs à défaut de.

Si quelqu'un à une solution, une idée ça m’intéresse.

André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Bah...
Tu ne veux pas jouer avec les ascenseurs ?
Regarde alors :
....
....
....
....
Range(Cells(5, 2), Cells(UBound(Tableau, 1) + 4, UBound(Tableau, 2) + 1)) = Tableau 'On transfère les éléments du tableau dans la feuille de calcul
n = ActiveSheet.Range("B" & Columns("B").Rows.Count).End(xlUp).Row 'Détermine le rang de la dernière ligne utilisée
MsgBox "Le rang de la dernière ligne utilisée est " & n
Range("A21:A" & Rows.Count).EntireRow.Delete
Range("A1:A" & Rows.Count).EntireRow.Hidden = False
MsgBox "on va voir"
Range("A21:A" & Rows.Count).EntireRow.Hidden = True
DoEvents
n = ActiveSheet.Range("B" & Columns("B").Rows.Count).End(xlUp).Row 'Détermine le rang de la dernière ligne utilisée
MsgBox "Après suppréssion des dernières lignes, le rang de la dernière ligne utilisée est " & n
End If
Application.ScreenUpdating = True 'Désactive l'affichage
Application.DisplayAlerts = True 'Désactive les alertes
End Sub

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
A choisir je préfère encore les ascenseurs

Bien j'ai au moins eu une vue d'ensemble de ce qui était possible. C'est un peu frustrant mais tant que ça fonctionne tu me diras.

Je ne l'ai peut être pas précisé, mais le problème avec la méthode sur les ascenseurs, c'est que l'ascenseur reste figé au milieu de sa course pour indiquer la dernière cellule active.

Je m'explique. En tant normal quand l'ascenseur est en haut il indique le rang de la cellule la plus en haut. Et quand il est en bas, il indique le rang de la cellule la plus en bas.


Avec ta méthode Ucfoutu, pour indiquer le rang de la cellule la plus en bas...L'ascenseur peut se retrouver n'importe ou. 1/4, 3/4, 1/2 de sa course etc. Du coup c'est frustrant la aussi de devoir mettre l'ascenseur au milieu de sa course pour indiquer la cellule la plus en bas.

Je suis chiant ? Je sais Mais comme je le disais plus haut, je ne trouve pas ça bien normal que ce soit si difficile de faire si simple !

C'est pas parfait on vas dire.

André
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
Ouais...
Réclamations à adresser alors à ====>>> Gros Bill Alias "Daube_absolue"
Nous ne pouvons que :
- accepter et subir son outil.
ou
- le rejeter en raison de ses défauts


Tu veux une confession ? ===>> OK === >> je ne me sers pour moi-même JAMAIS de Excel. Je ne me suis mis à l'apprendre (il n'y a que quelques mois), que dans le but d'aider ici.
Et je suis en train de recenser toutes ses imperfections...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ