VBA - Fonction Countifs - Plusieurs feuilles

Bonjour,

J'ai besoin de votre aide... je suis débutante en vba et aimerais créer une macro permettant de comptabiliser le nombres d'éléments situés dans plusieurs feuilles du fichier en fonction de critères précisés dans la feuille "table" sous forme de tableau (B2 à H22)

Je souhaiterais que cette macro puisse être copiée dans plusieurs fichiers, peu importe le nom et le nombre de feuilles.

Chaque feuille est construite de la même manière :

  • une plage de données à la ligne 16 de chaque feuille. Les critères applicables à cette plage se situe dans les cellule B2 à H2 de la feuille Table.
  • une plage de données à la ligne 6 de chaque feuille. Le critère se situe aux cellules A3 à A22 de la feuille Table.
  • une plage de données à la ligne 17 de chaque feuille. Il s'agit de comptabiliser les cellules non vides.

La macro suivante ne marche pas... un zéro apparaît dans chaque case du tableau.... Merci d'avance pour votre aide...

Sub Macro2()

Worksheets("Table").Activate

Dim Ws As Worksheet

Dim x As Integer, y As Integer

For Each Ws In Worksheets

For x = 3 To 22

For y = 2 To 7

Sheets("Table").Cells(x, y) = WorksheetFunction.CountIfs(Ws.Range("$A$16:$BB$16"), Sheets("Table").Range("B$2"), Ws.Range("$A$6:$BB$6"), Sheets("Table").Range("$A3"), Ws.Range("$A$17:$BB$17"), "=""")

Next y

Next x

Next Ws

End Sub

Bonsoir et bienvenu(e)

Petitelouchette a écrit :

une plage de données à la ligne 17 de chaque feuille. Il s'agit de comptabiliser les cellules non vides.

La dernière partie de la formule ne devrait pas être

 ......... , Ws.Range("$A$17:$BB$17"), "<>")

Si pas ça

Salut Petitelouchette et bienvenue sur le Forum,

Ce n'est pas évident de voir où tu veux en venir avec ta macro.

Peux-tu nous fournir un fichier exemple et éventuellement une ou deux explications de plus par rapport à celui-ci ?

Cordialement.

Bonjour et merci pour aide!!

Oui, en effet, je me suis trompée... <> au lieu de =.

Avec la formule rectifiée, j'ai l'impression que la formule parcourt toutes les feuilles mais ne retient le résultat que de la dernière feuille. Or, je soufaiterais comptabiliser le résultat de la fonction countifs appliquée à toutes les feuilles...

Merci d'avance!

34classeur1.xlsm (22.29 Ko)

Bonjour

Ne sachant pas quel résultat obtenir

A tester

Sub Macro2()
Dim Ws As Worksheet
Dim x As Integer, y As Integer

  Worksheets("Table").Activate

  For Each Ws In Worksheets
    For x = 3 To 22
      For y = 2 To 7
        Cells(x, y) = Cells(x, y) + WorksheetFunction.CountIfs(Ws.Range("$A$16:$BB$16"), Range("B$2"), Ws.Range("$A$6:$BB$6"), Range("$A3"), Ws.Range("$A$17:$BB$17"), "<>")
      Next y
    Next x
  Next Ws
End Sub

Merci... mais en fait je voudrais obtenir en B2 le résultat de la fonction suivante : nb.si.ens ('500'!$A$16:$BB1$6; "B$2"; 500'!$A$6:$BB$6; "$A3"; 500'!$A$17:$BB$17;"<>"") +nb.si.ens ('510'!$A$16:$BB1$6; "B$2"; 510'!$A$6:$BB$6; "$A3"; 510'!$A$17:$BB$17;"<>"") + nb.si.ens ('550'!$A$16:$BB1$6; "B$2"; 550'!$A$6:$BB$6; "$A3"; 550'!$A$17:$BB$17;"<>"")

et étendre cette formule à tout le tableau... la macro créée devrait pouvoir servir dans d'autres classeurs peu importe le nombre et le nom des feuilles. Par contre, la structure des feuilles est toujours la même...

Merci d'avance...

Bonjour

En indiquant la valeur que l'on doit trouver cela serait une bonne base pour rechercher une solution

En attendant teste cette macro

Sub Macro2()
Dim Ws As Worksheet
Dim x As Integer, y As Integer

  Worksheets("Table").Activate

  For Each Ws In Worksheets
    If Ws.Name <> ActiveSheet.Name Then
      For x = 3 To 22
        For y = 2 To 7
          Cells(x, y) = Cells(x, y) + WorksheetFunction.CountIfs(Ws.Range("$A$16:$BB$16"), Range("B$2"), Ws.Range("$A$6:$BB$6"), Range("$A3"), Ws.Range("$A$17:$BB$17"), "<>")
        Next y
      Next x
    End If
  Next Ws
End Sub

As-tu testé la macro précédente ? (elle donne le même résultat que celle-ci)

Merci.

Le fichier joint comporte en feuille "Table" les résultats en formule que je souhaiterais trouver en VBA.... mais je souhaiterais que les feuilles ne soient pas nommées... car elles varient d'un classeur à un autre...

Merci d'avance!!!!!

48classeur1.xlsm (25.02 Ko)

Bonjour

A vérifier

Sub Macro2()
Dim Ws As Worksheet
Dim x As Integer, y As Integer

  Worksheets("Table").Activate
  Range("B3:G22").ClearContents
  For Each Ws In Worksheets
    If Ws.Name <> ActiveSheet.Name Then
      For x = 3 To 22
        For y = 2 To 7
          Cells(x, y) = Cells(x, y) + WorksheetFunction.CountIfs(Ws.Range("$A$16:$BB$16"), Cells(2, y), Ws.Range("$A$6:$BB$6"), Range("A" & x), Ws.Range("$A$17:$BB$17"), "<>0")
        Next y
      Next x
    End If
  Next Ws
End Sub

Merci beaucoup pour votre aide... ça marche!

Rechercher des sujets similaires à "vba fonction countifs feuilles"