mettre des valeurs booléennes vba excel - VB/VBA/VBS - Programmation
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
Marsh Posté le 08-06-2009 à 11:54:55
http://forum.hardware.fr/hfr/Progr [...] 3354_1.htm
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