CountIfs

bonjour,

J'ai un problème avec le code ci-dessous il fonctionne quand j'utilise une variable avec CountIfs mais lorsque que je veux ajouter une deuxième variables ici plage2 ="BSMR" la macro plante, j'ai voulu donc faire avec Sumproduct mais idem impossible.

Je dois avoir une erreur dans mon écriture pouvez m'aidée merci.

Sub comptage()

Dim TotalAbsents As Integer

Dim colSem As Integer

Dim colSem2 As Integer

Dim Ligne As Integer

Dim Actions_Absence As String

Dim code As String

Dim Plage As Range

Dim Plage2 As Range

Range("J7").Select

Ligne = 3

colSem = ActiveCell.Column

col2Sem = ActiveCell.Column + 7

code = Sheets("Code absence").Cells(Ligne, 1).Value

Set Plage = Range(Columns(colSem), Columns(col2Sem))

Set Plage2 = Range("E:E")

Do While code <> ""

Actions_Absence = Sheets("Code absence").Cells(Ligne, 3).Value

code = Sheets("Code absence").Cells(Ligne, 1).Value

PSB = Application.WorksheetFunction.CountIfs(Plage, code, Plage2, "=BSMR")

PSB = Application.WorksheetFunction.SumProduct((Plage2 = "BSMR") * (Plage = " & code & "))

If Actions_Absence = "Absent" And PSB > 0 Then

TotalAbsents = TotalAbsents + PSB

Ligne = Ligne + 1

Else

Ligne = Ligne + 1

End If

Loop

'

End Sub

Bonjour et bienvenu(e)

Extrait de l'aide de NB.SI.ENS()

Important Chaque plage supplémentaire doit avoir le même nombre de lignes et de colonnes en tant qu’argument plage_critères1 . Les plages ne doivent pas nécessairement être adjacentes.

bonjour,

cela veux dire quoi que je ne peux pas avoir un critère qui compte le nombre sur plusieurs colonnes et le deuxième critère sur une colonne ??

je comprend pas bien car si j’utilise la fonction dans une formule sans VBA ca fonctionne très bien.

je connaissais le principe pour les lignes mais pas pour les colonnes.

je vais faire des testes

re,

j'ai testé même problème

"erreur d’exécution 13"

merci d'avance de votre aide j'en ai vraiment besoin

Bonjour

Fournis ton fichier anonymisé si besoin

voila

merci

25essai1.xlsm (19.93 Ko)

Bonjour

Cela devient compliqué

D'après la recherche faite SumProduct avec des plages définies dans le code pas glop glop

Une solution

psb = Evaluate("SumProduct((" & Plage2.Address & " = ""BSMR"") * (" & Plage.Address & " = """ & code & """))")

ce qui te donne comme chaine (formule) à évaluer

SumProduct(($E:$E = "BSMR") * ($J:$Q = "F"))

bonjour,

ça marche effectivement merci pour votre aide.

le hic s'est beaucoup trop lourd le temps exécutions de ma macro est passée à 47s je dois intégrée cette boucle dans une autres qui dois exécutée 53 fois donc une exécutions de 41mn je ne peux pas infligée ça mes collègues.

j'ai eu le même problème en ne passant pas par VBA mais utilisant uniquement des formules c'est pourquoi j'ai voulu passé en vba

je suis donc un peux déçus y à t'il une moyen d’alléger le processus et pourquoi s'est ci lourd ??

la questions qui me reste peux ton le faire avec Countif

merci encore pour votre aide

Bonsoir

Si tu prends un peu de temps à expliquer ce que tu cherches à faire

Si tu fournis ton fichier avec les formules pour comprendre

Avec de la chance une solution pourrait t'être proposée

Juste sur la base de ta macro, je l'ai modifiée pour une autre approche, à toi de dire si c'est ça et si un gain de temps

Option Explicit

Sub Comptage()
Dim TotalAbsents As Integer
Dim Plage As String
Dim Plage2 As String
Dim Derlig As Long, J As Long, Psb As Long

  Derlig = Range("E" & Rows.Count).End(xlUp).Row
  Plage = Range("H7:N" & Derlig).Address
  Plage2 = Range("E7:E" & Derlig).Address

  With Sheets("Code absence")
    For J = 3 To .Range("A" & Rows.Count).End(xlUp).Row
      Psb = Evaluate("SumProduct((" & Plage2 & " = ""BSMR"") * (" & Plage & " = """ & .Range("A" & J) & """))")
      If .Range("C" & J) = "Absent" And Psb > 0 Then
        TotalAbsents = TotalAbsents + Psb
      End If
    Next J
  End With
End Sub

Projets:

Un calendrier des absences du personnels entreprise:

5 critères à géré

les Absences (définis par l'utilisateur par des codes absences) onglet code absence

Les déplacements de département (définis par des codes déplacement) onglet code absence

les départements ( définis par des groupes appeler Pool) onglet Pool

les semaines

l'entreprise colonne E Calendrier des absences

conditions

1) si la personne est absente la déduire Du Pool de son affectations (par semaine et Par entreprise)

2) si la personne est déplacer du Pool la déduire Du Pool se son affectations et l'additionner au Pool Affecté (par semaine et Par entreprise)

Exemple: Si la personnes est affectée au Pool Annexe (PA) et que nous Voulons l'affectée au pool Schumag (PS) alors une personne sera déduite Du Pool Annexe et une sera additionnée au pool schumag.

je dois donc testé.

a quelle Pool la personne est affectée

si s'est un code absent

si s'est un code déplacement

si s'est un code déplacement a quel Pool il appartiens

1: je dois additionnée les codes absents et les codes déplacements et les soustraire au total du personnels par pool.

2:je dois additionné au total restent les personnes déplacée au pool correspondant.

qui me donne comme résulta dans l'onglet Pool le nombre de personnes disponible par semaine,Pool,Et Entreprise

j'espère d’être explicite merci encore

19essai1.xlsm (23.59 Ko)

Bonjour

Tu as dit

RYJITS a écrit :

j'ai eu le même problème en ne passant pas par VBA mais utilisant uniquement des formules

ce à quoi je t'ai dit
Banzai64 a écrit :

Si tu fournis ton fichier avec les formules pour comprendre

Comme tu ne veux/peux pas je ne sais pas quoi faire

Comment veux tu que je trouve une solution plus rapide si je ne sais pas ce qu'il faut faire

As tu essayé la dernière macro fournie ?

Il y a t'il un gain de temps ?

Je ne suis pas formule donc je ne pourrai pas déduire les formules de tes explications

Donc si tu veux continuer tu fournis un fichier avec les formules (celles qui prennent du temps)

En face de la formule tu indiques ce qu'elle est sensée faire

Mais surement que quelqu'un d'autre à compris, moi je

je suis en teste avec ta propositions ca fonctionne beaucoup beaucoup mieux

j'avance et je te redis.

pour les formules je dois adaptée mon fichier il encore trop lourd.

merci

Rechercher des sujets similaires à "countifs"