N'affichez la ligne que si la cellule contient une valeur

Bonsoir à tous !!

J'ai une marco qui me permet de masquer les lignes dont la cellule de la colonne B contient une valeur déterminée.

Par exemple soit la valeur déterminée: "TVA", si en B4 j'ai la valeur "TVA", alors quand j'active la macro il masque.

Maintenant, j'aimerai l'inverse.

C'est à dire que la macro n'affiche que les lignes dont la cellule de la colonne B contient une valeur déterminée...

Voici le code existant (qui masque les lignes):

Sub TVA()

Application.Calculation = xlManual

Cells.Select

Selection.EntireColumn.Hidden = False

Selection.EntireRow.Hidden = False

Dim ligne As Integer

Dim colonne As Long

ligne = Range("B" & Rows.Count).End(xlUp).Row

While ligne <> 1

If Range("B" & ligne).Value = "TVA" Then

Rows(ligne).Select

Selection.EntireRow.Hidden = True

End If

ligne = ligne - 1

Wend

End Sub

Comme d'habitude, merci pour votre aide !!!!!!

Bonsoir Boyoo974, le forum,

Pour faire l'inverse, il te suffit de remplacer True par False....

Selection.EntireRow.Hidden = True
Selection.EntireRow.Hidden = False

A tester......................valeur déterminée = TVA......

Sub TVA()

Application.Calculation = xlManual
Cells.Select
Selection.EntireColumn.Hidden = False
Selection.EntireRow.Hidden = False

Dim ligne As Integer
Dim colonne As Long
ligne = Range("B" & Rows.Count).End(xlUp).Row
While ligne <> 1
If Range("B" & ligne).Value = "TVA" Then
Rows(ligne).EntireRow.Hidden = False
Else
Rows(ligne).EntireRow.Hidden = True
End If
ligne = ligne - 1
Wend
End Sub

Bonne soirée,

Bonsoir xorsankukai,

Merci beaucoup, ça fonctionne parfaitement !

Bonne soirée !!

Bonjour Boyoo974, xorsankukai,

attention : dans vos codes VBA, vous avez oublié de réactiver le calcul automatique :

Application.Calculation = xlCalculation.Automatic

mais c'était inutile de le désactiver, car masquer / afficher des colonnes ou des lignes ne change pas le contenu des cellules !

d'autre part, comme on masque des lignes : on ne les supprime pas, donc on peut faire l'opération de haut en bas.


je propose ce code VBA :

Sub TVA()
  Dim dlig&, lig&: Application.ScreenUpdating = 0
  dlig = Cells(Rows.Count, 2).End(xlUp).Row
  For lig = 2 To dlig
    Rows(lig).Hidden = Cells(lig, 2) <> "TVA"
  Next lig
End Sub

* si différent de "TVA" : ligne masquée ; sinon : ligne affichée

* j'pense pas qu'c'était utile d'afficher les colonnes

dhany

Salut Dhanny,

Merci pour la remarque concernant le calcul auto,

J'ai essayé ton code, mais du coup il me masque toutes mes lignes jusqu'à la dernière ligne ou il y a la cellule avec TVA dedans.

Du coup j'ai gardé l'autre code.

Merci quand meme

En revanche, j'ai essayé de faire un code similaire pour le masquage des colonnes mais je n'ai pas réussi...

L'idée est de masquer toutes les colonnes dont les cellules de la ligne 2 contient "IP"

Sub IP_test()

Application.Calculation = xlManual

Cells.Select

Selection.EntireColumn.Hidden = False

Selection.EntireRow.Hidden = False

Dim ligne As Integer

Dim colonne As Long

colonne = Cells.SpecialCells(xlCellTypeLastCell).Column

While colonne <> 2

If Cells(2, colonne).Value = "*" & IP & "*" Then

Columns(colonne).Select

Selection.EntireColumn.Hidden = False

Else

Columns(colonne).Select

Selection.EntireColumn.Hidden = True

End If

colonne = colonne - 1

Wend

End Sub

Bonjour Boyoo974, Dhany, le forum,

masquer toutes les colonnes dont les cellules de la ligne 2 contient "IP"

A tester:

Sub masquer()
Dim i  As Integer, dc As Integer
   dc = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

   For i = 1 To dc
    If Cells(2, i) Like "*ID*" Then Columns(i).EntireColumn.Hidden = True
   Next i

End Sub

Cordialement,

Bonjour,

Et le filtre automatique avec ou sans VBA, c'est pour les cochons ?

Cdlt.

groink(*) !


(*) traduction de ce mot-clé VBA : oui, nous, les cochons, on raffole des filtres automatiques !

d'ailleurs, c'est bien connu qu'on mange de tout, même de la confiture !

Re,

Du coup j'ai gardé l'autre code.

Je m'étais contenté de modifier ton code, mais comme je n'aime pas les boucles while et préfère les for next....

Sub tva()

Dim i  As Integer, dl As Integer
   dl = Range("A" & Rows.Count).End(xlUp).Row

   For i = 2 To dl

   Application.ScreenUpdating = False
    If Cells(i, 2) Like "TVA" Then
      Rows(i).EntireRow.Hidden = False
    Else
      Rows(i).EntireRow.Hidden = True
    End If
   Next i

End Sub

Cordialement,

EDIT: ....Bonjour Dhany et Jean-Eric,

14afficher-tva.xlsm (19.94 Ko)

Bonjour,

Et le filtre automatique avec ou sans VBA, c'est pour les cochons ?

Cdlt.

Bonjour Jean-Eric,

La base de donnée que je prépare sera à destination de l'ensemble de l'entreprise, je préfère maximiser la simplicité et ne garder qu'une seule méthode (faire des boutons filtres)

Mais merci quand meme !

Re,

Du coup j'ai gardé l'autre code.

Je m'étais contenté de modifier ton code, mais comme je n'aime pas les boucles while et préfère les for next....

Sub tva()

Dim i  As Integer, dl As Integer
   dl = Range("A" & Rows.Count).End(xlUp).Row

   For i = 2 To dl

   Application.ScreenUpdating = False
    If Cells(i, 2) Like "TVA" Then
      Rows(i).EntireRow.Hidden = False
    Else
      Rows(i).EntireRow.Hidden = True
    End If
   Next i

End Sub

Cordialement,

EDIT: ....Bonjour Dhany et Jean-Eric,

Re,

j'ai essayé ce code mais il ne semble pas fonctionner :/

Par contre, ton précédent code fonctionne nickel !

La je voulais faire la même chose mais pour les colonnes au lieu des lignes en fait

Re,

la macro n'affiche que les lignes dont la cellule de la colonne B contient TVA

10afficher-tva.xlsm (19.94 Ko)

masquer toutes les colonnes dont les cellules de la ligne 2 contient "IP"

Re,

la macro n'affiche que les lignes dont la cellule de la colonne B contient TVA

Afficher tva.xlsm

masquer toutes les colonnes dont les cellules de la ligne 2 contient "IP"

masquer colonne ID.xlsm

Je viens de m'apercevoir de mon erreur....

Je ne veux faire apparaitre QUE les colonnes dont les cellules de la ligne 2 contient "IP"...

Désolé !!!

Par contre, mystère fou, le code que tu m'as donné pour masquer les colonnes ne fonctionnent pas non plus chez moi... pourtant j'ai recopier la macro exacte

Re,

e ne veux faire apparaitre QUE les colonnes dont les cellules de la ligne 2 contient "IP".

Petite erreur dans le code précédent...j'ai mis ID au lieu de IP....

11ip.xlsm (19.55 Ko)

Cordialement,

ah oui : IP = Identifiant Protocol ; il n'a donc pas besoin d'un ID (= IDentifiant) supplémentaire !

dhany

Re,

e ne veux faire apparaitre QUE les colonnes dont les cellules de la ligne 2 contient "IP".

Petite erreur dans le code précédent...j'ai mis ID au lieu de IP....

IP.xlsm

Cordialement,

J'y comprend rien....

Le code fonctionne dans ton fichier, mais dans le mien non..... pourtant j'ai les mêmes paramètres......

10test.xlsm (53.36 Ko)

ah ben oui, c'est d'un pratique, tiens ! y'a aucune donnée, tout est vide ! idéal pour tester la macro, quoi !

dhany

Re,

Sub masquer()
Dim i  As Integer

   Application.ScreenUpdating = False

   For i = 3 To 20
    If Cells(2, i) Like "*IP*" Then
     Columns(i).EntireColumn.Hidden = False
    Else
     Columns(i).EntireColumn.Hidden = True
    End If
   Next i

End Sub
16test-2.xlsm (53.60 Ko)

Cordialement,

Re,

La base de donnée que je prépare sera à destination de l'ensemble de l'entreprise, je préfère maximiser la simplicité et ne garder qu'une seule méthode (faire des boutons filtres)

La simplicité serait de faire un filtre automatique en VBA avec un bouton, non ?

Pourquoi les données ne sont-elles pas sous forme de tableau ?

Cdlt;

Ca fonctionne !!!!

Merci à vous trois !!!

Rechercher des sujets similaires à "affichez ligne que contient valeur"