MACRO-masquer/afficher lignes

Résolu
100drine -  
 100drine -
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

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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
    1. 100drine
       
      Merci beaucoup pour cette solution elle marche à merveille !!
      0
  2. zebulon2503 Messages postés 1229 Date d'inscription   Statut Membre Dernière intervention   110
     
    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
    1. 100drine
       
      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
  3. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
    1. 100drine
       
      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