[Résolu] Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Polobe36

XLDnaute Occasionnel
Bonjour à tous, le forum,

J'ai un tableau assez conséquent de x dizaines de colonnes et de lignes. C'est un tableau de cause/effet remplis d'une formule simple qui me renvoie à l'intersection d'une ligne et d'une colonne soit la valeur "x" soit "" selon que le résultat de la formule est VRAI ou FAUX.

Découvrant VBA et étant donc novice, mais avec l'envie de comprendre comment çà fonctionne, je me suis inspiré du travail de chacun sur cette discussion et cherche à l'adapter à mon besoin

https://www.excel-downloads.com/threads/masquer-les-colonnes-vide-en-vba.172271/

Staple1600, pour répondre à ta question, je suis ouvert à toute solution possible, alors oui je veux bien et merci par avance de toute aide.

Cordialement,
 

Staple1600

XLDnaute Barbatruc
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re,

Polobe36
Un plus pour faciliter la résolution de ta question serait que tu joignes un fichier exemple anonymisé .
Afin que l'on ait une base pour faire des tests.
Au départ tu disais:
Bonjour à tous,
Comment faudrait-il l'adapter pour masquer non pas les colonnes/lignes vides mais plutôt celles où la valeur est égale à 0
Donc la macro masquer se base sur ce critère.
Je te laisse déjà tester ces deux macros en attendant ton fichier.

Code:
Sub masquer()
Dim dl&, dc&, i&
With ActiveSheet
dl = .Cells.Find("*", searchorder:=1, searchdirection:=2).Row
dc = .Cells.Find("*", searchorder:=2, searchdirection:=2).Column
End With
For i = 1 To dc
Columns(i).Hidden = Application.CountIf(Columns(i), 0) > 0
Next
For i = 1 To dl
Rows(i).Hidden = Application.CountIf(Rows(i), 0) > 0
Next
End Sub
Code:
Sub afficher()
With Cells
    .Rows.Hidden = False
    .Columns.Hidden = False
End With
End Sub
 
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re Staple1600,
En effet je me suis un peu trop reposé sur l'exemple de debord23, mon besoin étant similaire.
merci de ton aide, je n'ai pas la possibilité de te répondre par un exemple ce soir mais je m'y attele dès demain et testerai la solution proposée.
Bonne soirée.
 

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

bonjour à tous, Staple1600,

Comme promis voici le fichier en pièce jointe.
Décidément j'y arrive pas.. j'ai essayé le code que tu as posté, réessayé d'adapter les codes de l'autre discussion: sans succès. Je ne sais pas sur quel "paramètre" agir pour arriver à masquer toutes les lignes et colonnes de mon tableau dont la valeur n'est pas égale à "x".

Je veux bien un petit éclairage

Merci d'avance
 

Pièces jointes

  • TabCauseEffet.xls
    108.5 KB · Affichages: 31
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Bonjour à tous


Il faut chausser les lunettes, camarades !
j'ai pourtant été explicite dans mon précédent message.
Au départ tu disais:
quote_icon.png
Envoyé par Polobe36
Bonjour à tous,
Comment faudrait-il l'adapter pour masquer non pas les colonnes/lignes vides mais plutôt celles où la valeur est égale à 0

Donc la macro masquer se base sur ce critère.
Je te laisse déjà tester ces deux macros en attendant ton fichier.
zéro et x ne sont pas la même chose

Il fallait donc modifier le code en conséquence ...:p:rolleyes:
 

Staple1600

XLDnaute Barbatruc
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re

Voici une autre façon de faire plus simple à comprendre
Code:
Sub masquer2()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For Each c In ActiveSheet.UsedRange
If c.Text Like "x" Then
'pour masquer les colonnes
c.EntireColumn.Hidden = True
'pour masquer les lignes
c.EntireRow.Hidden = True
End If
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub

Sinon pour l'autre macro, il fallait juste faire ces changements:
Remplacer le 0 par x ...:rolleyes:
Code:
For i = 1 To dc
Columns(i).Hidden = Application.CountIf(Columns(i), "x") > 0
Next
For i = 1 To dl
Rows(i).Hidden = Application.CountIf(Rows(i), "x") > 0
Next
 

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re Staple1600,

Effectivement il est vrai que je me suis mal exprimé, désolé, du mal à exprimer clairement le besoin.... J'essaie de mettre en pratique tes modifications, mais en regardant bien, je crois qu'il y a eu incompréhension et que çà me donne l'effet inverse du résultat souhaité. En effet, çà me masque les lignes et colonnes que j'aimerais garder afficher et inversement.
masquer toutes les lignes et colonnes de mon tableau dont la valeur n'est pas égale à "x"
 
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re,

Et bien nan, j'ai essayé de remplacer le "x" par "" ou encore par une autre valeur en cohérence avec la formule*, et çà ne marche pas.

*les solutions avec le code Robert et le tien (cf. l'autre discussion) fonctionne parfaitement sauf si dans la cellule il y a une formule (donc elle est pas vide)
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re


Et avec ceci, c'est mieux ?
Code:
Sub afficher()
With Cells
    .Rows.Hidden = False
    .Columns.Hidden = False
End With
End Sub
Code:
Sub masque3()
Dim c As Range, i&, j&
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For i = 2 To Range("B3:AL16").Columns.Count + 1
For j = 3 To Range("B3:AL16").Rows.Count + 2
If Application.CountBlank(Range(Cells(3, i), Cells(16, i))) = 14 Then
Columns(i).Hidden = True
If Application.CountBlank(Range(Cells(j, 2), Cells(j, 38))) = 37 Then
Rows(j).Hidden = True
End If
End If
Next
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
 

Si...

XLDnaute Barbatruc
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

salut
pour ma part et pour le plaisir Staple :D, quand je dois basculer, je balance : contrôle ToggleButton !
Dans la page de code de la feuille impliquée, [Ta] étant le tableau (pour restreindre le nombre de cellules traitées)
Code:
Private Sub ToggleButton1_Click()
  ToggleButton1.Caption = IIf(ToggleButton1.Caption = "Masquer", "Afficher", "Masquer")
  If ToggleButton1.Caption = "Masquer" Then
    [Ta].Rows.Hidden = 0
    [Ta].Columns.Hidden = 0
  Else
    Dim n As Byte
    Application.ScreenUpdating = 0
    For n = 3 To [Ta].Columns.Count
      Columns(n).Hidden = Application.CountIf(Columns(n), "x") = 0 'attention ici = et pas > 0
    Next
    For n = 3 To [Ta].Rows.Count
      Rows(n).Hidden = Application.CountIf(Rows(n), "x") = 0
    Next
  End If
End Sub
 

Pièces jointes

  • VuPasVu.xls
    104 KB · Affichages: 37
  • VuPasVu.xls
    104 KB · Affichages: 43
  • VuPasVu.xls
    104 KB · Affichages: 43

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

Re,

Nickel!! oui c'est bien mieux Staple1600 . Je vais essayer et arriver à comprendre le sens du code que tu as fourni. Merci de ton aide et excuse moi d'avoir mal exprimé mon besoin.

çà à l'air Si... facile! merci pour la solution.
 
Dernière édition:

Polobe36

XLDnaute Occasionnel
Re : Masque VBA de colonnes et lignes si valeur n'est pas égale à...

bonjour Si...,

A quoi correspond le "3" dans ton code? et pourquoi tous les résultats "faux" ne sont pas masqués? (par exemple si je prend le critère Organe 7, on devrait masquer la colonne B et la ligne 16)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 584
Messages
2 089 975
Membres
104 321
dernier inscrit
tesre