Compter les valeurs d'une colonne selon la selection multiple dans une listbox d

Résolu
wilpier Messages postés 3 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 17 mars 2008 - 17 mars 2008 à 20:18
wilpier Messages postés 3 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 17 mars 2008 - 17 mars 2008 à 23:00
Bonjour à tous,

je suis nouveau sur le forum et en programmation VBA.

Je suis en train de créer un fichier excel pour la gestion des membres
de mon association. Tout le traitement se fait avec des USF. Je
rencontre deux problèmes qui me bloquent dans mon avancée et je n'ai
pas trouvé la solution dans mes recherches sur le net ou le forum.


Ma BDD se trouve sur une feuille et indique : nom-prénom-...-services (en colonne E)

ma USF me permet de faire une multiselection par service pour traiter les informations.


1/Je souhaite afficher dans un label le nombre de services sélectionnés
et le nom de personnes concerné par ce ou ces services. Je bloque sur
ce bout de code:

Label2.Caption = "Il y a " & nbselect & " services sélectionnés
soit " & Application.CountIf(Sheets("BD COS 2007").Range("E" &
n), "??????") & " agents concernés"

Les ?????? étant ce que je n'arrive pas à définir.


2/ je souhaite copier dans une nouvelle feuille avec mise en forme les
informations que je sélectionne dans la listebox. Mon bout de code
fonctionne mais je n'affiche que les informations liées au dernier
service sélectionné dans la liste multiple.

En fait, traduit en français, je souhaite dire que si je sélectionne
tels ou tels services de la listbox, j'afficherai dans le label le
nombre de lignes renvoyant les valeurs sélectionnées. Cette information
s'affichera par le clic sur un bouton (qui pour info rempli en même
temps ma deuxième feuille).

Quelqu'un pourrait-il m'indiquer ce qui me manque pour réaliser ces 2 opérations?


D'avance merci pour votre aide.

4 réponses

wilpier Messages postés 3 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 17 mars 2008
17 mars 2008 à 23:00
merci pour ta réponse MPI, je vais essayer de cette façon.
3
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 mars 2008 à 22:06
Si tu sélectionnes plusieurs services, tu ne peux pas utiliser une formule du genre SOMME.SI ou NB.SI qui n'acceptent qu'un seul critère. Tu pourrais le faire, je pense, avec SOMMEPROD (SumProduct en anglais).

Mais pour ce faire, il faudra que tu transformes cette fonction selon le nombre "aléatoire" de critères, et que tu aies un champ qui contienne des 1 pour l'addition (pour SommeProd). Ou que tu utilises NB.SI plusieurs fois selon le nombre de sélections dans la liste.

Le mieux, je pense, c'est de faire une simple boucle et de comptabiliser au fur et à mesure en utilisant des IF.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
wilpier Messages postés 3 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 17 mars 2008
17 mars 2008 à 22:39
Bonsoir MPI,

si je comprends bien, je dois, si j'ai 32 items dans ma listbox appliquer "if" si la sélection est "true",  "then"  la  ligne  à compter à chaque fois ?
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 mars 2008 à 22:49
En fait, tu pourrais te créer une petite Function booléenne qui vérifie si la cellule E de ta boucle est égale à une des valeurs sélectionnées dans ta liste. Si oui, tu incrémentes une variable compteur de 1.

Cette Function peut soit boucler la liste et vérifier tous les éléments sélectionnés ou bien utiliser un tableau qui contiendrait tous ces éléments dès le départ... Pour 32 éléments, je ne pense pas que le tableau soit primordial, mais s'il y en avait beaucoup plus, ça pourrait sauver un peu de temps.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous