Afficher le nombre de lignes correspondant à un critère

Romain31

XLDnaute Occasionnel
Bonjour à tous,

J'ai passé la journée d'hier à tenter de mettre en oeuvre le projet suivant. Sans succès.

A partir d'un choix entre 3 valeurs (par données-Validation) dans la colonne A, les lignes ne correspondant pas à ce choix sont masquées par un "Worksheet_Change".
(Egalement certaines colonnes, mais sans rapport avec mon problème).
Je souhaite afficher en A3 le nombre de toutes les valeurs correspondant à ce choix.
Ex : Il y a 3 valeurs "TOTO" dans la colonne A, 3 doit s'afficher en A4

Je ne pense pas que cela soit possible par formule.
En VBA, peut-être avec un SI et dans le style Range("A3").FormulaR1C1 = "=COUNTIF(R[1]C:R[1000]C,""TOTO"")" qui irait chercher la dernière cellule et l'utiliser comme variable, mais j'avoue que je bute.

Un grand merci pour votre aide et très bonne journée à tous.

En PJ, un fichier

Romain
 

Pièces jointes

  • test.xlsm
    21.6 KB · Affichages: 15

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour Romain, bonjour le forum,

En A3 la formule :
=NB.SI(A5:A100;A4)
et ton code légèrement modifié
VB:
Sub afficher_tout()
  Cells.Select
  Selection.EntireRow.Hidden = False
  With Range("A4")
  .ClearContents
  .Select
  End With
End Sub[code]
 

Romain31

XLDnaute Occasionnel
Bonjour Robert,

Déjà, merci pour ta réponse.
J'avais essayé la fonction NB.SI dans un SI avec les 3 critères un SI à 3 conditions).
Je ne pense pas que ce soit réalisable par formule car il faut "s'appuyer" sur le critère choisi qui donc, varie.
Je ne sais pas non plus si le code dans "Worksheet_Change" est correct. Par contre, il réagit correctement.
Bonne journée.
 

Romain31

XLDnaute Occasionnel
Bonjour Robert,

Non, cela ne fonctionne pas.
J'ai travaillé hier soir sur un code VBA qui récupère le contenu de la dernière cellule et qui me copie la valeur en A3.
With DerniereCelluleRemplie (ma variable)
Ce code ne fonctionnait pas : If DerniereCelluleRemplie.value = "toto" Then
Par contre, en retirant value, c'est impeccable - If DerniereCelluleRemplie = "toto" Then

Je vais poursuivre mes essais avec un SI à trois conditions en intégrant un NB.SI pour chaque critère.

Bonne journée
 

Romain31

XLDnaute Occasionnel
Ok si on met une valeur en A4.
Mais si je mets "TOTO" dans la cellule A15, la fonction renvoie 0
L'utilisateur est censé saisir des lignes à partir de la ligne 4.
Et la cellule A3 doit indiquer le nombre total de données saisies en fonction du dernier choix.

Dans tous les cas, merci à toi de m'avoir répondu
 

Robert

XLDnaute Barbatruc
Repose en paix
Re,

Alors comme ça :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim ligne As Integer 'pour le masquage des lignes

' La variable KeyCells contient les cellules qui déclencheront
' une alerte si elles sont modifiées.
'Set KeyCells = Range("A5") - On définit une plage et non une cellule particulière
Set KeyCells = Range("A4:A1000")
If Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then Exit Sub
Select Case Target.Value
  Case "TOTO"
  Columns.Hidden = False
  Rows.Hidden = False
  Range("G:G,I:M,P:Q,T:X,AA:AA,AC:AD").EntireColumn.Hidden = True
  For ligne = 4 To 1000
  If Cells(ligne, 1).Value = "TATA" Or Cells(ligne, 1).Value = "TITI" Then Rows(ligne).Hidden = True
  Next ligne
  Case "TATA"
  Columns.Hidden = False
  Rows.Hidden = False
  Range("H:H,J:J,U:Y,AD:AD").EntireColumn.Hidden = True
  For ligne = 4 To 1000
  If Cells(ligne, 1).Value = "TOTO" Or Cells(ligne, 1).Value = "TITI" Then Rows(ligne).Hidden = True
  Next ligne
  Case "TITI"
  Columns.Hidden = False
  Rows.Hidden = False
  Range("H:I,Y:Y,AA:AA,AC:AD").EntireColumn.Hidden = True
  For ligne = 4 To 1000
  If Cells(ligne, 1).Value = "TOTO" Or Cells(ligne, 1).Value = "TATA" Then Rows(ligne).Hidden = True
  Next ligne
End Select
Range("A3").Value = Range("A4:A" & Cells(Application.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count - 1
End Sub
 

Romain31

XLDnaute Occasionnel
Intéressant, Robert mais le décompte n'est pas exact.
Dans la dernière ligne, tu indiques :
Range("A3").Value = Range("A4:A" & Cells(Application.Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeVisible).Count - 1

Je me demandais si l'indication "Value" était nécessaire car j'ai bossé sur ce code hier soir qui fonctionne bien :

Sub recup_der_cell_ok()
Dim DerniereCelluleRemplie As Variant
Dim value As Variant
DerniereCelluleRemplie = Columns("A:A").Find("*", Range("A1"), , , xlByRows, xlPrevious).value
MsgBox DerniereCelluleRemplie 'facultatif bien sûr ...
With DerniereCelluleRemplie
' POUR INFO - VALUE FAIT PLANTER LE CODE If DerniereCelluleRemplie.value = "TOTO" Then
If DerniereCelluleRemplie = "TOTO" Then
Range("A1").value = DerniereCelluleRemplie
End If
End With
'Set Value = Nothing
End Sub

L'idée est de faire un IF avec mes 3 critères.
Qu'en penses-tu ?
 

Pièces jointes

  • TEST FORUM.xlsm
    16.6 KB · Affichages: 8

Discussions similaires

Réponses
7
Affichages
327

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 871
dernier inscrit
Maïmanko