mettre des valeurs booléennes vba excel

mettre des valeurs booléennes vba excel - VB/VBA/VBS - Programmation

Marsh Posté le 20-05-2009 à 10:16:47    

Bonjour,
Je fais un planning sous excel avec une feuille "compétences" ou le nom des agents sont indiqués ainsi que leurs compétences par activité( notés 1 ou 0 selon si l'agent est compétent ou non dans l'activuté), les agents en congés sont colorés en rouge. J'ai aussi une feuille "mois en cours" avec un calendrier.
Mon code prend les agents dans la feuille "compétences" qui ont un 1 et qui ne sont pas en rouge et les met dans la feuille "mois en cours" sauf dans les cellules jaunes(jours fériés et weekend).
Je peux choisir le nombre d'agent à effecter(il peut y en avoir 9 ou 6 ou 3)dans chaque cellule du planning.
Les agents changent toutes les 15 jours à peut près.
En ligne on a les jours et en colonne les activités prévues.
Tout marche bien jusque là sauf que mon code remet les agents déjà affecter dans la première activité(donc première colonne) dans les autres colonnes.
Mais un agent ne peut pas faire plusieurs activités en même temps.
 
Je voudrais donc si c'est possible mettre des booleens aux agents
et de dire agents au début=false
si agents pris pour mettre dans case alors=true
dans les autres colonne ne prendre que les agents restants qui sont=false
 
Voici mon code pour la première colonne. Dites-moi si vous voulez la suite.
Merci de m'aider.
 
Code:

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[fixed][/cpp]


Message édité par mgrizzly le 20-05-2009 à 10:19:10
Reply

Marsh Posté le 20-05-2009 à 10:16:47   

Reply

Marsh Posté le 08-06-2009 à 11:38:58    

Il me semble que le plus simple est de créer un tableau correspondant au nombre d'agents (avec une instruction redim agents(N)) où agents est un tableau de booleans. Vous l'initialisez à False et passez à True dès que l'agent est affecté...
 
Cela dit je ne suis pas sûr que votre algorithme soit optimum, car vous allez affecter l'agent en priorité sur la première activité où il a la compétence. Mais peut-être que ce n'est pas le bon choix,
Il vaudrait mieux à mon avis procéder en plusieurs temps, notamment en regardant d'abord la liste des agents qui savent faire une activité puis de regarder quelle est la meilleure solution

Reply

Marsh Posté le 08-06-2009 à 11:54:55    


http://forum.hardware.fr/hfr/Progr [...] 3354_1.htm  [:spamafote]


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

Sujets relatifs:

Leave a Replay

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