A voir également:
- Ajouter info à partir 2nd onglet
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Info pc - Guide
- Rouvrir onglet fermé - Guide
- Crystaldisk info - Télécharger - Informations & Diagnostic
- Ajouter un compte gmail - Guide
4 réponses
J'ajoute que la database peut contenir + ou - de lignes en fonction des jours. :)
Merci d'avance pour votre aide !!
Merci d'avance pour votre aide !!
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
Modifié par michel_m le 23/10/2012 à 14:28
Modifié par michel_m le 23/10/2012 à 14:28
Bonjour,
Tu parles de jour, quelle est l'influence des dates inscrites en colonne A dans ton tableau ?
la solution proposée sera en VBA due à un personnel éventuellement insuffisant ....je m'absente, je regarderai en fin d'aprèm ou demain matin
Michel
Tu parles de jour, quelle est l'influence des dates inscrites en colonne A dans ton tableau ?
la solution proposée sera en VBA due à un personnel éventuellement insuffisant ....je m'absente, je regarderai en fin d'aprèm ou demain matin
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 306
Modifié par michel_m le 23/10/2012 à 21:27
Modifié par michel_m le 23/10/2012 à 21:27
ci joint proposition (attention ta liste d'agents n'auraient pas du comporter de doublons !!!...)
https://www.cjoint.com/?3JxvwWFEoEi
le code
https://www.cjoint.com/?3JxvwWFEoEi
le code
Option Explicit Sub Repartir_w() Dim Derlig As Byte, Cptr As Byte, Cptr_d As Byte, num As Byte Dim T_staff, T_hijk, T_libre Dim D_staff As Object Dim Agent As String 'initialisations Randomize Application.ScreenUpdating = False Set D_staff = CreateObject("scripting.dictionary") With Sheets("list agent") 'mémorise la liste des agents Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row T_staff = Application.Transpose(.Range("A2:A" & Derlig).Value) End With With Sheets("database") 'mémorise les critères d'attribution Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row T_hijk = .Range("H2:K" & Derlig).Value End With 'mémorise l'affectation aléatoire d'un agent For Cptr = 1 To UBound(T_hijk) If D_staff.Count = 0 Then ' initialisation au départ ou si il n'y a plus personne de disponible chez les agents _ (nbre des lignes répondant aux critères > nbre agents) For Cptr_d = 1 To UBound(T_staff) If Not D_staff.exists(T_staff(Cptr_d)) Then D_staff.Add T_staff(Cptr_d), "" T_libre = D_staff.keys Next End If If T_hijk(Cptr, 1) = "05K" And _ (T_hijk(Cptr, 2) = "DLV" Or T_hijk(Cptr, 2) = "CLOSED" Or T_hijk(Cptr, 2) = "RCV") Then 'tirage au sort d'un agent num = Int(Rnd * D_staff.Count) Agent = T_libre(num) 'affectation de l'agent T_hijk(Cptr, 4) = Agent 'suppression de l'agent de T_libre D_staff.Remove (Agent) T_libre = D_staff.keys End If Next 'restitue l'affectation des agents Sheets("database").Range("H2:K" & Derlig) = T_hijk End Sub
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 700
23 oct. 2012 à 22:41
23 oct. 2012 à 22:41
bonjour Emma, Michel,
Une proposition par formule seulement :
https://www.cjoint.com/?BJxwLdYPTBT
Sélection des lignes concernées et ventilation des "agents" définis par formule nommée dynamique en fonction du nombre.
Une proposition par formule seulement :
https://www.cjoint.com/?BJxwLdYPTBT
=SI(ET(H2="05K";OU(I2= "DLV";I2="Closed";I2= "RCV" ));DECALER('list agent'!$A$2;MOD(SOMMEPROD((K$1:K1<>"")*1);NBVAL(Agents));0);"")
Sélection des lignes concernées et ventilation des "agents" définis par formule nommée dynamique en fonction du nombre.