Bonjour à tous !
J'avance petit à petit dans le développement de mon petit programme de suivit des activités.
Voici une petite capture d'écran :
Quand l'utilisateur clique sur le bouton "valider et enregistrer", le programme doit "compiler" les renseignements cochés et saisis par l'utilisateur pour les inscrire dans un fichier csv (pour l'instant uniquement inscrit dans un msgbox).
Voici une partie du code que j'ai essayé de réaliser à cet effet :
Petites explications sur les valeurs des variables :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 For aa = 1 To a ajoutlignesiaet = "" isvehicule = 0 If Controls("ajoutagent" & aa).Value = 1 Then ajoutlignesiaet = Text1.Text & ";" & Controls("ajoutagent" & aa).Caption Controls("ajoutagent" & aa).Value = 0 For tt = 1 To t If Controls("ajouttache" & tt).Value = True Then ajoutlignesiaet = ajoutlignesiaet & ";" & Controls("ajouttache" & tt).Caption End If Next tt For ll = 1 To l If Controls("ajoutlocalis" & ll).Value = 1 Then ajoutlignesiaet = ajoutlignesiaet & ";" & Controls("ajoutlocalis" & l).Caption& & ";" & Controls("ajoutqtelocalis" & ll).Text End If Next ll For vv = 1 To v If Controls("ajoutvehicule" & vv).Value = 1 Then isvehicule = 1 ajoutlignesiaet = ajoutlignesiaet & ";" & Controls("ajoutvehicule" & vv).Caption & ";" & Controls("ajouthmvehicule" & vv).Text Controls("ajoutvehicule" & vv).Value = 0 End If Next vv If isvehicule = 0 Then ajoutlignesiaet = ajoutlignesiaet & ";" & ";" End If End If If ajoutlignesiaet <> "" Then MsgBox ajoutlignesiaet End If 'agents. Next aa
a est le nombre total d'agents (comme défini dans l'exemple ci-après),
t est le nombre total de tâches
l ________________ de localisation
v________________ de véhicules
Les checkbox et optionbutton sont créés de façon "dynamique" en fonction du contenu de fichiers csv.
Par exemple :
A des fins de simplifications, je n'ai pas copié ici les définitions des caractéristiques width, , left, visible etc ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 fichier_agents = App.Path & "\liste_agents.csv" Open fichier_agents For Input As #1 a = 0 Dim ligneagent As String Do While Not EOF(1) a = a + 1 Line Input #1, ligneagent Dim nom As String nom = Split(ligneagent, ";")(0) Set ajoutagent = Controls.Add("vb.checkbox", "ajoutagent" & a, Frame_agents) Controls("ajoutagent" & a).Caption = nom
Comme vous l'aurez compris, j'aimerai optimiser et simplifier le 1er code : celui qui lit l'état des objets et qui "construit" la variable ajoutlignesiaet
Comme c'est bien le cas actuellement, cette variable doit être construite comme suit :
date ; nom de l'agent ; tache effectuée ; localisation ; durée ; véhicule ; kilométres
J'ai prévu d'ajouter ensuite les matériaux et leurs quantité
Ca serait simple s'il n'y avait qu'un élément à chaque fois !
Mais là où le code se complexifie, c'est dans l'exemple bidon suivant :
Messieurs Durand et Martin ont fait de l'enrobé dans la rue de l'église pendant 2h, place de la mairie 1h et place des orangers 3h. Ils ont utilisés le véhicule 721 ATL 51 pour 8km et ils ont utilisé 3tonnes de mélange béton
Pour que les données qui seront enregistrées dans le fichier csv soit exploitables, il conviendrait de répercuter les km des véhicules et la quantité des matériaux avec une fameuse réglé de 3 : dans l'exemple ça donnerait :
06/08/2013;DURAND Michel;enrobé;rue de l'église;2;721atl51;((8/2)/(2+1+3))*2=1.33;mélange béton;((3/2)/(2+1+3))*2=0.5
06/08/2013;MARTIN Jean;enrobé;rue de l'église;2;721atl51;((8/2)/(2+1+3))*2=1.33;mélange béton;((3/2)/(2+1+3))*2=0.5
Avec cette méthode, chaque agent aura une saisie identique.
En pratique il pourrait également être possible de grouper les km de véhicule utilisés sur une localisation sur un seul agent. De même que pour les matériaux et leur quantité. Dans l'exemple ça donnerait :
06/08/2013;DURAND Michel;enrobé;rue de l'église;2;721atl51;(8/(2+1+3))*2=2.67;mélange béton;(3/(2+1+3))*2=1
06/08/2013;MARTIN Jean;enrobé;rue de l'église;2;;;;
Le choix de l'une ou l'autre méthode sera en fonction de la faisabilité du code ! lol
Par contre là où ça se complexifie vraiment, c'est si pour une même tache, 2 agents ont utilisés 5 véhicules sur 3 localisations et ont consommé 4 matériaux différents ! J'ose même pas imaginer un code pour "compiler" un tel bordel ! mdr
![]()
Est-ce que quelqu'un qui aurait un bon sens logique et une certaine passion pour les casses-tete aurait une idée de code plus simple et plus optimisé que celui que j'ai créé ?
Merci beaucoup par avance pour votre aide !
Partager