Fonction Application.CountIfs

Bonjour à tous,

J’espère que vous allez bien,

Dans mon premier fichier en pièce jointe nommée " Application.CountIfs", j'ai une feuille nommée "INDEX" qui possède un bouton nommé "Start". Ce bouton permet de lancer une macro qui compte tous les « enfants » dont l’âge varie entre « 1 et 4 ans ». Les données sont stockées sur la feuille LISTE PATIENTS

Le code ne passe pas et je soupçonne la ligne ci-dessous (voir code ci-dessous) :

Worksheets("LISTE PATIENTS").Range("e12:e100"), ">=" & startdate, "<=" & endDate)

J’ai tout tenté depuis ce matin et je n’ai toujours pas trouvé de solution. Pourriez-vous me dire ce qui ne va pas s’il vous plait ?

En vous remerciant de votre aide.

Dans l’attente vos retour,

Cordialement

Bonjour,

Pourquoi faire une macro pour cela ?

Une bête formule NB.SI.ENS en E7 vous donne le résultat attendu

=NB.SI.ENS('LISTE PATIENTS'!D2:D10;"=F";'LISTE PATIENTS'!G2:G10;"=Nouveaux cas consultés référés";'LISTE PATIENTS'!H2:H10;"=CAS CONSULTÉS";'LISTE PATIENTS'!E2:E10;">=01/01/2021";'LISTE PATIENTS'!E2:E10;"<=31/12/2025")

Pour les dates, mettez vos références de date en feuille Index en E4 et E5. Du coup la formule devient ceci

=NB.SI.ENS('LISTE PATIENTS'!D3:D11;"=F";'LISTE PATIENTS'!G3:G11;"=Nouveaux cas consultés référés";'LISTE PATIENTS'!H3:H11;"=CAS CONSULTÉS";'LISTE PATIENTS'!E3:E11;">="&E4;'LISTE PATIENTS'!E3:E11;"<="&E5)

Si vous passez votre tableau au format structuré ce sera encore plus facile

NB : J'éviterais de nommer une feuille Index car ce nom fait partie des fonctions natives d'excel

Crdlt

Bonjour Dan.
Merci pour ta réponse rapide.

L'utilisation des boutons, donc des macros est plus facile pour nous.
Voici pourquoi nous préférons cela.

Dans l'attente des réponse à ma préoccupation.

Merci encore à vous

re

L'utilisation des boutons, donc des macros est plus facile pour nous.

Je ne vois en quoi c'est plus facile. Avec le bouton vous vous obliger à faire une opération en plus.
La formule n'a pas besoin de bouton puisque Excel vous donne directement le résultat

...pourquoi faire compliqué quand vous avez plus simple et surtout que Microsoft propose aujourd'hui d'autres solutions pour supprimer le VBA

Crdlt

Dan,

Nous sommes habitués avec des macros, c'est notre choix, merci.

Dans l'attente des réponse à ma préoccupation.

Merci encore à vous

Vous devriez habituer vos utilisateurs à penser autrement que par VBA

Sinon essayez en mettant CDATE devant vos deux variables Enddate et Startdate

Pensez à cloturer le fil si vous en avez terminer

Crdlt

edit : non CDATE ne fonctionne pas il y a un autre souci

M. Dan,

Nous apprenons VBA afin de pouvoir développer de petites applications et d'automatiser certaines tâches.
Comprenez qu'ils n'est pas possible, pour nous, de revenir encore sur EXCEL.

Bref,

J'ai ajouté CDATE comme ceci et ça ne passe toujours pas :

Worksheets("LISTE PATIENTS").Range("e12:e100"), ">=" & CDate(startdate), "<=" & CDate(endDate))

En vous remerciant de votre aide.

Dans l’attente vos retour,

Cordialement

Re

Comprenez qu'ils n'est pas possible, pour nous, de revenir encore sur EXCEL.

Je n'ai pas trop compris. VBA est utilisé pour les applications Office et donc Excel
Mais bon avec le temps vous verrez qu'éviter VBA est aussi éviter pas mal de soucis notamment pour les mises à jour


Pour votre demande en VBA

En fait si vous regardez la formule que je vous ai données vous voyez directement l'erreur
- Votre code mentionne la première ligne en ligne 12. Là vous êtes en ligne 2
- vous devez répéter la plage pour chaque condition de date

C'est pour cette raison que je vous disais qu'il vaut mieux passer par les formules que par VBA quand cela est possible et pour des cas simples

Essayez en remplaçant tout votre code comme ceci

Option Compare Text
Sub Comparaison()
Dim startdate As Date, endDate As Date
startdate = "01/01/2021"
endDate = "31/12/2025"

'1-4 Ans - Femmes (+)
Sheets("INDEX").Range("e7") = Application.CountIfs(Worksheets("LISTE PATIENTS").Range("d2:d100"), "F", _
Worksheets("LISTE PATIENTS").Range("g2:g100"), "Nouveaux cas consultés référés", _
Worksheets("LISTE PATIENTS").Range("h2:h100"), "Cas consultés", _
Worksheets("LISTE PATIENTS").Range("e2:e100"), ">=" & CLng(startdate), _
Worksheets("LISTE PATIENTS").Range("e2:e100"), "<=" & CLng(endDate))
End Sub

De cette sorte vous avez toutes les solutions

Rem :
- Avec VBA évitez toujours les accents et espaces dans le nom des feuilles. Cela n'apporte que des soucis
- en E2 veillez à avoir le même format de date que les cellules suivantes --> 29-08-2022 (là vous avez 29/08/2022)

Attention que si vous passez vos tableau au format structuré, tous vos codes seront à changer

Si ok, pensez à cloturer le fil

Cordialement

Merci dan,

Je test et je vous reviens dans les plus bref délais

M. Dan c'est OK,

Merci encore.

Merci à vous tous

bonjour Past007, salut Dan,

une solution qui est la combinaisons des 2 opinions

Sub Comparaison_Formules()

     'vos 5 variables
     Dim StartDate As String: StartDate = Format(DateSerial(Year(Date) - 4, 1, 1), "dd/mm/yyyy")     'le premier janvier de 4 années passées
     Dim EndDate As String: EndDate = Format(DateSerial(Year(Date), 12, 31), "dd/mm/yyyy")     'le 31 décembre de cette année
     Dim MonSexe As String: MonSexe = "F"
     Dim MonChoix As String: MonChoix = "Nouveaux cas consultés référés"
     Dim MonPathologie: MonPathologie = "Cas consultés"

     'vos 4 plages nommées
     With Worksheets("LISTE PATIENTS").Range("C2:C100")
          .Name = "Nom"
          .Offset(, 1).Name = "Sexe"
          .Offset(, 2).Name = "Naissance"
          .Offset(, 4).Name = "Choix"
          .Offset(, 5).Name = "Pathologie"
     End With

     '1-4 Ans - Femmes (+)
     s = Replace(Replace(Replace(Replace(Replace("=CountIfs(sexe, #1,Choix, #2,pathologie, #3,Naissance,"">=@1"" ,Naissance,""<=@2"")", "@1", StartDate), "@2", EndDate), "#1", Chr(34) & MonSexe & Chr(34)), "#2", Chr(34) & MonChoix & Chr(34)), "#3", Chr(34) & MonPathologie & Chr(34))
     Sheets("INDEX").Range("e7").FormulaR1C1 = s
End Sub

Bonjour à tous,

Bonjour BsAlv, comme d'haabitude, ton codage c'est du très haut niveau.

Merci encore,

Merci à tous.

Rechercher des sujets similaires à "fonction application countifs"