Probleme - données filtrées VBA

yatiz

XLDnaute Nouveau
Bonjour les amis,

J'ai un réel problème aujourd'hui, et j'ai besoin de votre aide.
Je cherche à créer un programme qui calculerait automatiquement un taux de réussite basé sur un score (100) basé sur plusieurs critères.

Mais le problème, c'est que mes données sont filtrées avec une dizaine de colonnes dans Excel et du coup, mon programme sur VBA prend en compte toute les données, et pas seulement les données filtrées comme je le souhaiterez.
Il sélectionne la totalité, c'est a dire environ 300 données au lieu d'une centaine ou vingtaine qui sont filtrées.

Quelqu'un aurait une solution s'il vous plait ?
En vous remerciant.

Voici ma macro :

Sub liste1()

Dim L As Variant
Dim compteur As Variant
Dim Total As Variant
Dim Bon As Variant


compteur = 0
L = 1


While Cells(L, 12).Value <> ""

If Subtotal(Cells(L, 12) = 100) Then
compteur = compteur + 1
Else
compteur = compteur

End If

L = L + 1


Wend

Cells(2, 16).Value = compteur
Bon = Cells(2, 16).Value


compteur = 0
L = 2


While Cells(L, 12).Value <> ""

compteur = compteur + 1
L = L + 1


Wend

Cells(4, 16).Value = compteur
Total = Cells(4, 16).Value


Cells(1, 16).Value = Bon / Total


End Sub
 

Lone-wolf

XLDnaute Barbatruc
Bonjour yatiz et bienvenue sur XLD :)

Pour n'avoir que les lignes filtrées, il faut écrire comme ceci

.Cells.SpecialCells(xlCellTypeVisible)

Et pour avoir le total des lignes filtrées, à adapter

Dim derlig As Long
derlig = Range("i" & Rows.Count).End(xlUp).Row
Range("F7") = WorksheetFunction.Subtotal(9, Range("i2:i" & derlig)
 
Dernière édition:

Lone-wolf

XLDnaute Barbatruc
Re

Tu parle d'une 10aine de colonnes, mais je vois >Cells(2, 16); en plus, il n'y a pas besoin de boucles. Un exemple à adapter

Dim derlig As Long, plage As Range
derlig = Range("a" & Rows.Count).End(xlUp).Row

Set plage = .Range("a1:r" & derlig)

plage.Autofilter Field:= Le n° de la colonne, Criteria1:= ton 1er critère, Operator:=xlAnd, _
Criteria2:= ton 2ème critère
 
Dernière édition:

yatiz

XLDnaute Nouveau
Re,

Je me suis complètement perdu:(:(:(
Avec mon cas dans ma boucle, comment je peux juste introduire SpecialCells ? je veux continuer sur ma lancé avec ma boucle si possible.
Pour ce qui est de la 16eme colonne que tu vois, c'est pour y inscrire le résultat.
 

yatiz

XLDnaute Nouveau
j'ai bien essayé avec :


Dim derlig As Long, plage As Range

derlig = Range("a" & Rows.Count).End(xlUp).Row

Set plage = .Range("a1:r" & derlig)


plage.AutoFilter 12, "< 100", xlAnd

End Sub


Mais je bloque vraiment. Mon fichier excel comporte 14 colonne filtrée, seul la 12eme m'intéresse (c'est celle ou les scores sont récoltés). Et je désire donc que le résultat soit affiché dans la première cellule de la 16eme colonne.
 

Lone-wolf

XLDnaute Barbatruc
Re

Il faut bien lire le message avant de faire quoi que ce soit. J'ai bien dit qu'il faut ADAPTER. Donc Au lieu de la colonne R, tu met le nom de la dernière colonne.

Pour la 2ème question: non. Juste Cells.SpecialCells(xlCellTypeVisible)

Plus est: si tu mettrais le fichier, ça serait beaucoup plus simple.
 

yatiz

XLDnaute Nouveau
Re

Je n'ai pas le droit de mettre le fichier sinon je vous l'aurez partagé depuis le début:(
Désolé de vous embêter d'avantage, mais malgré le fait que j'introduise :

Cells.SpecialCells (xlCellTypeVisible)

Le résultat ne change pas, excel prend en compte tout les lignes. (Je l'introduit juste après la boucle et avant)
 

Lone-wolf

XLDnaute Barbatruc
Re

À quoi servent compteur et Bon?? :rolleyes: Sinon voir module2. Clique sur le bouton filtrer pour voir le résultat. Clique sur Suppr. Filtre pour enlever le filtre.
 

Pièces jointes

  • Filtre Test.xlsm
    22.7 KB · Affichages: 28
Dernière édition:

Statistiques des forums

Discussions
312 198
Messages
2 086 107
Membres
103 120
dernier inscrit
83400ren