fonction countif en VBA pour une liste de données

Syntholl

XLDnaute Nouveau
Bonjour à tous,

Je cherche a faire dans une macro VBA l'équivalent de la fonction NB.SI dans une boucle Pour.

Le contexte:
Dans la feuille A, j'ai la liste de biens industriels.
Dans la feuille B, j'ai la liste des dépannages ayant eu lieu sur ces biens.

Ce que je recherche est la chose suivante: rajouter en fin de tableau (feuille UI) un colonne avec le nombre de dépannages faits (issus de la feuille BT) par bien.

Avec une fonction NB.SI sous Excel, ça marche très bien, mais ce que je désire faire c'est automatisé ce calcul afin de tenir compte du nombre aléatoire de lignes dans les 2 feuilles. (fichier Ex joint)

Je sais que la fonction COUNTIF permet de faire cela en VBA mais je me retrouve bloqué car comment faire pour que la copie se fasse sur l'ensemble des données de la feuille UI (à terme c'est plus de 12000 lignes qui devront être gérées dans la feuille UI).

Question subsidiaire: comment faire pour rajouter une seconde condition d'analyse?

Je suis arrivé à écrire le début:
Range("M1").ActiveCell = "Nb de BTs"
NbBT = Sheets("BASE_Macro").Range("B3").Value

Sheets("BT").Columns("K:K").Select
Selection.Cut
Columns("A:A").Select
Selection.Insert Shift:=xlToRight


Sheets("UI").Select
Range("M2").Select
For i = 2 To NbBT
Application.WorksheetFunction.CountIf(Sheets("BT").Columns("A:A"), Sheets("UI").Cells(i, 1)).Value = Cells(i, 11)
Next​


C'est ma boucle FOR qui je pense ne fonctionne pas. Merci de votre aide.
 

Pièces jointes

  • Ex.xlsx
    21.5 KB · Affichages: 44
  • Ex.xlsx
    21.5 KB · Affichages: 47
  • Ex.xlsx
    21.5 KB · Affichages: 52

Syntholl

XLDnaute Nouveau
Re : fonction countif en VBA pour une liste de données

Bonjour Stefan373,

En effet, j'ai fait une petite erreur dans le fichier.

La feuille BASE_Macro ne sert qu'à quantifier les différents éléments que nous serions amenés à utiliser (des listes de références, des quantités dans les listes, le compte de ligne dans les différentes feuilles, etc...)

Ici le Sheets("BASE_Macro").Range("B3").Value doit renvoyer le nombre de ligne non vide dans le la feuille "BT", soit la valeur 90.

Donc comment faire?
 

Discussions similaires

Statistiques des forums

Discussions
312 184
Messages
2 086 006
Membres
103 088
dernier inscrit
Psodam