Regrouper plusieurs onglets en un avec actualisation lignes par lignes

Bonjour,

Je me permets de créer ce sujet et m'excuse d'avance si c'est une question à laquelle on a déjà répondu. Malheureusement, j'ai navigué une matinée entière pour trouver un sujet similaire à ma problématique mais en vain.

Je m'explique, j'aurais besoin d'un classeur qui me permettrait de regrouper 14 feuilles (des employés) en une seule feuille générale et ce, sur le même classeur. J'aimerais que la feuille dite "générale" soit actualisée dès qu'une personne modifie, insère ou supprime une donnée.

Lorsqu'une personne ajoute des nouvelles données sur sa feuille, sa ligne apparaît dans la feuille générale sous la ligne précédemment écrite sur une autre feuille par exemple. J'espère avoir été relativement clair mais n'hésitez pas si vous avez besoin de plus d'explications.

Je vous joins un fichier Excel pour que vous puissiez voir la trame en question.

Lorsqu'une personne écrit dans la première ligne de la feuille PERS 1, celle-ci doit se répercuter sur la feuille générale et ce, sur la première ligne par exemple. Ensuite, dès qu'une personne écrit dans la première ligne de la feuille PERS 2, celle--ci se répercute sur la feuille générale et ce, sous la ligne précédemment entrée sur la feuille PERS 1 ou sur n'importe quelle autre feuille.

Je vous joins également le fichier (Classeur 1 v2) de @gmb que j'ai trouvé sur un autre topic qui répond approximativement à ma demande. Il manque uniquement l'actualisation lignes sous lignes et non pas bloc par bloc.

Lien du topic si besoin : https://forum.excel-pratique.com/viewtopic.php?f=2&t=87268&p=809850#p809850

En vous remerciant par avance et en espérant avoir été clair dans ma demande.

Bien cordialement,

F8LD.

17classeur1-v2.xlsm (32.41 Ko)

Bonjour,

Pour bien comprendre ... je vois qu'il y a déjà beaucoup de lignes dans l'onglet GENERAL ...

Si une personne écrit dans la première ligne de la feuille PERS 1, cette ligne doit s'ajouter en bas du tableau ?

A quel moment le savoir ? quand la ligne est renseignée y compris le commentaire ?

Et ensuite, on efface cette ligne dans PERS 1 ? ou alors on laisse la ligne et on modifie dans GENERAL la ligne précédemment recopiée en cas de modification de la ligne non effacée dans PERS 1 ?

In fine, les onglets PERS X agissent comme des userform ?

Bonjour @Steelson et merci pour ta réponse.

Oui... En effet il y a beaucoup de lignes dans l'onglet Général. Je te joins un nouveau fichier.

Pour répondre à tes questions :

- Oui, lorsqu'une personne écrit dans n'importe quelle feuille excepté Général, les données doivent se retranscrire dans l'ordre récent d'écriture. Si une personne écrit dans PERS1 à 11h30, la ligne sera automatiquement présente dans la feuille général. Si une personne écrit juste après à 11h32, la ligne se glissera juste en dessous de la ligne la plus récente et ainsi de suite.

- Il n'y a pas vraiment de moment pour le savoir. Il se peut que la personne ne renseigne pas tous les champs.

- Non, il ne faut surtout pas effacer la ligne. Le but étant de consolider une base pour chaque personne ainsi qu'une base générale de l'ensemble des personnes.

- Les onglets PERS X peuvent agir comme des userform, oui !

PS : Est-il possible de supprimer le fichier de mon post de base pour l'actualiser avec celui joint dans ce post ? Merci.

En espérant avoir été clair.

Merci.

21fichier-test.xlsx (10.53 Ko)

PS : Est-il possible de supprimer le fichier de mon post de base pour l'actualiser avec celui joint dans ce post ? Merci.

Il faudrait demander à l'administrateur ...

Pour avis ...

Private Sub Worksheet_Activate()
Dim f As Worksheet, cels As Range
Application.ScreenUpdating = False
If Not ActiveSheet.ListObjects(1).DataBodyRange Is Nothing Then ActiveSheet.ListObjects(1).DataBodyRange.Delete
With ActiveSheet.ListObjects(1)
    For Each f In Worksheets
        If f.Name <> ActiveSheet.Name Then
            .ListRows.Add
            n = .ListRows.Count
            .DataBodyRange(n, 1).Select
            Set cels = f.Cells(1).CurrentRegion
            cels.Offset(1).Resize(cels.Rows.Count - 1, cels.Columns.Count).Copy
            ActiveSheet.Paste
            .DataBodyRange(n, cels.Columns.Count + 1).Resize(cels.Rows.Count - 1, 1).Value = f.Name
            Application.CutCopyMode = False
        End If
    Next f
    .Sort.Apply
End With
Range("A1").Select
Application.ScreenUpdating = True
End Sub

edit = correction à venir sur fichier ...

complément

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Général" Then Exit Sub
For Each cel In Target
    If Sh.Cells(cel.Row, "J") = "" Then Sh.Cells(cel.Row, "J") = Now
Next
End Sub
46fichier-test.xlsm (21.65 Ko)

@Steelson,

C'est exactement ce que je voulais. Merci à toi.

Une question :

- Si j'ajoute une feuille, dois-je la référencé dans VBA ?

Bien à toi.

Non, pas du tout !

Mais à l'inverse fais évoluer ceci dans workbook sinon cela va t’enquiquiner le temps de mise en place de la nouvelle feuille en ajoutant or left(sh.name,5)="Feuil". Sinon une date extrêmement collante ba se mettre en colonne J !!

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Général" or left(sh.name,5)="Feuil" Then Exit Sub
For Each cel In Target
    If Sh.Cells(cel.Row, "J") = "" Then Sh.Cells(cel.Row, "J") = Now
Next
End Sub

C'est fait et c'est carrément parfait !!! Merci encore à toi

Rechercher des sujets similaires à "regrouper onglets actualisation lignes"