répétition de noms dans un planning - VB/VBA/VBS - Programmation
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
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?
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.
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?
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, "" ) |
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.
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...
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?
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