Filtrage complexe

@Steelson

Je rencontre un souci avec le fichier. Les premières fois lors de l'ouverture du document Excel, une boîte de dialogue apparaissait me demandant d'activer ou non les macros présentes, je les activais donc et tout fonctionnait.

Désormais le document s'ouvre sans notification et le code ne s'applique pas. J'ai essayé de paramétrer le fichier en activant "toutes les macros" de manière manuelle via les Paramètres des macros d'EXCEL mais toujours rien (il était à l'origine sur "Désactiver toutes les macros avec notification").

Je ne comprends pas d'où provient le problème, j'ai même essayé à multiples reprises de télécharger de nouveau le document d'origine que vous aviez envoyé pour savoir si c'était mon fichier modifié qui posait problème mais même comme cela ça n'a pas marché, pourtant ça a eu marché

J'ai également coché "Accès approuvé au modèle d'objet du projet VBA".

As-tu rencontré une erreur ?

Ajoute cette macro :

sub activer()
Application.EnableEvents = True
end sub

et lance la

et ensuite refais les essais

Sinon, envoie ton fichier (en mp si nécessaire)

@Steelson

Ça y est, cela fonctionne à nouveau, merci

EDIT : Je pense que c'est en supprimant le contenu de la BdD que ça n'a plus voulu marcher, quand j'arrivais à enregistrer une donnée, celle-ci était inscrite en BdD à l'extérieur du tableau et n'était donc pas conservée dans la feuille saisie.

@Steelson

Est-il possible de supprimer définitivement des formules qui se régénèrent dans des cellules ?

Je suis entrain de modeler mon outil et je rencontre un problème par rapport à ça, merci!

Car quand je veux insérer une ligne à la suite, non collée aux lignes possédant la formule, celle-ci est malgré tout reprise.

Si tu veux travailler tranquillement sur la feuille en inhibant la macro, ajoute alors en début de macro exit sub que tu enlèveras quand tout sera au point et que tu auras modifié les cellules concernées par la macro événementielle (de m^moire toutes les cellules de la colonne C à partir de la 8ème ligne).

Bonjour @Steelson

Ça y est, grâce à toi j'ai enfin pu modeler la première partie de mon outil selon les besoins du BET !

Tu pourras trouver ci-joint le fichier modifié.

J'ai enregistré une macro (non optimisée mais cela n'est pas gênant) afin que dès lorsqu'un nouveau projet est contracté, celui-ci est directement ajouté dans la feuille Suivi du temps, anciennement Saisie.

Dans cette feuille, j'ai également inséré un Statut projet qui permettra d'éviter d'archiver les données ailleurs, manuellement et selon le statut donné (Finalisé, Abandonné), les salariés masqueront certains projets.

Manuellement afin d'éviter toute erreur et parce que je ne sais pas encore si créer un bouton Masquer sera forcément pratique, à en discuter avec l'équipe !

Il me reste juste un problème à résoudre concernant la BdD, il faudrait en effet limiter les enregistrements.

Je m'explique, il faudrait supprimer les lignes où l'imputation = 0 ou un vide. J'ai pensé à établir une validation des données dans la feuille de Suivi du temps directement mais cela pose problème puisque si un salarié s'est trompé de ligne et a répertorié par exemple 2h de travail sur tel sujet, après il lui serait impossible d'effacer la donnée.

Si tu as une solution à mon problème, ce serait super!

Belle journée

Julia B

Je viens d'ailleurs de me rendre compte que mon Statut projet ne fonctionne pas, il ne se répertorie pas dans la BdD.

EDIT : Ça y est, j'ai réussi à l'afficher, mais en fait je rencontre un autre problème du coup car il faut qu'il puisse se mettre à jour comme l'imputation ...

Il me reste juste un problème à résoudre concernant la BdD, il faudrait en effet limiter les enregistrements.

Je m'explique, il faudrait supprimer les lignes où l'imputation = 0 ou un vide.

On peut rebalayer la BdD pour ôter ces lignes en automatique, ou bien ajouter ou supprimer la ligne quand la valeur est nulle ou à blanc.

Je vais voir cela.

1-Il y a un truc qui ne va pas,

tu mets comme identifiant de la ligne de la BdD

=[@Salarié]&"|"&[@Fonction]&"|"&[@Type]&"|"&[@Nom]&"|"&[@Année]&"|"&[@Semaine]&"|"&[@[Statut projet]]

Or il n'y a pas correspondance du nom et du type projet entre les 2 onglets.

N'y a t-il pas redondance ?

Ce que je ferai d'abord, c'est une base de projet avec le nom et le type, que j'appellerais dans chaque onglet (BdD et saisie des temps), et je me limiterais dans l'identifiant ID au nom du projet.

2- pour le statut, est-ce que le salarié peut être productif et improductif en même temps ? donc même question, je ne mettrais que le nom du salarié

3- Y a-t-il d'éventuels homonymes ? sinon y a t'il un "matricule" attribué chaque salarié qui pourrait faire office de clé ?

4- attention, le changement de statut du projet seul ne se répercute pas dans la BdD. Là encore je le verrais bien dans la base projet évoquée ci-dessus.

Macro modifiée (à noter que j'avais une erreur dans la formule !! comportement de INDEX que je ne connaissais pas ...)

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Columns("D")) Is Nothing Then Exit Sub

Application.EnableEvents = False
With Sheets("BdD")
    For Each cel In Intersect(Target, Columns("D"))
        If cel.Row >= 8 Then
            If cel.Value = 0 Or cel.Value = "" Then
                If cel.Offset(0, 1) <> 0 Then
                    ' effacement de la ligne
                    i = cel.Offset(0, 1) + 1
                    .Rows(i).Delete Shift:=xlUp
                End If
            Else
                If cel.Offset(0, 1) = 0 Then
                    ' ajout d'une ligne dans la base de donnée
                    i = .Cells(Rows.Count, 1).End(xlUp).Row + 1
                    .Cells(i, 1) = Range("D2")
                    .Cells(i, 2) = cel.Offset(0, -3)
                    .Cells(i, 3) = cel.Offset(0, -2)
                    .Cells(i, 4) = cel.Offset(0, -1)
                    .Cells(i, 5) = Range("D4")
                    .Cells(i, 6) = Range("D5")
                    .Cells(i, 7) = cel.Value
                    .Cells(i, 8) = cel.Offset(0, 2)
                Else
                    ' modification de la valeur dans la base de donnée
                    i = cel.Offset(0, 1) + 1
                    .Cells(i, 7) = cel.Value
                End If
            End If
            ' re-mise en place de la formule
            cel.FormulaR1C1 = "=IF(RC[1]=0,0,INDEX(Tab_BdD[Imputation],RC[1]))"
        End If
    Next
End With
Application.EnableEvents = True

End Sub

Bonjour @Steelson

Je ne sais pas si j'ai bien tout saisi donc n'hésite pas à me reprendre.

1/ La base Projet existe déjà et elle comporte ces éléments. Du coup, le nom et le type sont répertoriés de nouveau dans les feuilles Suivi du temps et BdD, ça ça ne change pas ? Mais on se limiterait juste concernant l'ID qui ne tiendra compte que du nom de projet ou du nom d'une fonction autre ? Si c'est bien ça oui, je comprends il y avait effectivement redondance, je vais changer ça.

2/ À mon BET ils sont 5 salariés, dont 1 qui est totalement "improductif", les 4 autres sont principalement productifs mais peuvent être "improductifs". Donc ici tu parles toujours de l'ID, pour en retirer la Fonction c'est ça ?

3/ Il n'y a pas d'homonymes parmi les salariés et étant donné leur effectif je pensais rester sur qqc de convivial : leur identifiant sera leur prénom.

4/ Oui effectivement, je vois le problème que le statut pose donc je vais voir pour l'intégrer dans la base projet, faudra juste que je le répertorie ensuite ailleurs pour pouvoir réaliser une analyse des projets en-cours (Et je comprends maintenant le principe de l'ID, je l'ai retiré de celui-ci).

D'autant plus que mon outil n'est toujours pas abouti, en réalité l'analyse via les TCD n'arrivera pas là puisque je vais lier la facturation à l'instant T des projets à ça. J'ai déjà la formule qui va faire le liant entre les 2 classeurs et je chercherais plus tard une macro qui permettra d'ouvrir le classeur Facturation afin que la mise à jour se fasse lors de l'ouverture de la feuille où les données seront présentes.

Merci pour ton investissement c'est très formateur pour moi.

Belle journée

1- je te suggère en effet de les enlever de l'ID, tu peux les laisser dans la BdD et dans la feuille saisie, je pense qu'il serait intéressant de les "appeler" par une recherchev

2- donc laissons prod/improd dans l'ID

3- donc pas de problème

4- bien vu, il sera mieux dans la base projet (tu peux le rappeler dans l'onglet saisie si besoin)

je te laisse faire, si un moment ou un autre tu as besoin d'aide pour remettre au carré, je suis là

Nota aussi que j'ai découvert une erreur grave (si si !) dans la formule index initiale, et que j'ai changé dans la dernière version postée de la macro

J'ai d'ailleurs tenté de procéder à une RECHERCHEV ce matin pour le statut mais je rencontre des soucis également là-dessus dû à un problème de format très certainement puisque quand les valeurs cherchée et désirée sont toutes deux des chiffres la formule fonctionne mais quand il y a du texte non.

Et oui j'ai bien récupéré la macro modifée ! Merci

Je pense que je vais me reconcentrer sur mon outil et sa finalité pour le moment car ça me semble un peu dépassé pour la suite. Il faut que j'envisage un nouveau moyen de coordonner le tout étant donné que cela a été modifié.

Je te tiens au courant et merci pour ton aide jusqu'à présent !

Bonjour @Steelson

J'ai pas mal avancé sur l'aspect fonctionnel de mon outil, il me reste surtout le côté analyse à développer mais je rencontre un souci là-dessus puisque comme indiqué dans mon dernier post, je n'arrive pas à faire fonctionner la formule RECHERCHEV. Je souhaiterais cette fois-ci intégrer dans la BdD le N° Projet pour pouvoir ensuite créer une relation entre les tables Tab_BdD et Tab_Projet pour une analyse en TCD plus poussée. Je m'étais dit que c'était un problème de formatage mais je n'ai toujours pas réussi à régler le problème.

Aurais-tu une explication et une solution à cela stp?

Tu trouveras ci-joint mon fichier modifié

Merci d'avance pour ton aide

Bon après midi !

Julia B

Dans BdD

=SIERREUR(INDEX(Tab_Projet[N°];EQUIV([@Nom];Tab_Projet[Nom];0));"Divers")

Il faut utiliser la combinaison de INDEX et EQUIV car le Nom ne se trouve pas dans le première colonne (condition indispensable pour RECHERCHEV).

EQUIV([@Nom];Tab_Projet[Nom];0)) donne le numéro de ligne dans Tab_projet

Comme certains n'ont pas de n°, j'ai ajouté un traitement d'erreur =SIERREUR(_______________________;"Divers")


Au passage, pour Coûts temps

=[@Imputation]*INDEX('Coût horaire'!$I$1:$K$6;EQUIV([@Salarié];'Coût horaire'!$I$1:$I$6;0);EQUIV([@Année];'Coût horaire'!$I$1:$K$1;0))

à condition que dans l'onglet coût horaire 2019 et 2020 soient en numérique et non en texte.

C'est la même logique ... EQUIV va aller chercher le numéro de ligne correspondant au salarié puis le numéro de colonne correspondant à l'année (ne pas oublier le 0 la fin de la fonction EQUIV)

D'accord, je ne connaissais pas cette condition ! Je trouve ça d'ailleurs dommage qu'on ne nous l'ait pas évoquée au sein de nos cours ... En tout cas c'est super, merci

Je pense que je vais bientôt pouvoir finaliser cet outil selon les objectifs établis. Je te tiendrai au courant et si une dernière question me traîne j'enverrai un petit message. Mais un grand merci pour cet échange et ton aide !

Passe une belle journée

Julia

Bonjour @Steelson

Malheureusement me revoilà plus tôt que prévu !

Je rencontre un problème technique concernant mon outil puisque pour le concevoir je travaillais sur un ordi WINDOWS, mais le reste de l'équipe travaille sur MAC. C'est pour cela que je n'avais pas eu recours à certains compléments tels que PowerPivot, ... Mais je m'aperçois maintenant que la macro que j'avais enregistrée "Enregistrement_Projet", ne fonctionne pas sur MAC. J'ai fait quelques recherches et cela peut provenir de l'usage de quelques langages VBA. Je voulais alors savoir si tu savais convertir un code pour une version MAC ? Facilement et rapidement, sinon ne t'embêtes pas, je réenregistrerai ma macro depuis un ordi MAC.

EDIT : Le code fonctionne pour ce qui est de répertorier le nouveau projet dans la feuille Nouveau projet, mais c'est lorsqu'il doit être également répertorié sur la feuille de Saisie du temps. Si tu réalises un test, tu t'apercevras que plusieurs projets (le contenu uniquement) sont alors supprimés de la feuille.

Et par la même occasion, j'avais une question, lorsque l'on a recours à plusieurs tables pour réaliser un TCD, on ne peut plus créer de champs calculés sur celui-ci ? Car c'est ce que cela me provoque.

Merci d'avance et bon après midi

Julia

Je suis incompétent sur Mac.

Et a priori tu es en avance sur moi quand il s'agit de créer des TCD avec des sources multiples !!

N'hésite à pas à ouvrir un nouveau sujet pour ces questions, cela interpellera sans doute d'autres contributeurs.

D'accord, merci pour ton aide jusqu'alors !

Passe une très belle journée

Rechercher des sujets similaires à "filtrage complexe"