Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour
Voudrais compter le nombre de ligne dans une plage donnée avec "Count if"
Et le critère est de récupérer l'année choisie par ma variable "Annee" et la je bloc je n'arrive a ce que l'année soit choisie.
Je voudrais ensuite continuer avec les mois
D'avance merci
VB:
Private Sub CommandButton172_Click()
Dim NbreLigne As Integer, Jo, Ja, Jm As Integer
Dim myRange1 As Range, myRange2 As Range
Dim Annee, DernLig, PremLig, mois
PremLig = Feuil10.[a1].End(xlDown).Row + 2
DernLig = Feuil10.[a65000].End(3).Row + 1
Annee = Year(Date)
mois = 1
Jo = 6 'Colonne Origine intervention (OA / OE / OR)
With Feuil10
Set myRange1 = .Range(.Cells(PremLig, Jo), .Cells(DernLig, Jo))
Ja = 5 ' Colonne des Dates
Set myRange2 = .Range(.Cells(PremLig, Ja), .Cells(DernLig, Ja))
For mois = 1 To 12
NbreLigne = Application.WorksheetFunction.CountIfs(myRange1, "OE", myRange2, Year(Date), myRange2, Month(mois))
MsgBox NbreLigne
Next
End With
'MsgBox NbreLigne
End Sub
Pour moi, tu compares des choux et des carottes donc ça ne va pas !
La plage myRange2, c'est des données de type Date donc si la plage est de type Date il faut utiliser comme critère une donnée de type Date !
Le critère Year(Date) n'est pas de type Date mais de type Numérique/Nombre !
C'est pareil pour les mois, par exemple on pourrait penser modifier
pour avoir les bon types et bonne valeurs mais ça NE FONCTIONNE PAS (il attend une plage et non un tableau de valeurs) !
Soit faire un encadrement entre le 1er et dernier jour du mois ou faire une fonction dédiée
VB:
Sub test()
Debug.Print CompterMoisDansPlage(Range("A1:A6"), Month(Date))
End Sub
Function CompterMoisDansPlage(MaPlage As Variant, intMois As Integer) As Long
Dim vDates As Variant
Dim i As Long
Dim LgCpt As Long
vDates = MaPlage.Value ' Charger la plage dans un tableau
LgCpt = 0
For i = 1 To UBound(vDates, 1)
If IsDate(vDates(i, 1)) Then ' Vérifie que la cellule contient une vraie date
If Month(vDates(i, 1)) = intMois Then LgCpt = LgCpt + 1
End If
Next
CompterMoisDansPlage = LgCpt
End Function
Pour moi, tu compares des choux et des carottes donc ça ne va pas !
La plage myRange2, c'est des données de type Date donc si la plage est de type Date il faut utiliser comme critère une donnée de type Date !
Le critère Year(Date) n'est pas de type Date mais de type Numérique/Nombre !
C'est pareil pour les mois, par exemple on pourrait penser modifier
pour avoir les bon types et bonne valeurs mais ça NE FONCTIONNE PAS (il attend une plage et non un tableau de valeurs) !
Soit faire un encadrement entre le 1er et dernier jour du mois ou faire une fonction dédiée
VB:
Sub test()
Debug.Print CompterMoisDansPlage(Range("A1:A6"), Month(Date))
End Sub
Function CompterMoisDansPlage(MaPlage As Variant, intMois As Integer) As Long
Dim vDates As Variant
Dim i As Long
Dim LgCpt As Long
vDates = MaPlage.Value ' Charger la plage dans un tableau
LgCpt = 0
For i = 1 To UBound(vDates, 1)
If IsDate(vDates(i, 1)) Then ' Vérifie que la cellule contient une vraie date
If Month(vDates(i, 1)) = intMois Then LgCpt = LgCpt + 1
End If
Next
CompterMoisDansPlage = LgCpt
End Function
Bonjour
J'ai intégrer votre code Hecatonchire
J'ai un tableau qui se balade de 2012 → aujourd'hui ayant presque 4000 lignes, le code que vous m'avez envoyé me renvoyait toutes les fiches 2012 à 2025 enregistrées en novembre j'ai donc pris en compte les années sous la variable "An"
avec la boucle ci dessous cela me sortait le bon nombre d'intervention par année au mois de novembre.
mais je n'arrive pas à mettre une variable "Mois" sur les mois de 1 →12 pour faire une boucle for sans que cela ne plante!
Auriez vous une solution?
VB:
Sub test()
Dim An
For An = 2012 To 2025 'Debug.Print CompterMoisDansPlage(Range("E9:E3784"), Month(Date))
MsgBox CompterMoisDansPlage(Range("E9:E3784"), An, Month(Date))
Next
End Sub
Function CompterMoisDansPlage(MaPlage As Variant, intAn, intMois As Integer) As Long
Dim vDates As Variant
Dim i As Long
Dim LgCpt As Long
vDates = MaPlage.Value ' Charger la plage dans un tableau
LgCpt = 0
For i = 1 To UBound(vDates, 1)
If IsDate(vDates(i, 1)) Then ' Vérifie que la cellule contient une vraie date
'If Year(vDates(i, 1)) = Year(Date) Then
If Year(vDates(i, 1)) = intAn Then
If Month(vDates(i, 1)) = intMois Then LgCpt = LgCpt + 1
End If
End If
Next
CompterMoisDansPlage = LgCpt
End Function
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD