Coder sur un tableau filtré
Résolu
Embre
-
Embre -
Embre -
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..
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:
- Coder sur un tableau filtré
- Tableau word - Guide
- Code ascii tableau - Guide
- Photo filtre 7 gratuit - Télécharger - Retouche d'image
- Trier un tableau excel - Guide
- Comment imprimer un tableau excel sur une seule page - Guide
4 réponses
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 :
Le premier message affichera 28 et le second 7...
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...
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 :) !
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 :) !
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...
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...
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é :) !
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é :) !