Ajouter info à partir 2nd onglet

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 :)
A voir également:

4 réponses

Emma
 
J'ajoute que la database peut contenir + ou - de lignes en fonction des jours. :)

Merci d'avance pour votre aide !!
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
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
0
Emma
 
Bonjour Michel,

Je dis simplement que je me servirai de cette macro tous les jours avec une liste qui diffère en quantité de lignes de database. Les dates n'ont aucune influence dans le tableau pour ce que je souhaite en faire :)

Merci beaucoup !
0
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
ci joint proposition (attention ta liste d'agents n'auraient pas du comporter de doublons !!!...)
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
0
gbinforme Messages postés 15481 Date d'inscription   Statut Contributeur Dernière intervention   4 730
 
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.
0
Emma
 
Bonjour à tous les deux et merci beaucoup de vos propositions !

Je test ça et vous donne un retour dans la journée !

Encore merci !
0