Ajouter info à partir 2nd onglet
Emma
-
Emma -
Emma -
Bonjour à tous !!
Je me rapproche de vous car j'ai une colle à vous soumettre:
dans le fichier http://cjoint.com/?BJxjHx6ljkm
Sur chaque ligne de l'onglet "database", en colonne K je voudrais indiquer le nom d'un agent indiqué dans l'onglet "list agent" afin que chacun traite une ligne de la database
S'il y a + de lignes dans database que dans list agent, on peut répêter le nom d'un agent plusieurs fois, en essayant toutefois de répartir le plus équitablement possible les lignes de la database.
Toutefois on ne remplit colonne K QUE si la ligne remplit les 2 conditions ci dessous:
- Il faut que colonne I contienne "DLV" ou "Closed" ou "RCV"
-Il faut que colonne H contienne 05K
sinon laisser K vide pour les ligne qui ne remplisent pas ces conditions
(il faudrait que je puisse modifier au quotidien la liste des agent dans "list agent" en fonction des absents, donc le nombre d'agent peut varier chaque jour)
Pour corser un peu, il faudrait que la macro fonctionne sous excel 2000 !
Merci beaucoup d'avance pour votre aide :)
Je me rapproche de vous car j'ai une colle à vous soumettre:
dans le fichier http://cjoint.com/?BJxjHx6ljkm
Sur chaque ligne de l'onglet "database", en colonne K je voudrais indiquer le nom d'un agent indiqué dans l'onglet "list agent" afin que chacun traite une ligne de la database
S'il y a + de lignes dans database que dans list agent, on peut répêter le nom d'un agent plusieurs fois, en essayant toutefois de répartir le plus équitablement possible les lignes de la database.
Toutefois on ne remplit colonne K QUE si la ligne remplit les 2 conditions ci dessous:
- Il faut que colonne I contienne "DLV" ou "Closed" ou "RCV"
-Il faut que colonne H contienne 05K
sinon laisser K vide pour les ligne qui ne remplisent pas ces conditions
(il faudrait que je puisse modifier au quotidien la liste des agent dans "list agent" en fonction des absents, donc le nombre d'agent peut varier chaque jour)
Pour corser un peu, il faudrait que la macro fonctionne sous excel 2000 !
Merci beaucoup d'avance pour votre aide :)
4 réponses
-
J'ajoute que la database peut contenir + ou - de lignes en fonction des jours. :)
Merci d'avance pour votre aide !! -
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-
-
ci joint proposition (attention ta liste d'agents n'auraient pas du comporter de doublons !!!...)
https://www.cjoint.com/?3JxvwWFEoEi
le codeOption 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
-
-
bonjour Emma, Michel,
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. -
Bonjour à tous les deux et merci beaucoup de vos propositions !
Je test ça et vous donne un retour dans la journée !
Encore merci !