Signaler

Ajout de ligne en fonction d'une liste d'un autre tableau [Résolu]

Posez votre question tpbktpbk 5Messages postés mardi 1 août 2017Date d'inscription 3 août 2017 Dernière intervention - Dernière réponse le 7 août 2017 à 11:25 par tpbktpbk
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 : http://www.cjoint.com/c/GHblvckYlgV
Afficher la suite 
Utile
+0
plus moins
Bonjour

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

Le filtre fonctionne correctement

Cdlmnt
Via
tpbktpbk 5Messages postés mardi 1 août 2017Date d'inscription 3 août 2017 Dernière intervention - 2 août 2017 à 11:01
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 ?
Répondre
via55 8010Messages postés mercredi 16 janvier 2013Date d'inscription 11 août 2017 Dernière intervention - 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 ..
Répondre
tpbktpbk 5Messages postés mardi 1 août 2017Date d'inscription 3 août 2017 Dernière intervention - 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 !
Répondre
via55 8010Messages postés mercredi 16 janvier 2013Date d'inscription 11 août 2017 Dernière intervention - 3 août 2017 à 16:55
Re,

Voilà une macro qui se déclenche dès qu'un prénom est entré dans Liste : transfert dans Calendrier, tri alpha Liste et Calendrier
https://mon-partage.fr/f/9bovvd40/

En espérant que ça conviendra

Cdlmnt
Via
Répondre
tpbktpbk- 7 août 2017 à 11:25
Bjr Via,

Merci c'est super, maintenant le copié/collé fonctionne !

Bien cordialement.
tpbk
Répondre
Donnez votre avis
Utile
+0
plus moins
Ok, en fait, fallait juste pas utiliser les "tableaux".
Merci beaucoup via55 !
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !