XL 2013 VBA : Récupérer données feuilles pour une récap

Phillip

XLDnaute Occasionnel
Bonjour,

J'ai un problème (de boucle sans doute) que je n'arrive pas à résoudre.

J'ai un classeur avec une centaine de feuilles (1 par adhérent). Chaque adhérent souscrit à une ou plusieurs options, que pour simplifier j'ai numéroté de 1 à 8. Donc, plusieurs adhérents peuvent avoir souscrit l'option 1, l'option 2, l'option x...
Dans la feuille recap, je voudrais que pour chaque option, le nom des adhérents apparaissent. Pour simplifier encore, je n'ai pas mis les noms mais "oui" en face de l'option choisie.

J'arrive à récupérer les informations des feuilles adhérents, les stocker dans une variable, retourner sur la feuille recap, décaler les cellules, coller le nom du premier adhérent qui a souscrit l'option. Le problème c'est que j'ai pensé mettre un compteur "ligne" initialisé à 1 et l'incrémenter pour passer la ligne si un 2° ou 3° adhérent choisit la même option que le premier.

Mais comme mon compteur est initialisé à 1 en tête de boucle (afin que si le deuxième adhérent est le seul à avoir choisi l'option se retrouve en première ligne), à chaque fois que je recommence ma boucle, je repars sur la première ligne et la valeur de mon 2° adhérent écrase celle du premier...

Je suis perdu dans mes boucles et compteurs...


J'attache un fichier simplifié avec un extrait de macro pour éclaircir mon propos, j'espère. J'ai rajouté un onglet résultat espéré en fin de classeur...

merci beaucoup

Cordialement

Phillip
 

Pièces jointes

  • TEST.xlsm
    16.6 KB · Affichages: 29

Iznogood1

XLDnaute Impliqué
Bonjour,

J'aime bien les boucles For each, je trouve le code plus clair.

une petite démo qui ne liste pas les options que personne n'a retenu (évite un tas de lignes vides)
S'il faut le faire, une petite adaptation du code suffira.
 

Pièces jointes

  • TEST-1.xlsm
    33.4 KB · Affichages: 28

Iznogood1

XLDnaute Impliqué
Philip, c'est l'occasion de comprendre ce qu'est un module de classe.

C'est trés simple !

Quand tu écris : vcol = 2
Implicitement tu déclares :
la variable vcol est devra contenir un nomre entier
le nombre que contient vcol est 2


Si tu voulais être vraiment formel, tu aurais écris :
Dim vcol as Integer
Let vcol = 2

Imagine que au lieu de contenir un nombre entier, la variable doivent contenir un objet plus complexe.
Exemple : une nom et une liste de valeurs.

Dans un premier temps, il faut décrire cet objet complexe dans un module de classe.
Cette objet sera composé de
>2 variables :
1 destinée a enregistrer le nom (variable de type string)
1 destinée à enregistrer la liste de valeur (variable de type collection)
> 1 procédure permettant d'ajouter une valeur à la liste de valeurs

Une fois que c'est fait, tu peux utiliser cet objet comme type de variable.
Dim x as "nom du module de classe"

La seule précaution est qu'il est ensuite nécessaire d'initialiser la variable (on dit "instancier") avec l'instruction
Set x = New "nom du module de classe"

Voila, tu disposes d'une variable qui peut stocker un nom et une liste de valeurs.
 

Phillip

XLDnaute Occasionnel
Bonjour Iznogood1 et le forum,

Après avoir regardé quelques tutos sur les modules de classe, j'ai encore plein de questions. Je ne demande pas forcément une formation (quoi que, si une âme charitable est volontaire !)...

Voilà : je ne vois pas trop l'intérêt des classes (vous allez me dire effectivement, tu n'as donc rien compris).

Dans le fichier que tu m'as gentiment donné Iznogood, l'essentiel du code est dans le module...Dans d'autres exemples que j'ai trouvé dans les tutos, l'essentiel du code est dans le module de classe. perturbant, s'il en est...Quelle est la règle s'il y en a une ?

dans l'explication d'Iznogood, il est dit : au lieu de contenir un nombre entier, la variable peut contenir un objet plus complexe.
Exemple : une nom et une liste de valeurs.
Justement, c'est ce que j'essaye de faire, manipuler une liste de noms, prénoms, dates de naissances, adresses etc...Je pressent que les modules de classe peuvent m'aider mais comment ?

encore une fois, où dois-je mettre le code pour manipuler ces listes ?

merci de vos lumières

Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 327
Membres
103 518
dernier inscrit
hbenaoun63