Compter nombre de lignes selon un critère

Résolu/Fermé
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016 - Modifié par pijaku le 21/07/2014 à 16:42
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016 - 23 juil. 2014 à 09:58
Bonjour,

Je suis déjà venu pour demander de l'aide pour compter des lignes, mais là c'est différent, j'essaye de compter en fonction du critère dans la colonne. Je m'explique: j'ai une grosse base de données avec plus de 10 000 lignes allant jusqu'au colonnes CX. Mon but est de réaliser des indicateurs, pour cela, en général, une certaine colonne va être le jalon me permettant de définir mon indicateur, (exemple: le statut en "terminé", "lancé", "non lancé"), cependant, je fais déjà un premier tri en VBA, je copie colle les colonnes que je désire voir (environ 10) dans une nouvelle feuille qui sera une nouvelle BDD. Et c'est sur cette BDD que je veux effectuer mes traitements, toujours sur l'exemple des statuts, je veux être capable de compter le nombre de lignes qu'il y a avec le statut "lancé", celles avec le statut "non lancé" et le statut "terminé", et que ça me renvoit la valeur dans une cellule. Là où je bloque sur le code, c'est pour qu'il me calcule le nombre de lignes, je vous donne ce que j'ai pu effectuer.


Dim lg as Integer
Dim dernligne as Integer
Dim n as Integer
Dim NbLig As Integer

       'variable de ligne pour synthèse
       lg = 1
        'recherche dernière ligne remplie dans Base
       dernligne = Sheets("Nouvelle BDD").Range("A" & Rows.Count).End(xlUp).Row
        ' boucle sur les lignes d'Application
       For n = 1 To dernligne
        'si statut correpond à celui déterminé au clic dans bouton option
       If Sheets("Nouvelle BDD").Range("D" & n).Value = "Lancé" Then
            'incrementation de la ligne dans synthèse
        lg = lg + 1
       NbLig = Sheets("Nouvelle BDD").Range("D1", [D1].End(xlDown)).Rows.Count
    
    'Copie dans l'indicateur
    Sheets("Indicateur OF").Select
    Range("D6").Select
    Selection.Value = NbLig4 - 1  'Car je ne désire pas la première valeur puisque c'est l'entête
    Selection.Copy
    'Mise à jour dans bilan
    Sheets("Bilan des indicateurs").Select
    Range("D24").Select
    ActiveSheet.Paste


           End If

       Next n


J'ai beau avoir cherché, j'ai essayé de tordre, modifier mon code avec des solutions existantes, ça ne collait pas du tout avec ce que je désirais. Déjà ce code, ne veut même pas prendre en compte ma condition et me comptait le nombre de lignes avec le statut "Lancé", en revanche il me compte toutes les lignes confondues.


Donc je sais que ça pêche à ce niveau, mais je vois pas comment faire, si déjà je m'y suis bien pris, et si oui comment faire pour arriver à la solution que je recherche.


En vous remerciant d'avance pour prendre le temps de lire mon pavé!

Cordialement,
A voir également:

2 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 21/07/2014 à 17:31
Bonjour,

comme tu sembles travaillé que sur la colonne "D" nommée statut, tu aurais attaqué directement sur la BDD originale a moins que tu ais besoin de la nouvelle pour autre chose

Proposition non testée (je n'ai pas ton classeur)
Option Explicit
'----------
Sub compter_statuts()
Dim derligne As Integer, T_statut
Dim cptr As Byte, Statut As String
Dim Idx As Integer, Nbre As Integer

Application.ScreenUpdating = False
Dernligne = Sheets("Nouvelle BDD").Range("A" & Rows.Count).End(xlUp).Row
T_statut = Application.Transpose(Range("D2:D" & derlig))
For cptr = 1 To 3
Statut = Choose(cptr, "terminé", "Lancé", "non lancé")
For Idx = 1 To UBound(T_statut)
If T_statut(Idx) = Statut Then nbre = nbre + 1
Next
With Sheets("Indicateur OF")
.Cells(5+cptr,"C")=statut
.Cells(5 + cptr, "D") = nbre
nbre = 0
End With
Next
End Sub


Si problèm dans mon bidouillage

mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse



Michel
0
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016
22 juil. 2014 à 09:18
Bonjour Michel!

Merci d'avoir réagit une fois de plus pour mon cas, mais du coup, j'ai préféré envoyé mon fichier très très simplifié, car il est plus facile de se concentrer sur ce que je désire faire sur le comptage du nombre de lignes, donc tout est expliqué en commentaire texte. Et j'effectue le comptage avec un bouton commande en première feuille "Choix des indicateurs".

Ci-joint

https://www.cjoint.com/?DGwjsgDWfc0

Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 22/07/2014 à 11:09
Bonjour,

Suis absent cet après-midi : je regarderai peut-être en fin d'après-midi ou demain...

edit 11:10h
viote fait sans VBA
en D10
=NB.SI('BDD OF'!$D:$D;"terminé")

?
0
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016
22 juil. 2014 à 14:25
Ca ne marche pas pour le statut "Lancé", et je vois pas pourquoi ça ne marcherait pas :/
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
22 juil. 2014 à 23:22
dans la feuille BDD_OF "lancé a un espace parasite à la fin soit 6 caractères au lieu de 5

en D6
=NB.SI('BDD OF'!$D:$D;B5)
à copier coller en D10,D14,D18
0
Akalia Messages postés 34 Date d'inscription mercredi 25 juin 2014 Statut Membre Dernière intervention 17 août 2016
23 juil. 2014 à 08:59
En effet, ça marche mieux sans l'espace parasite. Je pense prendre cette solution vu que je travaille en délai très court, mais je vais quand même essayer de trouver comment obtenir la valeur via VBA et non par une formule, car admettons que la bdd change, la formule peut peut être poser problème, et puis j'aime essayer de coder donc je vais chercher!

Merci encore Michel!
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
23 juil. 2014 à 09:18
tant que la recherche se fait sur la colonne D, la formule reste valable
quant au code tu as juste à modifier la fin du mien....

style
.Cells(6 + (cptr-1)*4), "D") = nbre
0