• Initiateur de la discussion Initiateur de la discussion koadima
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

koadima

XLDnaute Junior
Bonsoir chers tous
Je sollicite votre aide pour realiser la liste des admis de mes eleves.
Dans un classeur, soit 2feuilles. La premiere contient la liste des eleves et leurs notes de composition avec rang et mention(admis, non admis).
Je souhaite en feuille2 generer uniquement la liste de admis au fur et a mesure de la saisie.
Aidez moi.
Merci
 
Bonsoir koadima,

Une solution VBA dans le fichier joint.

Clic droit sur l'onglet de la 1ère feuille => Visualiser le code et collez cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim colAdmis, tablo, i&, n&
colAdmis = 7 'colonne G, à adapter
tablo = [A1].CurrentRegion.Resize(, colAdmis) 'matrice, plus rapide
For i = 2 To UBound(tablo)
    If LCase(tablo(i, colAdmis)) = "admis" Then n = n + 1: tablo(n, 1) = tablo(i, 1)
Next
With Sheets("Admis").[A2] 'à adapter
    If n Then .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
Bonne nuit.
 

Pièces jointes

Avant d'aller au lit, une solution par formules matricielles, entrez en A2 de la feuille "Admis" :
Code:
=SIERREUR(INDEX(Notes!A:A;PETITE.VALEUR(SI(Notes!G$2:G$100="Admis";LIGNE(Notes!G$2:G$100));LIGNES(A$2:A2)));"")
à valider par Ctrl+Maj+Entrée et tirer vers le bas.

La limite 100 est à augmenter si nécessaire.
 

Pièces jointes

Merci
Bonsoir koadima,

Une solution VBA dans le fichier joint.

Clic droit sur l'onglet de la 1ère feuille => Visualiser le code et collez cette macro :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim colAdmis, tablo, i&, n&
colAdmis = 7 'colonne G, à adapter
tablo = [A1].CurrentRegion.Resize(, colAdmis) 'matrice, plus rapide
For i = 2 To UBound(tablo)
    If LCase(tablo(i, colAdmis)) = "admis" Then n = n + 1: tablo(n, 1) = tablo(i, 1)
Next
With Sheets("Admis").[A2] 'à adapter
    If n Then .Resize(n) = tablo
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents 'RAZ en dessous
End With
End Sub
Bonne nuit.

Bonsoir
J'ai tenté mais je n'y arrive pas. Ma connaissance en VBA est moyenâgeuse.
Comment le faire? Je souhaite que les colonnes en feuille2 se mettent a jour au cours de la saisie
Voici mon fichier
 
Avant d'aller au lit, une solution par formules matricielles, entrez en A2 de la feuille "Admis" :
Code:
=SIERREUR(INDEX(Notes!A:A;PETITE.VALEUR(SI(Notes!G$2:G$100="Admis";LIGNE(Notes!G$2:G$100));LIGNES(A$2:A2)));"")
à valider par Ctrl+Maj+Entrée et tirer vers le bas.

La limite 100 est à augmenter si nécessaire.
Bonsoir
J'ai fait une adaptation qui donne mais je n'arrive pas a renseigner les autres colonnes
Aidez moi avec mon fichier afin que toutes les colonnes soient automatiquement renseignés
 
Dernière modification par un modérateur:
Bonsoir koadima,

Vous vous êtes enfin décidé à joindre un fichier pour préciser le problème.

Il suffit d'utiliser le filtre avancé avec cette macro dans le code de la 2ème feuille :
VB:
Private Sub Worksheet_Activate()
[I6] = "Mention": [I7] = "Admis" 'critère
Feuil1.ListObjects(1).Range.AdvancedFilter xlFilterCopy, [I6:I7], [A7:G7] 'filtre avancé
End Sub
Elle s'exécute quand on active la feuille.

A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
28
Affichages
3 K
  • Question Question
XL 2019 VBA
Réponses
10
Affichages
1 K
Retour