plannification

I

Ice tea

Guest
Bonjour,


je plannifie des travaux sur plusieurs villes et avec plusieurs entreprise.
j'ai 2 tableaux de donnés, un tableau d'affectation d'entreprise par chantier
et un planning général des chantiers, je souhaite en fonction de ces 2 tableaux obtenir un planning des différentes actions à mener pour chaque entreprise que je pourrai leur envoyer.

pour plus de précision il y a fichier joint qui récapitule tout cela.

d'avance merci pour vos réponses.
 

Pièces jointes

  • planning.zip
    3 KB · Affichages: 77
  • planning.zip
    3 KB · Affichages: 82
  • planning.zip
    3 KB · Affichages: 77
J

Jean-Marie

Guest
Bonjour

Dans le fichier deux formules utilisant les fonctions INDEX et EQUIV

Sur le premier tableau de l'entreprise AAA, les villes et les semaines doivent correspondre au tableau Planning

Sur le tableau de l'entreprise BBB, les villes peuvent être triées ou déplacées, la formule étant plus complexe, elle pourra s'adapter à ce changement.

J'ai dissocié le nom de l'entreprise dans la cellule adjacente, pour plus de facilité. Il suffit de changer le nom de l'entreprise dans cette cellule pour que le tableau modifie les travaux à effectuer par la nouvelle entreprise.

@+Jean-Marie
 

Pièces jointes

  • planning.zip
    9.9 KB · Affichages: 68
  • planning.zip
    9.9 KB · Affichages: 69
  • planning.zip
    9.9 KB · Affichages: 71
I

Ice tea

Guest
ok, merci beaucoup jean-marie, c'est exactement ce que je voulais, super le coup de dissocier le nom de l'entreprise dans la cellule adjacente. Etant novice dans la pratique d'excel, pourrais-tu m'expliquer les différentes étapes de la formule du premier tableau afin que je puisse en comprendre le mécanisme et remettre en forme mes tableaux.

d'avance merci
 
J

Jean-Marie

Guest
Re...

J'espère être assez claire dans les explications des enchevêtrements des fonctions.

EQUIV($B44;$B$12:$B$19;0) retourne l'emplacement de la valeur de la cellule B44 dans la plage B12:B19.

INDEX($C$27:$M$34;LIGNES(B$44:$B44);COLONNES($C$43:C$43)), par rapport à la plage C27:M34, cette partie retourne la valeur qui se trouve à l'intersection de la ligne et de la colonne.
LIGNES () retourne le nombre de lignes de la plage passée en argument
COLONNES () retourne le nombre de colonnes de la plage passée en argument.
INDEX(C27:M34;3;4) correspond à "dalle".

La partie de la formule
=SI(INDEX($C$27:$M$34;LIGNES(B$44:$B44);COLONNES($C$43:C$43))="";""; .....) à récupérer dans le tableau planning en fonction de la ligne et de la colonne une valeur, si cette valeur ne contient rien on retourne "".

Maintenant que nous savons qu'il y a un travail à réalisé dans la ville et dans le semaine indiquée, il faut savoir si l'entreprise AAA doit effectué ce travail.
C'est ce que fait cette partie, la partie en gras retourne le numéro de la colonne en fonction du type de travail trouvé
SI(INDEX($C$12:$H$19;EQUIV($B44;$B$12:$B$19;0);EQUIV(INDEX($C$27:$M$34;LIGNES(B$44:$B44);COLONNES($C$43:C$43));$C$11:$H$11;0))=$C$41;

L'entreprise AAA est chargé de faire le travail demandé, on affiche le type de travail a effectué
INDEX($C$27:$M$34;LIGNES(B$44:$B44);COLONNES($C$43:C$43));

L'entreprise AAA n'est pas chargée de ce travail.
"")

@+Jean-Marie
 
O

omicron

Guest
Bonsoir IceTea et Jean-Marie,

En complément de la réponse de Jean-Marie, vous trouverez une variante (programmée) de la solution au problème créant dynamiquement les plannings de chaque entreprise dans des feuilles distinctes, autorisant un ajout d'entreprise et de chantiers sans modification de la programmation, et contrôlant la saisie des informations (références).

=====================================================
Private Sub CommandButton1_Click()

'Paramètres à régler (Zones apparaissant en gris dans les feuilles)
Set RngTabEnt = Sheets("Entreprises").Range("A53:A100") 'Tableau Entreprises
Set RngTabCht = Sheets("Chantiers").Range("B53:G100") 'Tableau Chantiers
Set RngTabPlg = Sheets("Plannings").Range("B53:L100") 'Tableau Planning Général

Application.ScreenUpdating = False 'Désactivation rafraîchissement Ecran

'Suppression des anciens plannings
Application.DisplayAlerts = False
For Each Sht In Worksheets
If Left(Sht.Name, 2) = "P." Then Sht.Delete
Next Sht
Application.DisplayAlerts = True

'Pour chaque entreprise valorisée dans le tableau des entreprises
For Each Ent In RngTabEnt
If Ent <> "" Then

'Création d'une feuille planning (onglet bleu)
Set Sht = Worksheets.Add(after:=Worksheets(Worksheets.Count))
Sht.Name = "P." & Ent
Sht.Tab.ColorIndex = 5

'Initialisation de la feuille à partir du planning général
Worksheets("Plannings").Cells.Copy Destination:=Sht.Cells
Sht.Range("A51").VerticalAlignment = xlCenter
Sht.Range("B51") = Sht.Range("B51") & " - " & Ent
Sht.Range(RngTabPlg.Address).ClearContents

End If
Next Ent

Sheets("Plannings").Activate

'Pour chaque travail valorisé dans le tableau Planning Général
For Each PlgTrv In RngTabPlg.Cells
If PlgTrv <> "" Then

'Recherche dans le tableau de l'entreprise à qui ce travail a été affecté
For Each Cel In RngTabCht
If Cel <> "" And _
Sheets("Chantiers").Cells(RngTabCht.Rows(1).Offset(-1, 0).Row, Cel.Column) = _
PlgTrv And _
Sheets("Chantiers").Cells(Cel.Row, RngTabCht.Columns(1).Offset(0, -1).Column) = _
Sht.Cells(PlgTrv.Row, RngTabPlg.Columns(1).Column - 1) Then

'Quand trouvé, ventilation du travail dans le Planning spécifique Entreprise
Sheets("P." & Cel).Cells(PlgTrv.Row, PlgTrv.Column) = PlgTrv
Exit For
End If

Next Cel

End If
Next PlgTrv

Application.ScreenUpdating = True 'Réactivation rafraîchissement Ecran

End Sub

=====================================================

En vous souhaitant bon week-end.

Omicron.
 

Pièces jointes

  • planningV2.zip
    41.1 KB · Affichages: 101
  • planningV2.zip
    41.1 KB · Affichages: 107
  • planningV2.zip
    41.1 KB · Affichages: 111
A

andré

Guest
Salut à vous,

Beaucoup de retard pour ma solution, mais depuis le début j'avais le présentiment qu'il y avait moyen de résoudre ce problème au moyen d'une petite formule simple, mais sans la trouver.

Voilà qui est fait !

En C44 : =SI(C27="";"";SI(DROITE($B$41;3)=RECHERCHEH(C27;$C$11:$H$19;LIGNE()-42;0);C27;""))
formule à copier d'abord vers la bas de C44 à C51, puis C44:C51 jusqu'en M44: M51

En C58 : =SI(C27="";"";SI(DROITE($B$55;3)=RECHERCHEH(C27;$C$11:$H$19;LIGNE()-56;0);C27;""))

Formule pouvant être simplifiée si les cellules B41 et B55 sont dissociées : voir solution de Jean-Marie.

Je n'ai pas trouvé (je n'ai pas cherché non plus !) d'écrire cette formule pour qu'elle soit copiable de tableau en tableau.

Mais enfin, ceci est déjà un début.
Ândré.
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 867
Membres
103 979
dernier inscrit
imed