Countif avec des chiffres
Rebonjour,
C'est encore moi
Plus sérieusement, je cherche à mettre en vba un somme si ens qui doit compter des chiffres au lieu de compter des lignes,
ce qui est plus difficile.
Il faut aller voir en onglet recap, en D2 par exemple.
La formule excel est
'=SOMME.SI.ENS(BD!$F:$F;BD!$B:$B;recap!D$1;BD!$G:$G;recap!$B2)ws4.Cells(i, j).Value =Et l'enregistrement de macro donne
'ActiveCell.FormulaR1C1 = "=SUMIFS(BD!C6,BD!C2,recap!R1C,BD!C7,recap!RC2)"Mes essais en module1 ne donnent rien ' MsgBox WorksheetFunction.CountIf(ws2.Cells(2, 7).Resize(6, 1), ws4.Cells(2, 2).Value) 'donne 6
MsgBox WorksheetFunction.CountIf(ws2.Cells(2, 6).Resize(6, 1), ws4.Cells(1, 4).Value) donne '0Merci de votre aide
Bonjour
Tout d'abord, vous utilisez un tableau structuré (Absences) ,; donc votre formule en "recap" devrai s'écrire comme ceci:
=SOMME.SI.ENS(Absences[[Duree]:[Duree]];Absences[[Nom]:[Nom]];D$1;Absences[[Type]:[Type]];$B2)et pour la glisser dans votre code:
MsgBox Application.WorksheetFunction.SumIfs(ws2.ListObjects("Absences").ListColumns("Duree").DataBodyRange, _
ws2.ListObjects("Absences").ListColumns("Nom").DataBodyRange, _
ws4.Range("D$1").Value, _
ws2.ListObjects("Absences").ListColumns("Type").DataBodyRange, _
ws4.Range("$B2").Value)Bien sûr, j'ai mis des adresses figées en D$1 et $B2 pour les essais, mais suivant ce que vous voulez faire, il faudra remplacer D pour la première et 2 pour la seconde par cells(ligne, colonne)
Cdlt
PS: j'ai oublié de préciser, c'est une somme qu'il faut faire, pas un comptage.
Bonjour
Pour l'instant j'ai laissé la formule corrigée mais si tu lances la macro test tu auras le même résultat par VBA...
J'ai ajouté les Ph. car tu as des noms identique..
A+ François
Bonjour,
Merci pour vos réponses.
@Arturo
Cà répond bien à ma demande, et sur quelques cellules çà me donne :
For i = 2 To 4
For j = 4 To 5
ws4.Cells(i, j).Value = Application.WorksheetFunction.SumIfs(ws2.ListObjects("Absences").ListColumns("Duree").DataBodyRange, _
ws2.ListObjects("Absences").ListColumns("Nom").DataBodyRange, _
ws4.Cells(1, j).Value, _
ws2.ListObjects("Absences").ListColumns("Type").DataBodyRange, _
ws4.Cells(i, 2).Value)
Next j
Next i@Fanfan
Tu t'es occupé de la zone par mois, Je ne pense pas mettre les formules en vba, mais çà pourrait venir.
J'ai ajouté les Ph. car tu as des noms identique..
Effectivement, çà ne gère pas les noms identiques avec un nom, mais çà me parait difficile. Il vaut mieux se débrouiller à changer le nom par nom1 et nom2.
Ton code
Sub test1()
Dim i%, j%, c%, d%
For i = 16 To 26
For j = 3 To 14
Cells(i, j).Value = Application.WorksheetFunction.SumIfs([Absences[duree]], [Absences[Type]], Range("B" & i), [Absences[Mois]], Cells(15, j))
Next
Next
End SubQuels "ph." Si c'est les références des photos c'est dans le tableau des droits. Et les somme.si mensuels gérent pas les noms
Mais le code est bon.
Merci à vous 2.
Bonjour,
@Arturo
Cà répond bien à ma demande, et sur quelques cellules çà me donne :
For i = 2 To 4 For j = 4 To 5 ws4.Cells(i, j).Value = Application.WorksheetFunction.SumIfs(ws2.ListObjects("Absences").ListColumns("Duree").DataBodyRange, _ ws2.ListObjects("Absences").ListColumns("Nom").DataBodyRange, _ ws4.Cells(1, j).Value, _ ws2.ListObjects("Absences").ListColumns("Type").DataBodyRange, _ ws4.Cells(i, 2).Value) Next j Next i
Apparemment ça fonctionne plutôt bien , qu'est-ce qui n'est pas bon?
Non, désolé c'est tout bon, c'est moi qui n'est pas voulut mettre le code en entier.