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 :)

4 réponses

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

    Merci d'avance pour votre aide !!
    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    1. 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
    2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    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
  4. 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