Ajouter info à partir 2nd onglet

Fermé
Emma - 23 oct. 2012 à 09:45
 Emma - 24 oct. 2012 à 09:33
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

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 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
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
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 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
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 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 700
23 oct. 2012 à 22:41
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
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