Macro Masquer lignes condition

C

Chris

Guest
Bonjour à tous,
J'ai un petit souci avec une macro excel. Dans une feuille excel (voir fichier .zip), j'ai 3 tableaux 'A6:H45', 'A50:H89' et 'A94:H133'. Pour chaque tableau je souhaite pouvoir réaliser les 2 opérations ci-dessous :
1/ Masquer les lignes lorsque les cellules (A à H) sont vides ou = 0;
2/ Trier chaque tableau par ordre croissant en fonction des valeurs de la colonne D.
J'ai monté la macro ci-dessous qui semble fonctionner pour masquer les lignes dans le tableau 'A6:H45'. Mais je n'arrive pas à enchainer mon développement pour les 2 autres tableaux et le tri associé.

Sub Masquer_Lignes_Conditionnel()
' Cette macro permet de masquer les lignes A6 à H45, A50 à A89,
' A94 à A133 lorsque la valeur de la ligne correspondante = 0
' ou est vide
Dim valeur As Range, vide As String, c As Byte
For Each valeur In Range('A6:H45')
If (valeur.Column > 0 And valeur.Column < 9) _
Then
If valeur = vide Or valeur = 0 Then c = c + 1
If valeur.Column = 8 And c = 8 Then
Rows('' & valeur.Row & ':' & valeur.Row & '').EntireRow.Hidden = True
End If
End If
If valeur.Column = 8 Then c = 0
Next

End Sub

Avez-vous une solution à me proposer ?
Merci à tous de votre aide et bon WE.
Chris. [file name=MasquerLignes.zip size=9307]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MasquerLignes.zip[/file]
 

Pièces jointes

  • MasquerLignes.zip
    9.1 KB · Affichages: 90
  • MasquerLignes.zip
    9.1 KB · Affichages: 87
  • MasquerLignes.zip
    9.1 KB · Affichages: 92

myDearFriend!

XLDnaute Barbatruc
Bonjour Chris, le Forum.

Ci-joint ton exemple modifié pour tenter une réponse à ton problème...

J'ai appliqué la procédure suivante :

Sub Masquer_Lignes_Conditionnel()
Dim Plage As Range, PlageVide As Range
Dim L As Byte
      'Trier les tableaux -----------------------------------------------------------
      For L = 1 To 3
            Set Plage = Choose(L, Range('A6:H45'), Range('A50:H89'), Range('A94:H133'))
            Plage.Sort Key1:=Plage.Cells(1, 4), Order1:=xlAscending
      Next L
      'Masquer les lignes vides -----------------------------------------------------
      'Détermine plage de cellule vide
      Set PlageVide = ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks)
      'Masque chaque ligne contenant 8 cellules vides
      For L = 6 To 133
            Select Case L
            Case Is < 46, 50 To 89, Is > 93 'pour exclure les zones de titre
                  Set Plage = Application.Intersect(Rows(L), PlageVide)
                  If Not Plage Is Nothing Then
                        If Plage.Count = 8 Then Rows(L).Hidden = True
                  End If
            End Select
      Next L
End Sub
Cordialement. [file name=mDF_MasquerLignes.zip size=11521]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mDF_MasquerLignes.zip[/file]
 

Pièces jointes

  • mDF_MasquerLignes.zip
    11.3 KB · Affichages: 89
C

chris

Guest
Bonjour Didier, Bonjour Le Forum,
J'ai un petit souci avec la macro.
Elle ne fonctionne pas pour les lignes dont la valeur est 0.
Peux-tu m'arrager ça ?
Pour le reste, c'est parfait.
Merci d'avance de ton aide.
Je joint en annexe le fichier .zip.
Bon WE.
Chris [file name=mDF_MasquerLignes_20050423191116.zip size=12189]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mDF_MasquerLignes_20050423191116.zip[/file]
 

Pièces jointes

  • mDF_MasquerLignes_20050423191116.zip
    11.9 KB · Affichages: 41

myDearFriend!

XLDnaute Barbatruc
Bonsoir Chris, le Forum.

Ci-joint ton fichier avec la modification suivante :

Sub Masquer_Lignes_Conditionnel()
Dim Plage As Range, PlageVide As Range
Dim L As Byte
Dim
C As Byte
Dim
Chaine As String
      Application.ScreenUpdating = False
      'Trier les tableaux -----------------------------------------------------------
      For L = 1 To 3
            Set Plage = Choose(L, Range('A6:H45'), Range('A50:H89'), Range('A94:H133'))
            Plage.Sort Key1:=Plage.Cells(1, 4), Order1:=xlAscending
      Next L
      'Masquer les lignes vides -----------------------------------------------------
      'Détermine plage de cellule vide
      Set PlageVide = ActiveSheet.UsedRange.SpecialCells(xlCellTypeBlanks)
      'Masque chaque ligne contenant 8 cellules vides ou égales à 0
      For L = 6 To 133
            Select Case L
            Case Is < 46, 50 To 89, Is > 93 'pour exclure les zones de titre
                  Set Plage = Application.Intersect(Rows(L), PlageVide)
                  If Not Plage Is Nothing Then
                        If Plage.Count = 8 Then Rows(L).Hidden = True
                  Else
                        Chaine = ''
                        For C = 1 To 8
                              Chaine = Chaine & CStr(Cells(L, C))
                        Next C
                        If Val(Chaine) = 0 Then Rows(L).Hidden = True
                  End If
            End Select
      Next L
      Application.ScreenUpdating = True
End Sub

Cela dit, je ne suis pas s&ucirc;r que cela soit la façon la plus simple de parvenir au résultat... j'espère toutefois que ça pourra te convenir.

Cordialement. [file name=mDF_MasquerLignes2.zip size=12413]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/mDF_MasquerLignes2.zip[/file]
 

Pièces jointes

  • mDF_MasquerLignes2.zip
    12.1 KB · Affichages: 61

skandy

XLDnaute Nouveau
Bonjour le forum

J'ai un autre souci pour l'exepmle joint, une macro qui masque les lignes suivant la fonction FPE & FPEF
Est ce que vous puvez m'aidez
merci d'avance :eek: [file name=Classeur4_20050527123116.zip size=1807]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Classeur4_20050527123116.zip[/file]

Message édité par: skandy, à: 27/05/2005 13:22
 

Pièces jointes

  • Classeur4_20050527123116.zip
    1.8 KB · Affichages: 48

Statistiques des forums

Discussions
312 337
Messages
2 087 391
Membres
103 534
dernier inscrit
Kalamymustapha