CountIfs(PlageLieu, Lieu, PlageAnnee, annee, Plagemois, Mois)

pmfontaine

XLDnaute Occasionnel
Bonjour,
Je dois compter en Vba le nombre d'éléments correspondant a un lieu, une année et a un mois (Et d'autres éléments sans intérêt pour ma question)

Comme vous pouvez le voir sur le fichier joint avec la macro CompteV1 ça marche très bien en rajoutant deux colonnes (Mois et Années)

Mais je pense qu'il doit être possible de faire la même chose sans être obligé de rajouter les deux colonnes "mois " et "année"
Mais je n'ai pas trouver la solution
Merci d'avance pour votre aide
Patrick
 

Pièces jointes

  • Test_Countifs.xlsm
    95.8 KB · Affichages: 37

JHA

XLDnaute Barbatruc
Bonjour à tous,

En VBA, je ne sais pas mais par formule se serait:
Code:
=NB(SI((TabObs[Lieu]=$F$2)*(MOIS(TabObs[Date])=$G$2)*(ANNEE(TabObs[Date])=$H$2);TabObs[Date]))

JHA
 

Pièces jointes

  • Test_Countifs.xlsm
    92 KB · Affichages: 33

pmfontaine

XLDnaute Occasionnel
Bonjour

Merci JHA pour ta réponse, ce n'ai pas mon besoin actuel, mais ça peut servir et ça m'a donné une piste en Vba. Je pense que c'est possible avec une boucle qui vérifie les conditions est qui incrémente de 1 si la condition est remplie, mais mon fichier comporte 9 000 lignes et je pense que ce temps de traitement vas être très (trop) long.

Je suis persuadé qu'il y a une solution avec les données en tableau, mais mes compétences ne sont pas suffisantes.

En attendant d'autres propositions, je vais quand même continuer a chercher.

Patrick
 
Dernière édition:

pmfontaine

XLDnaute Occasionnel
Bonjour,
Je suis arriver à une solution qui marche est qui est rapide a priorie
Pour ceux que ça intéresse voila le code :
VB:
Sub TransfereTableau()
Dim MesDonnees() As Variant
Dim FinLig As Integer
Dim Lig As Integer
Dim Col As Integer
Dim Lieu As String
Dim Mois As Integer
Dim annee As Integer
Dim nombre As Integer

Lieu = Cells(2, 6)
Mois = Cells(2, 7)
annee = Cells(2, 8)
Sheets("BD").Select
FinLig = Range("A1").End(xlDown).Row
ReDim MesDonnees(FinLig - 2, 1)
For Col = 1 To 2
For Lig = 2 To FinLig
MesDonnees(Lig - 2, Col - 1) = Cells(Lig, Col)
If MesDonnees(Lig - 2, 0) = Lieu And Month(MesDonnees(Lig - 2, 1)) = Mois And Year(MesDonnees(Lig - 2, 1)) = annee Then
nombre = nombre + 1
Else
End If
Next Lig
Next Col
Cells(3, 10) = nombre
End Sub
End Sub
Je confirme que c'est la proposition de JHA qui m'a mis sur la piste.
Maintenant s'il y a moyen d'optimiser le code je suis preneur.
Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 840
Messages
2 092 701
Membres
105 513
dernier inscrit
simo200100