Masquer lignes vides

Résolu/Fermé
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020 - 19 sept. 2017 à 14:36
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 - 20 sept. 2017 à 16:46
Bonjour à tous,
Mon fichier Excel comporte un tableau, susceptible d'avoir des valeurs en colonne A de la ligne 5 à la ligne 500.
Je souhaiterais à l'aide d'une macro, masquer toutes les lignes vides (entre ma dernière valeur et la ligne 500 donc).
En A1 j'ai la formule "=NBVAL(A5:A500)+4" qui me permet de savoir cbn de lignes sont remplies, je cherche donc le code pour masquer les lignes entre ma valeur obtenue en A1 et la ligne 500.
Merci d'avance pour votre aide !

2 réponses

fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59
Modifié le 19 sept. 2017 à 14:58
Bonjour,
Une idée pas testée mais qui devrait tourner :
dim i as integer
dim j as integer  

for i = 4 to 500
    if worksheets("NOMDELAFEUILLE").range("A" & i) = "" then
        rows(i).hidden=true
        j = j + 1
    end if
    if  worksheets("NOMDELAFEUILLE").range("A1")= i - j then exit for 
next i

Quand on ne dispose que d'un marteau tout les problèmes ressemblent à un clou
1
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
19 sept. 2017 à 15:04
Bonjour Fabien,

Merci beaucoup pour votre aide, le résultat est bien celui attendu mais l'exécution de la macro est assez longue.. (presque 1 minute)
Avez vous une autre idée pour être plus rapide ?

Merci !
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59 > peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
19 sept. 2017 à 15:10
chez moi c'est trés rapide donc non pas d'autre idées si ce n'est changer d'ordi...
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59 > fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022
19 sept. 2017 à 15:21
enfin si pour etre plus rapide, pourquoi ne pas laisser de lignes vides lors du remplissage du tableau ?
0
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 10:13
Bonjour,
En fait pour être plus rapide je souhaiterais que la macro sélectionne toutes les lignes vides en même temps et les masques toutes d'un coup au lieu de faire une par une.

Pour ça j'ai en C1 la formule "=NBVAL(A5:A500)+4" qui me permet de savoir cbn de lignes sont remplies et en D1 la valeur 500.

Dans ma macro j'ai :

prem_li = Cells(1, 3).Value
dern_li = Cells(1, 4).Value

Rows("prem_li:dern_li").Select

Selection.EntireRow.Hidden = True


Les 2 premières lignes lisent bien la valeur de la cellule en question mais la 3ème ligne ne fonctionne pas...

Avez-vous une idée pour cela ?

Merci beaucoup
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59 > peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
Modifié le 20 sept. 2017 à 10:30
ça me paraît normal que ça ne fonctionne pas, c'est bien de savoir combien de ligne il faut masquer mais il faut aussi savoir lesquelles!
c'est pour ça que je compte J pour sortir de la boucle : en gros " D1 - J = C1"
mais quoi qu'il en soit il faut forcément tester la ligne pour savoir si elle est à effacer

Ou alors... il faut réfléchir à un code sur
worksheet_change

qui détecte une entrée -> si ligne supérieure vide -> garde en mémoire puis peut être un bouton avec une macro "masquer les lignes"... à voir mais je risque de ne pas avoir le temps aujourd'hui
0
Bonjour peybernes,

Je te propose ce code VBA :


Option Explicit

Sub Essai()
  Dim dlig As Long, lig As Long
  Application.ScreenUpdating = False
  dlig = Range("A" & Rows.Count).End(xlUp).Row
  For lig = 5 To dlig
    If Cells(lig, 1) = "" Then Rows(lig).Hidden = True
  Next lig
End Sub


Faire un effacement d'un seul coup d'un bloc de lignes vides
est possible seulement si tes lignes vides sont contigües,
ce qui n'est peut-être pas forcément le cas.

Cordialement
 
1
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 14:57
Bonjour Fred,

Merci pour ton aide ! Oui c'est vrai que je ne l'ai pas précisé mais dans mon cas, lorsqu'une ligne est vide, toutes celles d'après sont vides également.

Cordialement
0
fabien25000 Messages postés 673 Date d'inscription mercredi 5 octobre 2016 Statut Membre Dernière intervention 28 juillet 2022 59 > peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 15:02
lorsqu'une ligne est vide, toutes celles d'après sont vides également

!?!?

par curiosité il y a quoi ligne 501 et sur les suivantes?
0
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 15:10
Rien du tout elles sont vides, allez jusqu'à la ligne 500 est une sécurité que je prends.
Ma macro finale tourne une fois par semaine pour me sortir les données de la semaine en cours.
Très souvent, des lignes 200 à 500 toutes les lignes seront vides mais je préfère aller jusqu'à 500 "au cas où" des données sont présentes un jour.
0
fred > peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 15:15
 
@peybernes

Dans ce cas, je te propose ce nouveau code VBA :


Option Explicit

Sub Essai()
  Application.ScreenUpdating = False
  Dim dlig As Long, lig As Long: dlig = Rows.Count
  lig = Range("A" & dlig).End(xlUp).Row + 1
  Rows(lig & ":" & dlig).Hidden = True
End Sub


Cordialement
 
0
peybernes Messages postés 56 Date d'inscription jeudi 12 janvier 2017 Statut Membre Dernière intervention 29 juillet 2020
20 sept. 2017 à 15:20
C'est parfait !!!

Merci beaucoup à tous les deux pour l'aide apportée :D
0