Microsoft 365 Reporter automatiquement une liste de noms sur d'autres onglets

Coco6985

XLDnaute Nouveau
Bonjour,

Je tiens tout d'abord à vous remercier de m'accepter dans ce forum et à m'excuser également, car je pense que le sujet à déjà été traité, mais je ne trouve pas "chaussures à mon pied"...
Je n'y connait pas grand chose en macros, et je souhaiterais savoir s'il est possible de faire un report automatique de certaines colonnes sur d'autres onglets.
En fait j'ai un onglet avec les noms, prénoms, services, statuts des agents et je souhaiterais qu'il se reporte automatique sur les autres onglets "janvier", "février"( ... ) de manière à ce que si j'ajoute un agent en cours d'année, cela puisse se répercuter sur les onglets "mois".
Je vous remercie d'avance pour votre aide.
 

Pièces jointes

  • TEST PLANNING CONGES.xlsx
    16.3 KB · Affichages: 6
Solution
Bonjour Coco6985, le forum,

Avec la macro précédente si l'on supprime un agent en 1ère feuille il n'est pas supprimé dans la 2ème.

Cela paraît normal car il peut y avoir des données à conserver.

Si toutefois on veut que l'agent soit supprimé utilisez ce fichier (2).

A+

Victor21

XLDnaute Barbatruc
Bonjour, @Coco6985

Si vous sélectionnez plusieurs feuilles en maintenant la touche contrôle (Ctrl) enfoncée -les noms des feuilles sélectionnées changent alors de couleur - toute info entrée sur l'une quelconque des feuilles apparaitra au même endroit (même cellule) sur toutes les feuilles sélectionnées.
 

ALS35

XLDnaute Occasionnel
Bonjour à tous,

Comme tu indiques que tu as Excel 365, tu peux transformer ta liste d'agents en tableau structuré, c'est plus facile pour les ajouts, lui donner un nom exemple TabAgents, et dans ta première cellule sur chaque feuille Mois tu fais simplement =TabAgents. Tu gères la mise en forme comme tu veux.
Exemple joint en A24.
Attention tout ajout ou suppression sera répercutée sur chaque feuille.

Cordialement
 

Pièces jointes

  • XLD TEST PLANNING CONGES.xlsx
    19 KB · Affichages: 2

Coco6985

XLDnaute Nouveau
Bonjour, @Coco6985

Si vous sélectionnez plusieurs feuilles en maintenant la touche contrôle (Ctrl) enfoncée -les noms des feuilles sélectionnées changent alors de couleur - toute info entrée sur l'une quelconque des feuilles apparaitra au même endroit (même cellule) sur toutes les feuilles sélectionnées.
Bonjour Victor21 et merci pour votre réponse. Mais je pensais plutôt à une sorte de "table des matières" automatique sur le premier onglet. Car avec votre méthode, je ne peux pas ajouter des nouveaux agents
 

job75

XLDnaute Barbatruc
Bonsoir Coco6985, Patrick, AL535,

Pour qu'il n'y ait pas de problème avec les formats (les MFC en particulier) j'ai mis le tableau de la feuille Janvier sous forme de tableau structuré.

Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim d As Object, P As Range, tablo, i&, x$, source, n&, j%
'---analyse de la feuille du mois---
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set P = Sh.ListObjects(1).Range
tablo = P.Resize(, 5) 'matrice, plus rapide
For i = 2 To P.Rows.Count - 1
    x = tablo(i, 2)
    If x <> "" And LCase(tablo(i, 1)) = "am" Then If Not d.exists(x) Then d(x) = i 'mémorise la ligne
Next i
'---feuille AGENTS et mise à jour de la feuille du mois---
Application.ScreenUpdating = False
source = Sheets("AGENTS").UsedRange.Resize(, 5) 'matrice, plus rapide
For i = 2 To UBound(source)
    x = source(i, 2)
    If x <> "" And LCase(source(i, 1)) = "am" Then
        If d.exists(x) Then 'mise à jour
            n = d(x)
            For j = 1 To 5
                tablo(n, j) = source(i, j)
                tablo(n + 1, j) = source(i + 1, j)
            Next j
        Else 'crée 2 nouvelles lignes sous le tableau
            If P(2, 1) = "" Then n = 2 Else n = P.Rows.Count + 1 '1ère ligne vide
            For j = 1 To 5
                P(n, j) = source(i, j) 'copie les valeurs
                P(n + 1, j) = source(i + 1, j)
            Next j
            P.Rows(n).Resize(, 5).Font.Color = P(n, 1).Font.Color 'police visible
            P.Rows(n + 1).Borders(xlEdgeBottom).Weight = xlThin 'bordure du bas
            Set P = P.Resize(n + 1)
        End If
    End If
Next i
'---restitution des mises à jour---
P.Resize(UBound(tablo), 5) = tablo
End Sub
Elle s'exécute automatiquement quand on active une feuille de mois (Janvier, Février...).

A+
 

Pièces jointes

  • TEST PLANNING CONGES(1).xlsm
    31.5 KB · Affichages: 2
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Coco6985, le forum,

Avec la macro précédente si l'on supprime un agent en 1ère feuille il n'est pas supprimé dans la 2ème.

Cela paraît normal car il peut y avoir des données à conserver.

Si toutefois on veut que l'agent soit supprimé utilisez ce fichier (2).

A+
 

Pièces jointes

  • TEST PLANNING CONGES(2).xlsm
    32 KB · Affichages: 5

Coco6985

XLDnaute Nouveau
Bonsoir Coco6985, Patrick, AL535,

Pour qu'il n'y ait pas de problème avec les formats (les MFC en particulier) j'ai mis le tableau de la feuille Janvier sous forme de tableau structuré.

Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not IsDate("1/" & Sh.Name) Then Exit Sub
Dim d As Object, P As Range, tablo, i&, x$, source, n&, j%
'---analyse de la feuille du mois---
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Set P = Sh.ListObjects(1).Range
tablo = P.Resize(, 5) 'matrice, plus rapide
For i = 2 To P.Rows.Count - 1
    x = tablo(i, 2)
    If x <> "" And LCase(tablo(i, 1)) = "am" Then If Not d.exists(x) Then d(x) = i 'mémorise la ligne
Next i
'---feuille AGENTS et mise à jour de la feuille du mois---
Application.ScreenUpdating = False
source = Sheets("AGENTS").UsedRange.Resize(, 5) 'matrice, plus rapide
For i = 2 To UBound(source)
    x = source(i, 2)
    If x <> "" And LCase(source(i, 1)) = "am" Then
        If d.exists(x) Then 'mise à jour
            n = d(x)
            For j = 1 To 5
                tablo(n, j) = source(i, j)
                tablo(n + 1, j) = source(i + 1, j)
            Next j
        Else 'crée 2 nouvelles lignes sous le tableau
            If P(2, 1) = "" Then n = 2 Else n = P.Rows.Count + 1 '1ère ligne vide
            For j = 1 To 5
                P(n, j) = source(i, j) 'copie les valeurs
                P(n + 1, j) = source(i + 1, j)
            Next j
            P.Rows(n).Resize(, 5).Font.Color = P(n, 1).Font.Color 'police visible
            P.Rows(n + 1).Borders(xlEdgeBottom).Weight = xlThin 'bordure du bas
            Set P = P.Resize(n + 1)
        End If
    End If
Next i
'---restitution des mises à jour---
P.Resize(UBound(tablo), 5) = tablo
End Sub
Elle s'exécute automatiquement quand on active une feuille de mois (Janvier, Février...).

A+
Merci 1000 fois Job75 ! c'est exactement ce dont j'avais besoin
 

Discussions similaires

Statistiques des forums

Discussions
303 820
Messages
2 014 419
Membres
219 922
dernier inscrit
Netposte