Transposition auto d'infos d'une feuille à une autre sous conditions

25excel-planning.xlsx (22.94 Ko)

Bonjour à tous,

étant vraiment débutante en VBA, je n'arrive pas à trouver de solutions à mon problème même en cherchant sur les sujets déjà existants.
J'ai essayé de faire une version simplifiée de mon fichier pour que vous arriviez mieux à m'aider.

Alors voilà, il s'agit d'un planning qui va rendre compte des CP et jours de repos que les employés d'une entreprise vont prendre. Les 3 premières feuilles nommées respectivement 1, 2 et 3 correspondent aux numéros de semaines dans l'année (il y a donc dans mon fichier autant de feuilles que de semaines dans l'année).

La feuille "bilan" correspond à la feuille qui va répertorier les données de toutes les autres feuilles. C'est dans celle-ci que je souhaite voir apparaître mes infos.

J'aimerais par exemple, lorsque je saisis le nom d'un employé (Pierre) ainsi que le nombre 1 ou 1/2 ( pour préciser s'il a pris la journée entière ou une demie journée) dans ma feuille 1 dans la cellule B5, cela me retranscrive un numéro 1 ou 0,5 sur ma feuille "Bilan" au niveau de Pierre, dans la ligne correspondant au repos et dans la colonne semaine et jour qui corresponde c'est à dire en cellule H7.

Exemple ci-dessous:

Feuille1:

image

Ce qui devrait être affiché automatiquement dans la feuille Bilan:

image

Idéalement j'aimerais que ça se fasse automatiquement pour chaque feuille. Par exemple si je remplis la même chose en S2 cela va se remplir dans la colonne correspondante en feuille Bilan.

J'espère que j'ai été assez explicite et je vous remercie par avance de votre aide!!

Bonjour,

as-tu un fichier anonymisé à nous présenter ?

pourquoi une feuille par semaine, et pourquoi pas une seule feuille en continu -que l'on peut filtrer pour ne faire apparaître qu'une semaine à la fois- ? du coup la feuille bilan ne serait qu'un simple TCD

Bonjour,

Normalement j’ai joint à mon post une version simplifiée de mon fichier, est-ce que vous arrivez à la voir ?

Le choix d’une feuille par semaine a été adopté car en réalité le fichier est beaucoup plus complexe que celui que j’ai joint, pour chaque semaine il y a beaucoup + d’informations et j’arrive difficilement à visualiser comment le simplifier en 1 feuille pour toutes les semaines...

Désolé, il est en tête je ne l'avais pas vu ... je regarde cela.

Houlà, avec une telle structure les formules sont être très très alambiquées.

Je vais te proposer quelque chose de plus simple.

Une seule feuille par semaine

Une récap pluriannuelle, pluri-mensuelle

39excel-planning.xlsm (35.47 Ko)

Bonjour,

tout d'abord je vous souhaite de très belles fêtes de fin d'année, je n'ai pas pu répondre avant étant chez ma famille. Je vais voir ce que vous me proposez et je reviens vers vous!!

Merci beaucoup

Bonjour,

j'ai regardé ce que vous me proposiez et c'est exactement l'idée que je cherchais. Le fait de pouvoir sélectionner la semaine et de tout avoir sur une feuille serait parfait.

Maintenant j'ai un peu de mal à transposer tout cela dans mon fichier excel de base qui est beaucoup plus compliqué que cela. La question que je me pose maintenant c'est :

j'aimerais rajouter mes données supplémentaires sur la feuille "semaine". Si par exemple je suis en semaine 1 et que j'ajoute une info, comment je peux faire pour que lorsque je sélectionne la semaine 2 le tableau redevienne vierge et je peux sélectionner de nouvelles infos?

C'est exactement ce que vous avez fait et j'aimerais comprendre comment vous avez fait pour pouvoir faire la même chose sur mon modèle.

Je ne sais pas si j'ai été très claire..

Merci d'avance et bonne journée

Bonjour,

Voici l'architecture de l'application :

  • il y a 2 onglets masqués : BdD (base de données) et TCD (tableau dynamique croisé)
  • quand tu rentres une info, elle modifie celle existante dans la BdD ou elle s'en rajoute
  • il y a une macro qui ne fait à peine la moitié d'une feuille A4 et qui va réagir à l'entrée des données,
  • et dès que la donnée sera répercutée dans la base de données, la macro remettra à la place de la donnée une formule qui relie la vue semaine et la BdD : ainsi un changement de semaine est pris en compte et met les valeurs de ladite semaine dans l'onglet

cel.FormulaR1C1 = "=IFERROR(GETPIVOTDATA(""nombre"",TCD!R3C1,""date"",RC3,""nom"",R4C,""motif"",RC2),0)"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range
    If Intersect(Target, Union([_CP], [_R8])) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each cel In Intersect(Target, Union([_CP], [_R8]))
        If Cells(4, cel.Column) <> "" Then
            With Sheets("BdD").ListObjects(1)
                Set ici = .ListColumns("ID").DataBodyRange.Find((Cells(cel.Row, 3) * 1) & "|" & Cells(4, cel.Column) & "|" & Cells(cel.Row, 2), LookIn:=xlValues)
                If ici Is Nothing Then
                    .ListRows.Add
                    i = .ListRows.Count
                Else
                    i = ici.Row - .HeaderRowRange.Row
                End If
                With .DataBodyRange
                    .Cells(i, 1) = Cells(cel.Row, 3)
                    .Cells(i, 2) = Cells(4, cel.Column)
                    .Cells(i, 3) = Cells(cel.Row, 2)
                    .Cells(i, 4) = cel
                End With
            End With
            cel.FormulaR1C1 = "=IFERROR(GETPIVOTDATA(""nombre"",TCD!R3C1,""date"",RC3,""nom"",R4C,""motif"",RC2),0)"
        End If
    Next
    Sheets("TCD").PivotTables(1).PivotCache.Refresh
    Application.EnableEvents = True
End Sub

Si tu veux ajouter des infos, il faut les répercuter dans la BdD ou une second BdD et adopter le même principe. De quels infos s'agit-il ?

D'accord je comprends mieux même si ça reste un peu complexe à mes yeux.

Voici une capture d'écran du excel d'origine (normalement 1 feuille par semaine mais j'ai essayé de faire le même système que vous)

image

Dans toutes les cases en blanc on entre les noms (par exemple pierre va travailler le lundi 1 février le matin).

Lorsque l'on inscrit une personne dans une des cases cela vient se reporter dans le tableau de droite:

image

En effet, si Pierre s'est inscrit le lundi le chiffre 4 va devenir 3 ( il ne lui reste plus qu'à travailler 3 jours). Si l'on note un nom dans repos 8 ou CP cela va également se reporter dans ce tableau (le 0 devient 1 et ainsi de suite.) J'aimerais que tout ce tableau redevienne vierge lorsqu'on change de semaine, je ne sais pas si je suis assez claire.. et comme vous l'avez très bien fait si j'inscris un 1 dans CP cela se reporte dans l'autre feuille avec le tableau croisé dynamique.

L'excel est en pièces jointes.

12excel-planning-2.xlsx (129.20 Ko)

Désolé, je ne comprends rien à ton fichier.

Peux-tu expliquer le besoin en terme français ... qu'est-ce que tu cherches à faire, quelles sont les paramètres à prendre en compte (sans penser outil excel).

Désolée oui, je récapitule :

Par exemple, le lundi nous avons besoin de 4 opérateurs, 2 techniciens, 2 PGP, 2 maintenance ! Chaque employé va donc inscrire son nom dans la case correspondante! S’il souhaite s’inscrire le lundi de journée ou de nuit il va l’écrire dans la case correspondante !

De la même manière, s’il souhaite ne pas travailler un jour, il va inscrire son nom dans la colonne repos 8 ou congé payé, ou maladie s’il est malade !

Voilà pour la partie de gauche !

La partie de droite est juste un récapitulatif! En effet, chaque personne admettons doit travailler 4 jours dans la semaine! Donc au fur et à mesure qu’elle va inscrire son prénom dans une des cases, le compteur va diminuer ( elle s’inscrit le lundi en journée donc le compteur va tomber à 3 —> cela signifie qu’elle doit encore s’inscrire pour 3 autres jours dans la semaine)! Et de même si elle prend un congé, le tableau comportant tous les 0 va juste comporter des 1 ( si Pierre prend congé payé le lundi, il y aura un 1 à la place du 0 dans la colonne correspondante).

c’est donc un planning qui va permettre aux employés de s’inscrire seule, et qui va permettre de voir s’ils travaillent un nombre équitable de journées.

j’espère que c’est un peu plus clair...

ok, je reprendrai cela ce week end si possible (sauf si qqun d'autre veut s'y mettre)

j'essaierai de respecter le plus possible la mise en page

super merci beaucoup à vous! Et bonne année !!

Bonjour,

un début ...

Il faudra ensuite m'expliquer tout le reste ...

un petit complément

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ici As Range, plage As Range, cel As Range
    Set plage = Union([_mat], [_apm], [_nuit], [_rep], [_con], [_mal])
    If Intersect(Target, plage) Is Nothing Then Exit Sub
    Application.EnableEvents = False
    For Each cel In Intersect(Target, plage)
            With Sheets("BdD").ListObjects(1)
                ID = Cells(cel.Row, 2) & "|" & Cells(cel.Row, 4) & "|" & Cells(7, cel.Column)
                Set ici = .ListColumns("date|ligne|equipe").DataBodyRange.Find(ID, LookIn:=xlValues)
                If ici Is Nothing Then
                    .ListRows.Add
                    i = .ListRows.Count
                Else
                    i = ici.Row - .HeaderRowRange.Row
                End If
                With .DataBodyRange
                    .Cells(i, 1) = Cells(cel.Row, 2)
                    .Cells(i, 2) = Cells(cel.Row, 3)
                    .Cells(i, 3) = Cells(cel.Row, 4)
                    .Cells(i, 4) = Cells(7, cel.Column)
                    .Cells(i, 6) = cel
                End With
            End With
            cel.FormulaR1C1 = _
                "=IFERROR(VLOOKUP(RC2&""|""&RC4&""|""&R7C,Tdata[[#All],[date|ligne|equipe]:[nom]],2,0),"""")"
    Next
    Application.EnableEvents = True
End Sub

Attention, le nombre de "rôles" par jour est figée.

up ... la proposition te convient-elle ?

j'avais une solution permettant aussi de multiplier le nombre de "rôles", mais sans nouvelle de ta part je ne vais plus surveiller le sujet

n'oublie pas de clore le fil de discussion le cas échéant en cliquant sur

Rechercher des sujets similaires à "transposition auto infos feuille conditions"