MACRO-masquer/afficher lignes

Résolu/Fermé
100drine - 1 avril 2010 à 11:36
 100drine - 1 avril 2010 à 13:44
Bonjour,
Etant débutante en VBA, j'ai après des recherches sur des forums essayé de faire une petite macro pour que sur une feuille excel il me cache les lignes quand il y a 0 dans ma colonne F mais qu'il me les ré-affiches quand la valeur en colonne F ne soit plus 0. Et ça à partir d'un bouton sur ma feuille excel.
Par contre j'ai plusieurs problèmes :
1- je ne sais pas comment faire si j'ai des lignes vides entre plusieurs lignes avec des nombres, car il me bloque sur la première ligne vide surement du à :Do While ActiveCell <> "", mais je ne sais pas quoi mettre d'autre à la place.
2- une fois la macro effectuée, il met mon curseur (cellule surlignée) tout en bas du tableau (F10), mais en haut de la fenetre (je ne sais pas trop si vous voyez ce que je veux dire) mais je suis obligée de remonter la feuille avec la roulette..

Je vous met mon code, piqué un peu partout sur les forums.. En espérant que quelqu'un pourra m'aider.

Merci d'avance


Sub MasQLigne()
Application.ScreenUpdating = False
'Mise en place au départ
Range("F1:F10").Select
Do While ActiveCell <> ""

'Effacement de ligne
If ActiveCell = 0 Then
Selection.EntireRow.Hidden = True
ActiveCell.Offset(1, 0).Select

End If

'Affichage de ligne
If ActiveCell.Value <> 0 Then
Selection.EntireRow.Hidden = False

ActiveCell.Offset(1, 0).Select

End If

Loop
Application.ScreenUpdating = True
End Sub


A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
1 avril 2010 à 11:48
Bonjour,
Essayez ceci :

Sub MasQLigne()
Dim Cell As Range
'Mise en place au départ
For Each Cell In Range("F1:F10")
If Cell = "0" Then
Cell.EntireRow.Hidden = True
Else
'Affichage de ligne
Cell.EntireRow.Hidden = False
End If
Next
End Sub


Je ne l'ai pas testé donc revenez après test me dire si cela fonctionne
0
Merci beaucoup pour cette solution elle marche à merveille !!
0
zebulon2503 Messages postés 1228 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 11 février 2016 110
Modifié par zebulon2503 le 1/04/2010 à 11:57
Lut
Y'a un peu plus simple si tu ne dois faire ca qu'entre F1 et F10 :
Sub MasQLigne()  
Application.ScreenUpdating = False  
'Mise en place au départ  

For i=1 to 10 
cells(i,6).select ' C'est une autre facon de sélectionner une cellule, i étant ici le numéro de ligne et 6 l'indice de la colonne (F étant la 6e lettre) 

'Effacement de ligne  
If ActiveCell = 0 Then  
  Selection.EntireRow.Hidden = True  
Else 
  'Affichage de ligne  
  Selection.EntireRow.Hidden = False  
End If  

Next i 

Range("A1").Select ' Ca te permet de surligner la cellule A1 et donc de te retrouver en haut de page 
Application.ScreenUpdating = True  
End Sub 


Essaies ca et dis moi si ca te va :-)

Les cons peuvent avoir l'air intelligent à première vue... Heureusement pour eux que la vitesse de la lumière est supérieure à celle du son.
0
En fait elle me cache les lignes avec 0 mais me cache aussi les lignes ou il n'y a rien dans la case, ce que je ne veux pas. Merci quand même pour ton aide... et surtout pour tes explications intercalées dans ton code, qui m'aident a en apprendre un peu plus sur cette programmation qui n'est pas évidente quand tu n'es pas adepte du langage informatique.
Mais j'ai la solution du haut qui me convient mieux et qui n'efface pas les lignes vides.
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
1 avril 2010 à 11:55
Bonjour,

Essaie avec ça:

Sub MasQLigne()
Dim plage As Range
Dim cel

Application.ScreenUpdating = False
'Mise en place au départ
Set plage = Worksheets(1).Range("F1:F10")

    For Each cel In plage
        'Effacement de ligne
        If cel.Value = 0 Then
            Rows(cel.Row).EntireRow.Hidden = True
        Else
            Rows(cel.Row).EntireRow.Hidden = False
        End If
    Next cel

Application.ScreenUpdating = True

End Sub


;o)
0
Merci pour ton aide, et ta proposition. Mais comme pour la réponse juste au dessus, ton code m'efface également les lignes pour laquelles la cellule en F est vide. Ce que je ne voulais pas. Mais j'ai trouvé quelque chose qui me convenait.
Merci beaucoup quand même !
0