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 5

Cordialement.

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.

67exemple.xlsx (10.33 Ko)
Rechercher des sujets similaires à "creer liste participants"