Tri sur plusieurs feuilles avec 1 condition sur une feuille récap

Bonjour,
Au secours, je commence à me ramollir du bulbe sur un problème excel que je trouvais simple…à priori:
ma problématique :
j’ai plusieurs feuilles de groupes constitués de personnes participant à des stages avec dans une colonne une lettre désignant s’ils sont demi-pensionnaires, pensionnaires et/ou végans
donc
1 feuille groupe 1 avec x végan, y pension , z 1/2 pension
1 feuille groupe 2 avec x végan, y pension , z 1/2 pension
…etc
Il peut y avoir aussi des feuilles SANS aucun Vegan, mais qu’il faudra néanmoins prendre en compte
et une feuille récap trimestrielle qui rapatrie les données des végan des feuilles précédentes

j’ai essayé plein de formules comme recherche v, index, equiv,…
On m’a même proposé une solution sur un autre forum, mais j’ai beau la décrypter je ne la comprends pas.
dans l’exemple joint il n’y a que 4 feuilles mais dans la réalité çà peut monter à 52 feuilles …
Une feuille se crée à chaque nouveau stage… et donc je dois avoir la formule à adapter dans la feuille récap

merci de votre aide
fichier joint ici https://www.cjoint.com/c/HKui5rfGwQN

Bonjour,
A tester avec une petite macro
Il faut juste cliquer sur la cellule A1 (“VEGAN”)

Sub Transfert()
Dim Ws As Worksheet, Wd As Worksheet, Dl%, i%, j% 'Déclaration des variables
Application.ScreenUpdating = False 'Désactive le rafraissement Ecran
Range("A2:U65000").ClearContents 'nettoie la feuille Recap
j = 2
Set Wd = Sheets("récap végan trim 1")
  For Each Ws In Worksheets 'Boucle sur les onglets
    If Ws.Name <> "récap végan trim 1" Then 'sauf l'onglet récap végan trim 1
    Sheets(Ws.Name).Activate 'Active l'onglet
    Set Ws = Sheets(Ws.Name)
    Dl = Ws.Range("A65536").End(xlUp).Row 'n° de la dernière ligne non vide de la colonne A
      For i = 9 To Dl 'boucle sur les lignes
        If VBA.LCase(Ws.Cells(i, 1)) = "v" Then 'si la cellule colonne "A" contient "v" ou "V"
          Ws.Rows(i).Copy Wd.Rows(j)  'copie vers la feuille récap végan trim 1
          j = j + 1 'ajoute 1 au compteur de ligne feuille Recap
        End If
      Next i
      End If
  Next Ws
  Sheets("récap végan trim 1").Activate
  Range("A1").Select
  Application.ScreenUpdating = True
End Sub

vegan.xlsm (35,2 Ko)

Merci Mimi
çà fonctionne…et même mieux car j’ai tout de suite créé une feuille groupe 5 qui n’existait pas dans le fichier et…çà l’a attrapé
bon,
certes je n’ai rien compris au processus et au codage mais je vais essayer de décrypter la logique pour essayer de l’adapter sur un tout autre fichier
encore merci

Re,

Content pour toi :stuck_out_tongue_winking_eye:

Le principe c’est que la macro active toutes les feuilles sauf la feuille récap et lit cellule par cellule de la colonne A (de la 9 à la dernière remplie) et dés qu’il trouve un “v” (maj ou min) il copie la ligne dans la récap
donc tu peut ajouter autant de feuille que tu veux, à condition qu’elles soient identiques dans la forme

Si ton probleme est resolu n’oublie pas de cliquer sur le petit :white_check_mark: sous la solution pour la valider.
A la prochaine

je débooorde d’amour pour toi Mimi :smiling_face_with_three_hearts::heart_eyes:

Je reviens vers toi Mimi car j’ai voulu partir de ton fichier et ta macro pour en faire une autre:
j’explique
je me suis dit, tiens ! je vais essayer de faire la même chose avec pensionnaires …

  1. j’ai renommé la feuille et copié le nom de la feuille
  2. je suis allé dans le visual basique et remplacé vegan par pensionnaires partout dans la formule que tu as transmise
  3. j’ai remplacé les v et V par p et P
  4. changé le nom du bouton
  5. j’ai enregistré le fichier en mode excel prenant en charge les macros et pensionnaires.xlsm

et…
çà me retrouve tous les végans v :joy::rofl:
C’est ballot …j’ai failli comprendre

pensionnaires.xlsm (35,4 Ko)

Bonjour

Dans une macro, les indications en vert sont des informations qui ne rentrent pas en ligne de compte dans le développement de la macro
ex
If VBA.LCase(Ws.Cells(i, 1)) = "p" Then 'si la cellule colonne "A" contient "p" ou "P"

au lieu de

If VBA.LCase(Ws.Cells(i, 1)) = "c" Then 'si la cellule colonne "A" contient "p" ou "P"

Bingo … j’ai compris
je pensais l’inverse et que c’était les infos en vert qui étaient les plus importantes (je m’étais bien appliqué à faire Entrée (Ctrl maj) juste après pour que çà soit bien en vert)

j’ai changé et çà fonctionne
merci

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.