XL 2013 Fonction somme selon condition

louloubru

XLDnaute Junior
Bonjour,

j'ai un fichier contenant des contacts dans plusieurs feuilles. Ces contacts ont participé à des évènements et sont classés par catégorie.
Je cherche à faire la somme des contacts d'une certaine catégorie ayant participé à un évènement.
J'avais l'impression que ma fonction fonctionnait, mais le résultat n'est pas toujours juste ... Parfois oui parfois non ! selon les combinaisons catégories/ évènement !

j'ai un problème avec l'identification de la dernière ligne : je me suis rendue compte en testant que la variable NbrLig était (parfois !) fausse ... je n'ai trouvé aucune autre solution.

VB:
'Fonction qui fait la somme des participants à un évènement pour une catégorie donnée (chercheur, enseignant etc.)

Function SommeParticipantscat(Evenement, cat)
    'Création des variables
    Dim somme As Long
    Dim i As Integer
    Dim j As Integer
    Dim col As Long
    Dim categ As Long
    Dim NbrLig As Long
    somme = 0
    col = Sheets("ONF_COFOR").Cells.Find(Evenement, , xlValues).Column 'je récupère le numéro des colonnes dans une des feuilles : elles sont toutes agencées pareil. Ca ça fonctionne.
    categ = Sheets("ONF_COFOR").Cells.Find("Catégorie", , xlValues).Column
    InitialiseNoms_feuilles 'lance la macro qui rempli le vecteur Noms_feuilles avec les noms de feuilles
    'Boucle pour faire la somme sur toutes les feuilles
    For i = LBound(Noms_feuilles) To UBound(Noms_feuilles)
    With Sheets(Noms_feuilles(i))
    NbrLig = .Cells(65536, col).End(xlUp).Row
        For j = 2 To NbrLig
        If .Cells(j, col).Value = 1 And .Cells(j, categ).Value = cat Then somme = somme + 1
        Next j
    End With
    Next i
    
    SommeParticipantscat = somme
    
End Function

Je joins un fichier exemple de ma situation. Evènement correspond à ev 1 , ev 2 ... et "cat" : les catégories, à poisson, citrouille ...

Je fais déjà la somme des participants à un évènement pour toutes les feuilles de cette manière :

Code:
Function SommeParticipants(Evenement)
    'Création des variables
    Dim somme As Long
    Dim i As Integer
    somme = 0
    InitialiseNoms_feuilles 'lance la macro qui rempli le vecteur Noms_feuilles avec les noms de feuilles
    'Boucle pour faire la somme sur toutes les feuilles
    For i = LBound(Noms_feuilles) To UBound(Noms_feuilles)
    somme = somme + Application.Sum(Sheets(Noms_feuilles(i)).Range(RefCell(Evenement)).EntireColumn)
    Next i
    
    SommeParticipants = somme
    
End Function

Là je cherche à faire la même chose mais par catégorie.

En vous remerciant !
 

Pièces jointes

  • Exemple fichier forum.xlsx
    8.8 KB · Affichages: 10

louloubru

XLDnaute Junior
Bonjour,

Quel fichier fantastique

Je ne comprends pas pourquoi vouloir faire ça en VBA, alors qu'Excel sait si bien le faire sans...
Bonjour,

quand les données sont sur une seule feuille oui, mais excel sait le faire quand elles sont sur plusieurs feuilles ? Si oui je suis preneuse !
Je ne veux pas devoir faire du copier coller de feuille à chaque fois : mon truc n'est plus à jour dès qu'on change un contact ...

Merci,

Louise
 

louloubru

XLDnaute Junior
Bonjour,

quand les données sont sur une seule feuille oui, mais excel sait le faire quand elles sont sur plusieurs feuilles ? Si oui je suis preneuse !
Je ne veux pas devoir faire du copier coller de feuille à chaque fois : mon truc n'est plus à jour dès qu'on change un contact ...

Merci,

Louise
Et les colonnes peuvent bouger : on peut en rajouter, en supprimer ... J'ai donc besoin d'aller chercher la colonne dont le nom est "Evenement". je ne vois pas comment faire ça sans VBA. Aller chercher la colonne de ce nom et faire la somme pour une catégorie donnée pour un évènement ...

Mais si vous savez ...
 

louloubru

XLDnaute Junior
Bonjour,
j'ai trouvé mon erreur : évidemment je ne retrouvais pas mon compte puisque des erreurs s'éraient glissées dans mes catégories ...
C'est propre à mes données, la fonction marche très bien en remplaçant l'instruction pour trouver la dernière ligne par 5000 par exemple. Cela ralenti le calcul, mais au moins c'est juste !
Si vous avez une solution pour trouver cette dernière ligne, je suis preneuse ! Mais peut-être cela dverait-il faire l'objet d'une autre discussion ...
 

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo