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 '0

Merci de votre aide

9forum.xlsm (84.04 Ko)

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..

7forum-1.xlsm (63.68 Ko)

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 Sub

Quels "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

image

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.

Rechercher des sujets similaires à "countif chiffres"