Ajout de ligne en fonction d'une liste d'un autre tableau

Résolu/Fermé
tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017 - Modifié le 1 août 2017 à 13:21
 tpbktpbk - 7 août 2017 à 11:25
Bonjour à tous, mille excuses pour le titre peu évocateur.
J'explique :
Sur un onglet j'ai un tableau contenant une liste de nom avec différentes infos (nom, prénom, âge, date de naissance, etc)
Sur un deuxième onglet, j'ai copier ma liste (juste nom et prénom), et j'ai ajouté un calendrier. L'objectif est de marquer les présences de chaque personne en fonction des jours du calendrier.

Dans mon onglet 1, je voudrais afficher le pourcentage de présence de chaque personne.

Ce que je voudrais c'est que lorsque que j'ajoute une personne dans ma liste (dans l'onglet 1), une ligne s'ajoute dans le tableau de l'onglet 2 avec le nom et prénom associés à la personne.

J'ai d'abord créer un identifiant unique pour chaque personne. Ce qui me permet de récupérer des données relatifs à chaque personne.

Ensuite, j'ai essayé de synchroniser les listes de nom, avec une formule :
Dans l'onglet 2
Col A; Col B; Col C
=Liste[@Id]; Liste[@Nom]; Liste[@Prénom]

Le problème c'est que lorsque je complète la partie présence, si je change le mode de filtrage dans la colonne Id, Nom ou Prénom du tableau de l'onglet 1, la ligne ne présence correspondant à la personne ne bouge pas avec avec le nom dans l'onglet 2.

Donc sur le fichier actuel, j'ai simplement fait un copier coller.
Comment faire, pour que la liste de nom de l'onglet 2 corresponde avec la liste de l'onglet 1, en gardant en mémoire les infos relative à chaque personne ?

Je remercie par avance ceux qui pourront m'aider.
Je suis désolée, si je ne suis pas assez claire, vos questions sont les bienvenues !

TPBK

Lien vers le fichier : https://www.cjoint.com/c/GHblvckYlgV
A voir également:

2 réponses

via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703
1 août 2017 à 14:18
Bonjour

Ton fichier en retour :
http://www.cjoint.com/c/GHbmscY83hz

Le filtre fonctionne correctement

Cdlmnt
Via
0
tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
2 août 2017 à 09:42
Au final, ça ne fonctionne pas vraiment.
Si j'ajoute une personne qui prend la place de la 1ère personne (ex. Dupont) de la liste.
Sur le deuxième onglet, on lui assosiera les presences du fameux Dupont.

En fait je pense qu'il n'y a pas de solution simple (qui évite de passer par une macro).
Tant pis.
Merci beaucoup pour ton aide.
0
via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703 > tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
2 août 2017 à 09:58
Oui il faut rajouter les noms sur la 1ere feuille les uns en dessous des autres sans en changer l'ordre, le filtrage ou le tri se faisant sur l'autre feuille
Sinon oui il faudrait passer par une macro assez simple
A toi de voir, reviens ici si tu retiens la solution macro

Cdlmnt
Via
0
tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
Modifié le 2 août 2017 à 11:02
Merci pour ta réponse.
Je suis pas hyper fortiche avec les macros.
Est-ce que ça nécessiste nécessairement l'utilisation d'un bouton ?
0
via55 Messages postés 14403 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 24 avril 2024 2 703 > tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
2 août 2017 à 19:01
Pas forcement la macro peut être déclenchée automatiquement soit à l'activation d'une feuille, soit au double-clic dans une cellule, soit par un raccourci-clavier ..
0
tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
3 août 2017 à 14:49
Bonjour Via !

Encore merci pour ta réponse !

Alors oui j'ai vu ça hier dans l'aprèm.
J'ai essayé de faire un truc :
Je voudrais que la macro se déclenche lorsque j'inscris un nouveau nom et prénom dans la dernière ligne. Je pense que j'ai réussi cette partie. J'ai testé avec un MsgBox.

Ensuite je voudrais, copier l'Id, le Nom et Prénom de la personne fraîchement inscrite, pour la coller dans la liste du calendrier, à la suite des autres.
Pour finir, je voudrais trier les 2 listes, d'abord par ordre alphabétique sur le Nom puis sur le Prénom.

Pour la 2ème partie j'ai utilisé l'enregistreur de macro, que j'essaie d'adapter pour qu'il me copie/colle les bonnes cellules.

Mais avec modifs, ça copie/colle pas du tout.


Voici le code de la macro :
Sub Macro1()
Dim NouvellePersonne As Range
Dim DerIdCalend As Range
'
' Macro1 Macro
'

'
Sheets("Liste").Select
Set NouvellePersonne = Union(Range("ListeNoms[#Headers,[Id]]").End(xlDown), Range("ListeNoms[#Headers,[Id]]").End(xlDown).Offset(0, 1), Range("ListeNoms[#Headers,[Id]]").End(xlDown).Offset(0, 2))
NouvellePersonne.Select
Selection.Copy
Sheets("Calendrier 2017").Select
Set DerIdCalend = Range("Calend2017[#Headers,[Id]]").End(xlDown).Offset(1)
DerIdCalend.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Calend2017[#Headers,[Nom]]").Select
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Calendrier 2017").ListObjects("Calend2017").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Calendrier 2017").ListObjects("Calend2017").Sort. _
SortFields.Add Key:=Range("Calend2017[Nom]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Calendrier 2017").ListObjects("Calend2017").Sort. _
SortFields.Add Key:=Range("Calend2017[Prénom]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Calendrier 2017").ListObjects("Calend2017"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheets("Liste").Select
Range("ListeNoms[#Headers,[Nom]]").Select
ActiveWorkbook.Worksheets("Liste").ListObjects("ListeNoms").Sort.SortFields. _
Clear
ActiveWorkbook.Worksheets("Liste").ListObjects("ListeNoms").Sort.SortFields. _
Add Key:=Range("ListeNoms[Nom]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Liste").ListObjects("ListeNoms").Sort.SortFields. _
Add Key:=Range("ListeNoms[Prénom]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Liste").ListObjects("ListeNoms").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


Range("A1").Select

End Sub


Voilà... Si tu peux encore m'aider je t'en serai très reconnaissante !
0
tpbktpbk Messages postés 5 Date d'inscription mardi 1 août 2017 Statut Membre Dernière intervention 3 août 2017
1 août 2017 à 14:41
Ok, en fait, fallait juste pas utiliser les "tableaux".
Merci beaucoup via55 !
0