répétition de noms dans un planning

répétition de noms dans un planning - VB/VBA/VBS - Programmation

Marsh Posté le 28-05-2009 à 09:44:22    

Bonjour forum,
Je réalise un planning sous excel et j'ai un petit soucis:
Les agents sélectionnés selon mes critères et inscrits dans mon planning se répètent d'une activité à l'autre. Or un agent ne peux faire qu'une activité par jour.
Voilà mon code réalisé pour la première activité. J'ai 7 activités en tout mais le code est le même.  
 
Quelqu'un peut m'aider?

Sub Nom_FIP_1(w() As String)
 
Dim v As Byte, c As New Collection, x As Integer, y() As Variant, z() As Variant, i As Byte
 
Randomize
y = Array(16, 17, 18)
z = Array(9, 25, 42)
For i = 0 To 2
    Do While c.Count < 4
        cpt% = cpt% + 1
        If cpt% > MAX_ITER Then
          cpt% = 0
          Exit Do
        End If
        x = Int(y(i) * Rnd + z(i))
        If Cells(x, 3) = 1 And Cells(x, 3).Interior.ColorIndex <> 3 Then
            On Error Resume Next
            c.Add Cells(x, 3).Address, CStr(Cells(x, 3).Address)
            If Err = 0 Then
                On Error GoTo 0
                w(v) = Cells(x, 2).Value
                v = v + 1
            End If
            On Error GoTo 0
        End If
    Loop
    Set c = Nothing
Next i
 
End Sub
 
Sub FIP_AIP_MUSC_1()
 
Dim p As Range, v As Byte, w(12) As String
 
Nom_FIP_1 w
 
For Each p In Sheets("Mois en cours" ).Range("F4:F18" )
    If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
       p.Value = w(0)
       For v = 1 To UBound(w)
           p.Value = p.Value & "/" & w(v)
       Next v
    End If
Next p
 
Nom_FIP_1 w
 
For Each p In Sheets("Mois en cours" ).Range("F19:F34" )
    If p.Interior.ColorIndex <> 6 And IsEmpty(p.Value) Then
       p.Value = w(0)
       For v = 1 To UBound(w)
           p.Value = p.Value & "/" & w(v)
       Next v
    End If
Next p
 
End Sub


Message édité par mgrizzly le 29-05-2009 à 16:25:44
Reply

Marsh Posté le 28-05-2009 à 09:44:22   

Reply

Marsh Posté le 28-05-2009 à 10:10:20    

tu veux dire que ton code est répliqué 7 fois ? Je crois qu'un petit dessin nous aiderait plus qu'un bout de code


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 28-05-2009 à 10:24:56    

Salut jagstang, merci de me répondre.
Je veux dire que le structure est la même 7 fois mais de dans je change ceci

Do While c.Count < 4

,
 
je peux mettre 3 ou 1 à la place car dans mon code je peux choisir le nombre de personnes à affecter dans chaque activité.
 
Le problème c'est que le code, bien qu'il mette une personne dans la première activité ( colonne F) il remet aussi ce nom dans les autres activités (colonne G à L).
 
 Et ceci car mes agents sont sélectionnés ainsi :
ils sont pris si dans le tableau des compétences ils ont un 1 dans l'activité ( 1=compétence, 0=pas de compétences) sauf qu'un agent peut être compétent dans plusieurs activités, c'est pour cela que dans le planning il est remis plusieurs fois.
 
Je voudrais mettre dans le code: si agent déjà sélectionné dans une activité alors passé au suivant jusqu'à en trouvé un qui n'a pas encore été sélectionné.
 
Est-ce plus clair?
 

Reply

Marsh Posté le 28-05-2009 à 21:13:46    

Ajoute une colonne "Déjà sélectionné" dans ton onglet de base de données, par exemple dans la colonne G, lorsque l'agent est affecté à une activité place par exemple la valeur 1 dans la colonne.
Afin d'effectuer ta sélection, rajoute une condition (Sheetx.Range("G" & lignex)) <> 1 dans ton if.

 

N'oublie pas un ClearContents sur la colonne G lorsque tu remets ton planning à jour.


Message édité par Ctplm le 28-05-2009 à 21:14:19

---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 29-05-2009 à 10:30:02    

Merci,Ctplm c'est ce que je cherche à faire, tu ne vois pas comment l'insérer dans mon code précédent?

Reply

Marsh Posté le 29-05-2009 à 15:25:22    

J'aimerais ajouter ce code mais je ne vois pas où.

Cells(x, 11).Value = IIf(Cells(x, 11).Value = "", 1, "" )

Reply

Marsh Posté le 01-06-2009 à 13:50:17    

Il me faudrais une solution pour que les agents ne se répètent pas d'une activité à l'autre.

Reply

Marsh Posté le 02-06-2009 à 09:18:07    


Tu as écrit le code ci-dessus et tu ne vois pas où mettre ta ligne  :??:  
Il faut la mettre quand un agent est sélectionné, tu dois savoir où c'est dans ton code...


---------------
"That kind of information doesn't just grow on trees."
Reply

Marsh Posté le 02-06-2009 à 14:00:59    

Je viens de m'apercevoir que ça ne serait pas possible de cette manière mais une autre idée m'est venue:
utiliser les booleens: ne prendre que les agents qui sont TRUE, quand un agent est sélectionné, il devient FALSE et le programme continu à ne prendre que les agents qui sont TRUE, je n'aurais ainsi plus de problème de répétition.
Par contre je ne sais pas transcrire cela en VBA.
Quelqu'un peut m'aider?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed