Coder sur un tableau filtré

Résolu/Fermé
Embre - 23 mars 2017 à 15:44
 Embre - 6 avril 2017 à 09:15
Bonjour,

Je suis un peu bloquée.. En fait j'ai un immense tableau excel et mon but est d'automatiser des petites stats toutes simple. Ce tableau contient des filtres (que je n'ai pas mis en place, c'est une collègue, moi, j'avais jamais codé en VBA avant ce matin) et j'aimerais filtré le tableau, compter les lignes du tableau filtré et faire un vieux rapport tout simple.
J'arrive a compter le nombre de ligne du tableau sans soucis, ça marche tres bien mais j'aimerais pouvoir compter le nombre de ligne du tableau filtré..
Voila ce que j'ai :

Sub NombreUrgences()

Dim VNbLignesTotal As Double
Dim Vligne As Integer
Dim VligneMax As Long
Dim VCol As Integer
Dim VClasseur As Integer

nbLignesTotal = 0
Vligne = 0
VligneMax = Range("A" & Rows.Count).End(xlUp).Row
VCol = 1
VClasseur = 2

For Vligne = 1 To VligneMax
If Worksheets(VClasseur).Cells(Vligne, VCol).Value = "" Then
VNbLignesTotal = VNbLignesTotal + 1
End If
Next Vligne


MsgBox VNbLignesTotal

End Sub

Merci d'avance si vous m'aidez..
A voir également:

4 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
24 mars 2017 à 11:02
Bonjour Embre, bonjour le forum,

Un exemple :
Dans l'onglet Feuil1 d'un fichier Excel, en A1 le mot : Données
de A2 à A29 des valeurs au hasard dont 7 fois la valeur 20
Puis le code ci-dessous à adapter à ton cas :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim PL As Range 'déclare la variable PL (PLage)

Set O = Worksheets("Feuil1") 'définit l'onglet O
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée de la colonne "A" de l'onglet O
Set PL = O.Range("A2:A" & DL) 'défini la palge PL
MsgBox "Nombre total de lignes : " & PL.Cells.Count 'message
O.Range("A1").AutoFilter Field:=1, Criteria1:=20 'fitre la colonne 1 avec 20 comme critère
MsgBox "Nombre de lignes filtrées : " & PL.SpecialCells(xlCellTypeVisible).Cells.Count 'message
End Sub

Le premier message affichera 28 et le second 7...
0
MERCI BEAUCOUP ! Désolée je crie mais tu me sauve :) Une erreur de compilation est survenue a cause du field qui apparement doit avoir une fin mais je ne vois pas laquelle.. Voici la ligne au cas où :
O.Range("GO5").AutoFilter Field:=1, Criteria1:= Criteres, Operator:=xlFilterValues

Sachant que j'ai remplacé evidemment ton Criteria1:=20 par pleeeeeins de criteres que j'ai donc mis dans une "variable" Criteres As Variant :)

Merci encore :) !
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
5 avril 2017 à 19:38
Bonjour Embre, bonjour le forum,

Je ne pense pas que tu puisses remplacer impunément le critère par plein de critères à moins que ce ne soit un tableau Array forcément de type Variant. Mais je t'avoue que je ne ne suis pas top dans ce domaine. Utilise l'enregistreur de macro. Fait le filtre automatique à la main et regarde le résultat qu'il propose et compare avec le tien. C'est comme ça que je fais...
0
Du coup j'ai fait ça au départ mais ca posait des soucis alors au lieu de les résoudre en bonne flemmarde j'ai changé en faisant autrement.
Du coup mon code final donne ça (pour les prochains à poser le même genre de questions :

Sub MacroTest()

Dim O As Worksheet
Dim DLC As Long
Dim PL As Range
Dim RP As Long
Dim RN As Long


Set O = Worksheets("Demandes")
DLC = O.Cells(Application.Rows.Count, "C").End(xlUp).Row
Set PL = O.Range("C5:C" & DLC) 'défini la palge PL

MsgBox "Nombre total de demandes : " & PL.Cells.Count

O.Range("$A$4:$IK$3355").AutoFilter Field:=199, Criteria1:="<>"

'MsgBox "Nombre de lignes filtrées : " & PL.SpecialCells(xlCellTypeVisible).Rows.Cells.Count 'message
RP = ((100 * (PL.SpecialCells(xlCellTypeVisible).Rows.Cells.Count)) / (PL.Cells.Count))
RN = 100 - RP

MsgBox "Pourcentage de réponses positives = " & RP
MsgBox "Pourcentage de réponses négatives = " & RN

End Sub

Merci encore ThauTheme tu m'as sauvé :) !
0