Calculer l'occurence selon plusieurs critères

Bonjour de bon matin,

Après une nuit de reflexion, un V2 qui sera plus intéressante, elle met automatiquement la formule dans la colonne suivante ce qui évite d'avoir les formules sur toutes les colonnes et alourdir le fichier inutilement, ou d'avoir à la taper manuellement.

Sub INITIALISER()
Dim FEUILLES As Variant
Dim FEUILLE As Variant
Dim SEMAINE As Range
Dim LAST_R%
FEUILLES = Array("CALCUL SECTO 5LITS", "CALCUL SECTO 3LITS", "CALCUL SECTO URG")
For Each FEUILLE In FEUILLES
    With Worksheets(FEUILLE)
        Set SEMAINE = .Rows(1).Find(What:="S" & Worksheets("Feuil1").Range("D1").Value)
        LAST_R = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)).Copy .Cells(2, SEMAINE.Column + 1)
        .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)) = .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)).Value
    End With
Next
Worksheets("Feuil1").Range("D1").Value = Worksheets("Feuil1").Range("D1").Value + 1
End Sub

Bonne journée !

Merci Ergotamine !

Je vais tester ça je te tiens au jus ! Tu vas grandement me faciliter la tache au travail

Merci encore !

Bonjour,

Aucun soucis, si c'est toujours un plaisir, il faut juste que vous ayez compris le code afin d'en assurer la maintenance et savoir ce que vous pouvez et ne pouvez pas faire.

Cdlt,

Bonjour,

Ton code Ergotmine marche nickel, aurait-il une solution pour ajouter les agents sur les colonnes directement plutôt que ton ancien code, cela éviterais des bugs et n'afficher que les agents qui sont sur la planification.

En gros, il faudrait que ca détecte si agent connu ajoute sur la ligne de l'agent sinon ajoute la ligne de l'agent puis calcul l'occurrence.

Comme ça chaque année, il n'y aurait pas de bug.

Merci d'avance pour l'aide que vous m'apporterez !

Bonjour,

Ici ça dépassera mes compétences en VBA désolé car il faudrait boucler sur des plages dynamiques sur un nombre de colonne, charger les valeurs dans un dico, comparer ce dico à la liste déjà chargée, ajouter les agents, ... de plus, que se passe-t-il si un agent est présent dans la liste de la feuille car présent en Sn-1 mais est absent en Sn ? On perd l'historique ?

En soit il suffirait de filtrer par semaine sur les 0 et éventuellement ajouter une MEFC qui surligne en rouge les agents présents dans le planning mais pas dans les feuilles récap. Je ne pense pas qu'il y ai un turnover incessant ?

En restant à dispo pour en discuter.

Cdlt,

Il faudrait qu'il soit ajouter si inexistant, mais si sur le prochain planning l'agent n'y est pas grave reste sur la ligne et ne sera pas compatibilisé.

En fait il faudrait qu'il soit ajouter mais pas supprimé.

Vu que le compteur se fait annuellement par semaine, on calcul sur le planning combien de fois il a été à la chambre 3, la semaine d'après si chambre 5, etc...

Chaque année nouveau workbook, avec toujours "Feuil1" et les 3 feuilles de compta.

Vu que les chambres sont plus ou moins lourdes, on essaie de changer l'agent de secteur grâce à la comptabilité ça nous permet de savoir combien de fois il a été en fonction on le met ailleurs la semaine d'après.

J'utiliserais pas finalement la base de données (plutôt juste lire les agents, rajouter sur la ligne) et avec un rechercheV sur la base de donnée je ferais une suppression automatique si pas AS ni IDE...

Je ne sais pas si je suis clair.

Merci d'avance :)

Un truc de ce style la :

Bonsoir,

EDIT : Après test bouclé ça ne fonctionne pas.

Un test sur le module 6 de ce classeur pour l'ajout de personnel .. Mais je reste dubitatif voir pessimiste sur la maintenabilité de ce genre de fichier .. Peut être qu'un expert du VBA pourra nous donner son avis.

Au passage je souhaitais intégrer le noms de mes objets range un tableau et boucler for i = 0 to 2 suivi d'un for each AGENT in tableau(i) mais je n'y arrive pas car la valeur renvoyée pour tableau(i) me semble de type string.
Vous sauriez si techniquement c'est possible ? Ca m'éviterai d'avoir ce code dégueulasse ...

3agentnewv0-68.zip (448.77 Ko)

Cdlt,

Re,

A tester. Si quelqu'un trouve une optimisation, notamment pour boucler sur les objet LITS_5, LITS_3 et LITS_URG associé à For i = to 2 je suis curieux de connaître la syntaxe.

Sub AGENT()
Dim LITS_5 As Range
Dim DICO As Object
Dim AGENT As Object
Dim FEUILLE As Variant
Dim REFERENCE As Range
FEUILLE = Array("CALCUL SECTO 5LITS", "CALCUL SECTO 3LITS", "CALCUL SECTO URG")
With Worksheets("PLANNING HEBDO")
    Set LITS_5 = Application.Union(.Range("B5:B9"), .Range("E5:E9"), .Range("H5:H9"), .Range("K5:K9"), .Range("N5:N9"), .Range("Q5:Q9"), .Range("T5:T9"), _
    .Range("B16:B20"), .Range("E16:E20"), .Range("H16:H20"), .Range("K16:K20"), .Range("N16:N20"), .Range("Q16:Q20"), .Range("T16:T20"))
    Set LITS_3 = Application.Union(.Range("B11:B14"), .Range("E11:E14"), .Range("H11:H14"), .Range("K11:K14"), .Range("N11:N14"), .Range("Q11:Q14"), .Range("T11:T14"), _
    .Range("B32:B50"), .Range("E32:E50"), .Range("H32:H50"), .Range("K32:K50"), .Range("N32:N50"), .Range("Q32:Q50"), .Range("T32:T50"))
    Set LITS_URG = Application.Union(.Range("B22:B24"), .Range("E22:E24"), .Range("H22:H24"), .Range("K22:K24"), .Range("N22:N24"), .Range("Q22:Q24"), .Range("T22:T24"))
End With
Set DICO = CreateObject("Scripting.Dictionary")
For Each AGENT In LITS_5
    DICO(AGENT.Value) = ""
Next AGENT
DICO.Remove ("")
With Worksheets("CALCUL SECTO 5LITS")
    .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(DICO.Count, 1) = Application.Transpose(DICO.keys)
    .UsedRange.RemoveDuplicates Columns:=Array(1), Header:=xlYes
End With
DICO.RemoveAll
For Each AGENT In LITS_3
    DICO(AGENT.Value) = ""
Next AGENT
DICO.Remove ("")
With Worksheets("CALCUL SECTO 3LITS")
    .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(DICO.Count, 1) = Application.Transpose(DICO.keys)
    .UsedRange.RemoveDuplicates Columns:=Array(1), Header:=xlYes
End With
DICO.RemoveAll
For Each AGENT In LITS_URG
    DICO(AGENT.Value) = ""
Next AGENT
DICO.Remove ("")
With Worksheets("CALCUL SECTO URG")
    .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(DICO.Count, 1) = Application.Transpose(DICO.keys)
    .UsedRange.RemoveDuplicates Columns:=Array(1), Header:=xlYes
End With
DICO.RemoveAll
For Each FEUILLE In FEUILLES
    With Worksheets(FEUILLE)
        Set SEMAINE = .Rows(1).Find(What:="S" & Worksheets("Feuil1").Range("D1").Value)
        LAST_R = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)).Copy .Cells(2, SEMAINE.Column + 1)
        .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)) = .Range(.Cells(2, SEMAINE.Column), .Cells(LAST_R, SEMAINE.Column)).Value
    End With
Next
Worksheets("Feuil1").Range("D1").Value = Worksheets("Feuil1").Range("D1").Value + 1
End Sub

Cdlt,

5agentnewv0-68.zip (445.84 Ko)

Re merci de t'être cassé la tête, je voulais sur un fichier séparer comme celui que je t'ai envoyer pour éviter cette prise de tête...

Je pense que les ranges on peut les nommer pour permettre une meilleurs lisibilité.

La stratégie était au moment d'archiver le fichier de l'ajouter au workbook contenant "le planning avec les agents", et les 3 feuilles de compta.

Mon fichier avait déjà bien changé :

le fichier de base avec tout pour gérer le personnel et le planning :

10agentnewv069.zip (372.06 Ko)

et le fichier pour la compta qui est diffèrent pour éviter la lourdeur et être changé chaque année :

si on considère qu'il est vierge et débuterait la semaine 1, il ajouterais les agents au fur et à mesure qu'ils sont présent sur le planning et les comptabiliserais au fur et à mesure en fonction de leurs position sur le planning sans utiliser "agentnew" qui devrait rester un fichier à part pour éviter tout problème.

Ma question il y a une possibilité sur le fichier calculchambre2021 qu'a chaque nouveau planning ajoute le nom des agents sur les colonnes des feuilles de compta ?

Ce que je ne sais pas faire :

- vérifier les noms des agents sur le planning et les mettre sur les colonnes de chaque feuille de compta

- calculer combien de fois ils sont sur la sectorisation

Ce que je sais faire :

- changer la planification chaque semaine sur le document "calculchambre"

Qu'est ce que tu en penses ?

Bonsoir,

C'est faisable mais gérer les 2 WB en tant qu'objet distinct. Je ne comprend cependant toujours pas pourquoi vous cherchez à séparer le personnel par secteur au lieu de le gérer comme une masse unique. Si le résultat est 0 sur l'ensemble de la plage alors il n'a jamais été affecté peut être identifiable aisément via MEFC.
Les ranges peuvent difficilement être nommées étant donné que tu as des columns qui ne sont pas des agents mais des chiffres ou des fonctions.

Vous complexifiez grandement votre fichier et aurez de plus en plus d'effets de bords avec des difficultés pour réaliser la maintenance.

La formule pour comptabiliser les occurrences vous avait été donné précédemment, elle ne change pas.

Rechercher des sujets similaires à "calculer occurence criteres"