Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Optimisation et simplification d'un bout de code

Aucune réponse
Avatar
cantonnier
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 :
http://img15.hostingpics.net/thumbs/mini_328867siaet.jpg[

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 :
For aa = 1 To a
ajoutlignesiaet = "e;"e;
isvehicule = 0
If Controls("e;ajoutagent"e; & aa).Value = 1 Then
ajoutlignesiaet = Text1.Text & "e;;"e; & Controls("e;ajoutagent"e; & aa).Caption
Controls("e;ajoutagent"e; & aa).Value = 0

For tt = 1 To t
If Controls("e;ajouttache"e; & tt).Value = True Then
ajoutlignesiaet = ajoutlignesiaet & "e;;"e; & Controls("e;ajouttache"e; & tt).Caption
End If
Next tt
For ll = 1 To l
If Controls("e;ajoutlocalis"e; & ll).Value = 1 Then
ajoutlignesiaet = ajoutlignesiaet & "e;;"e; & Controls("e;ajoutlocalis"e; & l).Caption& & "e;;"e; & Controls("e;ajoutqtelocalis"e; & ll).Text
End If
Next ll
For vv = 1 To v
If Controls("e;ajoutvehicule"e; & vv).Value = 1 Then
isvehicule = 1
ajoutlignesiaet = ajoutlignesiaet & "e;;"e; & Controls("e;ajoutvehicule"e; & vv).Caption & "e;;"e; & Controls("e;ajouthmvehicule"e; & vv).Text
Controls("e;ajoutvehicule"e; & vv).Value = 0
End If
Next vv
If isvehicule = 0 Then
ajoutlignesiaet = ajoutlignesiaet & "e;;"e; & "e;;"e;
End If
End If
If ajoutlignesiaet <> "e;"e; Then
MsgBox ajoutlignesiaet

End If 'agents.
Next aa[/code]

Petites explications sur les valeurs des variables :
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 "e;dynamique"e; en fonction du contenu de fichiers csv.
Par exemple :
[code]fichier_agents = App.Path & "e;liste_agents.csv"e;
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, "e;;"e;)(0)
Set ajoutagent = Controls.Add("e;vb.checkbox"e;, "e;ajoutagent"e; & a, Frame_agents)
Controls("e;ajoutagent"e; & a).Caption = nom
[/code]
[I]A des fins de simplifications, je n'ai pas copié ici les définitions des caractéristiques width, , left, visible etc ...[/I]

Comme vous l'aurez compris, j'aimerai optimiser et simplifier le 1er code : celui qui lit l'état des objets et qui "e;construit"e; la variable [I]ajoutlignesiaet[/I]
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
:arf:
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 "e;compiler"e; un tel bordel ! mdr :mouarf:
:arf: :arf:

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 !

Réponses