Afficher/Masquer une ligne sous DEUX conditions

kevkev051

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur ce forum, et novice en tout ce qui est macro et VBA.
Comme l'intitulé de mon message l'indique, j'aimerais avoir une macro, à laquelle je pourrais associer un bouton, qui me permettrait de masquer des lignes sous DEUX conditions et sur plusieurs worksheets en même temps, juste en appuyant sur le bouton. Je mets "deux" en majuscule pour vous rassurer, j'ai bien arpenté votre site et bien d'autres d'ailleurs avant de vous écrire et à chaque fois on ne me propose qu'une seule condition. .

J'ai mis un exemple de fichier en pièces jointes avec la macro que j'ai faite et qui ne marche pas . Mon souhait donc serait que les comptes qui n'auraient pas de chiffres de renseignées soient masquées. Ceci rentre dans le cadre de mon stage et vous écrire en ce moment relève de ma dernière option. J'aimerais bien partir en week-end en faisant bonne impression à mon tuteur de stage. Je ne manquerai pas de signaler que c'est grâce à vous :).

En espérant avoir des nouvelles incessamment sous peu, merci d'avance pour votre aide

Kevkev051
 

Pièces jointes

  • Classeur5.xlsm
    16.4 KB · Affichages: 92
  • Classeur5.xlsm
    16.4 KB · Affichages: 116
  • Classeur5.xlsm
    16.4 KB · Affichages: 90

Jack2

XLDnaute Occasionnel
Re : Afficher/Masquer une ligne sous DEUX conditions

Bonjour kevkev051,

Peut être comme ça :
Code:
Private Sub Masquer_Lignes_Vides()
'
' Masquer_Lignes_Vides Macro
' Permet de masquer les postes qui n'ont ressorti aucune valeur.
Dim i As Integer, j As Integer, Debut As Integer

For j = 1 To ActiveWorkbook.Sheets.Count
'première ligne non vide après compte
Debut = ActiveSheet.UsedRange.Row + 2

For i = Debut To Cells(Rows.Count, 1).End(xlUp).Row
    If Cells(i, 3) = "" And Cells(i, 4) = "" Then Rows(i).Hidden = True
Next i

Next j
End Sub
A+ Jack2
 
Dernière édition:

kevkev051

XLDnaute Nouveau
Re : Afficher/Masquer une ligne sous DEUX conditions

Merci pour ta réponse Jack2, ça marche bien sur le fichier excel que j'ai posté, mais quand je l'essaye sur l'autre il marche pas!! j'ai trouvé ceci aussi et je ne comprends pas tout pour le coup (dlg? ("A" & Rows.Count? WorksheetFunction.Count(Range("B" & i & ":K" & i)) = 0?)
 

Staple1600

XLDnaute Barbatruc
Re : Afficher/Masquer une ligne sous DEUX conditions

Bonsoir à tous

Une autre solution (qui semble plus rapide sur ton dernier fichier exemple)
Code:
Sub Masquer_videsBis()
Dim dl&: dl = Cells(Rows.Count, 1).End(3)(-2).Row
Application.ScreenUpdating = 0
With Range(Cells(4, "L"), Cells(dl, "L"))
    .FormulaR1C1 = "=IF(COUNTA(RC[-10]:RC[-1])=0,""X"",0)"
Application.Calculation = -4135
    .Value = .Value
    .SpecialCells(xlCellTypeConstants, 2).EntireRow.Hidden = True
End With
Columns(12) = Empty
Application.Calculation = -4105
Application.ScreenUpdating = -1
End Sub
PS: Si tu as des questions sur le code, n'hésites pas ;)
 

Jack2

XLDnaute Occasionnel
Re : Afficher/Masquer une ligne sous DEUX conditions

Bonjour le fil, le Forum,

@kevkev051, c'est normal que ça ne marche pas dans le deuxième exemple. D'après le premier j'avais compris qu'il fallait tester le manque d'information à partir de la colonne C.

dlg comme la formule Cells(Rows.Count, 1).End(xlUp).Row servent à déterminer la dernière ligne non vide (fin de ton tableau) et debut la première ligne non vide + la ligne de titre et la suivante qui est vide. WorksheetFunction.Count(Range("B" & i & ":K" & i)) = 0 permet de tester si pour une ligne donnée le nombre de cellules qui contiennent un nombre (si aucune : la fonction renvoi 0)

Staple utilise une formule proche pour déterminer le nombre de ligne à traiter. Le (-2) sert à enlever les 3 lignes qui ne contiennent pas de données article ou de nombre. Le 3 de End(3) sans le (-2) donne la dernière ligne non vide (les autres nombres semblent donner le total de ligne de la feuille (là, il faut que je cherche pourquoi).

Le code de Staple évite les boucles. Il est donc plus rapide. Par contre, je ne comprends pas la ligne .Value = .Value et je suppose .SpecialCells(xlCellTypeConstants, 2) sert à détecter les croix (Staple d'exliquera mieux son code que moi).
Je vais essayer de comprendre ces deux lignes.

A+ Jack2
 

Staple1600

XLDnaute Barbatruc
Re : Afficher/Masquer une ligne sous DEUX conditions

Bonjour à tous

Bonjour le fil, le Forum,
Le code de Staple évite les boucles. Il est donc plus rapide. Par contre, je ne comprends pas la ligne .Value = .Value et je suppose .SpecialCells(xlCellTypeConstants, 2) sert à détecter les croix (Staple d'exliquera mieux son code que moi).
Je vais essayer de comprendre ces deux lignes.
A+ Jack2
Jack2
•1) le .Value=.Value 'transforme en valeurs seules sans passer par PasteSpecial xlValues (Collage spécial/Valeurs)
•2) .SpecialCells(xlCellTypeConstants, 2) sélectionne les cellules avec Constantes, Texte
(donc les cellules avec un X
Il reste plus ensuite qu'à masquer ces lignes sélectionnées avec EntireRow.Hidden=True
 

Discussions similaires

Réponses
2
Affichages
323
Réponses
2
Affichages
210

Statistiques des forums

Discussions
312 488
Messages
2 088 863
Membres
103 979
dernier inscrit
imed