Créer une Liste de Participants
Bonjour à tous,
Impossible de trouver une solution à mon problème vue mes piètres connaissances.
Je m’explique :
J’ai un fichier Excel qui contient 4 feuilles Excel dont les noms sont :
FeuilA, FeuilB, FeuilC et ListeParticipants.
Les 3 premières feuilles contiennent les noms des participants (Voir colonnes D). Comment peut-on faire (Avec Macro si c’est possible) dont le bouton se trouve dans la feuille : ‘ListeParticipants’ pour lister tous les noms de participants des feuilles citées plus haut pour les mettre dans la feuille : ‘ListeParticipants’, en prenant soin d'avoir au final une liste de noms sans doublons et triée dans un ordre croissant.
Merci d’avance de votre aide.
bonjour
tu veux travailler avec Excel comme on travaillerait avec des fiches papier.
mon conseil :
travaille dans l'autre sens. Crée une feuille à une seule colonne dans laquelle tu saisis TOUS les noms de participants, d'où qu'ils viennent. Tu peux y mettre des tests d'unicité.
et dans les feuilles par compétition, tu mets des listes déroulantes de saisie des noms, listes basées sur la feuille des noms
Bonjour jmd et tous le monde,
Merci pour tes explications.
Effectivement, j’ai une liste de tous les membres, or, tous les membres ne participent pas au concours.
D’où l’idée créer une liste de participants à partir des noms des participants.
Salutations.
re
si nécessaire, sur ta liste de noms, mets une croix dans une cellule en face de ceux qui participent ou vont participer, de manière à les repérer
Bonjour jmd et le forum,
Merci à toi jmd pour tes conseils.
J'ai voulu automatiser la recherche des participants sans se prendre la tête, surtout qu'Excel le permet.
J'ai trouvé une solution avec l'enregistreur de Marcos, la solution n'est pas exceptionnelle mais au moins elle a le mérite de fonctionner.
Je la propose au cas où cela peut aider quelqu'un d'autre.
Salutations.
Le code est à placer dans un module :
Sub Liste_Participants()
'
' Liste_Participants Macro
Application.ScreenUpdating = False '(1)
Dim strNomFeuille As String
strNomFeuille = "ListeParticipants"
If FeuilleInexistante(strNomFeuille) Then
MsgBox "Pour votre information, la feuille nommée : " & vbCrLf & """ListeParticipants"" n'existe pas ," & vbCrLf & "pas d'inquiétude, elle sera créée automatiquement." '& dans le classeur " & ThisWorkbook.Name
Sheets.Add: ActiveSheet.Name = "ListeParticipants" 'créer la feuille
Else
MsgBox "Comme la feuille : ListeParticipants existe déjà ," & vbCrLf & "Nous allons supprimer l'ancienne liste de Participants."
Sheets("ListeParticipants").Select
Range("A2:A300").Select
Selection.ClearContents
End If
Sheets("ListeParticipants").Select
Rows("2:65536").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Participants"
Range("A2").Select
Sheets("FeuilA").Select
Range("D2:D403").Select
Selection.Copy
Range("A1").Select
Sheets("ListeParticipants").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A404").Select
Sheets("FeuilB").Select
Range("D2:D576").Select
Application.CutCopyMode = False
Selection.Copy
Range("A1").Select
Sheets("ListeParticipants").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A979").Select
Sheets("FeuilC").Select
Range("D2:D380").Select
Application.CutCopyMode = False
Selection.Copy
Range("A1").Select
Sheets("ListeParticipants").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1358").Select
Sheets("ListeParticipants").Select
Columns("A:A").Select
Application.CutCopyMode = False
ActiveSheet.Range("$A$1:$A$6406").RemoveDuplicates Columns:=1, Header:=xlNo
ActiveWorkbook.Worksheets("ListeParticipants").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ListeParticipants").Sort.SortFields.Add Key:=Range _
("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
Range("A2:A600").Select
ActiveWorkbook.Worksheets("ListeParticipants").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("ListeParticipants").Sort.SortFields.Add Key:=Range _
("A2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("ListeParticipants").Sort
.SetRange Range("A2:A600")
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("ListeParticipants").Select
Range("A1:B200").Select
With Selection.Font
.Name = "Arial"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
With Selection.Font
.Name = "Arial"
.Size = 12
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Columns("A:A").ColumnWidth = 35.86
Range("A1").Select
With Selection.Font
.Name = "Arial"
.Size = 14
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
.TintAndShade = 0
.ThemeFont = xlThemeFontNone
End With
Selection.Font.Underline = xlUnderlineStyleSingle
Range("A2").Select
Dim i As Integer
For i = 1 To Sheets.Count 'Compte le nombre de feuilles de ton classeur
Sheets("ListeParticipants").Select 'ListeParticipants=Le nom de ta feuille
Sheets("ListeParticipants").Move After:=Sheets(i) 'Déplace la feuille ListeParticipants après la dernière feuille comptée.
Next i
Application.ScreenUpdating = True
End Sub
La suite du code :
Public Function FeuilleInexistante(ByVal strNomFeuille As String) As Boolean
'Retourne TRUE si strNomFeuille est le nom d'une feuille qui n'existe pas dans le classeur actif
FeuilleInexistante = IsError(Evaluate("='" & strNomFeuille & "'!A1"))
End Function
Bonsoir,
Une coupure m'a foutu en l'air mon message Grrr ! Je recommence donc. Visiblement, personne n'était très motivé par ton sujet, moi non plus d'ailleurs, mais après avoir dû m'y reprendre 10 à 15 fois pour ajuster des indices de tableau, j'avais un peu besoin de décompresser...
J'ai vu qu'entretemps tu t'étais décidé à faire appel à l'enregistreur.Cela peut rendre quelque service, certes, à la condition expresse de tout réécrire ensuite. Il me paraîtrait plus profitable de te pencher sur du code non issu de l'enregistreur pour en interpréter pas à pas les actions programmées, de façon à en tirer profit ensuite...
En tout cas, voici ton fichier.
Bonjour MFerrand,
Tout d'abords merci d'avoir consacré de votre temps pour solutionner mon problème.
J'ai testé votre proposition, en effet, elle fonctionne parfaitement bien et s'exécute très rapidement.
En plus, ça c'est de la programmation, autre chose que l'enregistreur de Macro.
Je vais essayer de décrypter le code pour mieux le comprendre en espérant que je vais y arriver.
En tout cas, il fonctionne parfaitement et me donne totalement satisfaction.
Merci et grand BRAVO.
Cordiale poignée de main.
Bonjour Mferrand et le Forum,
Merci encore pour votre solution.
Je vous sollicite pour vous demander quelle sont les modifications à apporter au code existant si j’ajoute 3 autres feuilles semblables aux feuilles existantes dont les noms sont : FeuilA4T, FeuilB4T et FeuilC4T.
Merci d’avance de me consacrer encore un peu de votre temps.
Bonjour,
f = Split("A B C A4T B4T C4T")
(...)
For f = 0 To 5Cordialement.
Bonjour Mferrand,
Je viens de faire le test, en effet, le code fonctionne bien et répond totalement à mes attentes.
J'ai bien compris ou il faut ajouter les modifications si demain je dois ajouter d'autres feuilles.
Merci encore et encore.
PS : Pour cotre information, le code fonctionne beaucoup plus vite que celui que j'ai fait avec l'enregistreur des Macros.
Bien à vous.
Bonjour à tous,
J'ai à peu près le même problème qu'Harzer.
Je pense que vous avez répondu à mon problème dans les précédents postes, mais je n'arrive pas à comprendre le programme, toutes mes excuses, mais je suis une vrai novice.
Je vous explique mon cas :
J'ai plusieurs feuilles au sein d'un classeur (X, Y, Z),
Dans les feuilles X et Y, des données vont être renseignées, ici dans l'exemple ce sera dans la colonne "Choix" qui est une liste déroulante ("oui", "non" ou "").
Je souhaiterais que (s'il est possible mais je pense que oui, en tout cas j'espère) :
Il s'affiche dans la feuille Z, un résumé des colonnes "lettres" et "chiffres" des cases cochées "oui" dans les feuilles X et Y.
Aussi les valeurs des listes des feuilles X et Y ne sont pas fixes elles peuvent augmenter et diminuer ainsi que leurs valeurs (colonne "chiffres").
J'aimerais intégrer un tri décroissant automatique en fonction des valeurs des colonnes "chiffres".
Je vous remercie beaucoup.