Optimisation et simplification code (vb6)

Bonjour à tous !

J’avance petit à petit dans le développement (en VB6) de mon petit programme de suivit des activités.
[Voici une petite capture d’écran : img15.hostingpics.net…

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 = ""
        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("AjoutKMVehicule" & 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 
        Next aa

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 “dynamique” en fonction du contenu de fichiers csv.
Par exemple :


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

A des fins de simplifications, je n’ai pas copié ici les définitions des caractéristiques width, , left, visible etc …

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 !
Edité le 10/08/2013 à 22:27

Bonjour,

Peux-tu améliorer la présentation de ta question, STP ?

  • mettre toutes les portions de code entre des balises [ code ] [ /code ]
  • une image plus claire (parce que 165x99 c’est trop petit)
  • préciser l’intitulé des champs (colonnes) qui composent ton fichier CSV
  • préciser le langage (tu aurais dû mettre un tag). Ca ressemble à du VB.Net mais c’est à toi de le confirmer

Aussi, si tu indiquais l’objectif de ton programme, ça aiderait à comprendre l’utilité et ainsi te donner les conseils les plus appropriés pour l’usage désiré. Pour ce que j’ai compris, il s’agit d’une interface pour consigner l’activité d’agents municipaux ou de personnel de la DDE.

Remarques supplémentaires :

  • tu as choisi de coder avec des noms de variables en français… je vais pas détailler ma critique mais pour l’avenir, pour tes prochains projets, ça peut valoir le coup de te poser la question sur l’emploi de l’anglais.
  • tous tes noms de variables sont écrits en minuscules. C’est une horreur à lire car il faut fournir un effort supplémentaire pour identifier la séparation entre chaque mot. Par convention, on met généralement en majuscule la 1ère lettre de chaque mot composant le nom de la variable. Ex: ligneAgent, ajoutAgent, etc. Dans le cas d’une variable comme “ajoutlignesiaet”, je ne sais pas si le “s” appartient à “ligne” où s’il est l’initiale de qqch comme semblent l’être les lettres “iaet”.

Bonjour Jaidee et merci de t’interesser à mon problème.

Je viens d’éditer mon post pour le rendre plus visible en fonction de tes recommandations.
Je referai une capture d’écran dès demain. J’ai du me trompé en copiant le code fourni par le site : j’ai sans doiute pris le code d’une vignette au lieu de l’image “normale”

Tu voudrais que je précise les intitulés des colonnes de quel fichier CSV ?

Comme tu l’as deviné il s’agit d’une “interface” de saisie simplifie des activité d’équipes d’une grande collectivité territoriale.

Par contre, je n’ai pas changé le noms de mes variables pour passer en anglais. D’une part ça m’obligerai à revoir tout mon projet, et d’autre part, je ne me sens pas assez “bien” en anglais pour ne pas me mélanger les pinceaux en nomant mes variables en anglais. lol
Mais c’est une idée que je retiens pour mes futurs projets :wink:
Edité le 10/08/2013 à 22:29

Avec un peu de retard, voici donc une capture d’écran un peu plus large et plus visible.
http://img15.hostingpics.net/thumbs/mini_823925siaet.jpg

Quelqu’un se sent capable de m’aider à optimiser ce bout de code ?
Merci d’avance pour votre aide :wink:

1ère remarque : sur ton interface, tu as utilisé 2 fois “divisable” qui n’existe pas dans le dictionnaire. C’est “divisible”)

2ème remarque : tu as utilisé des noms de variables comme “a”, “t”, “l”, “v”, “aa”, “tt”, “ll”, “vv”. Ces noms ne sont pas parlants. Ici, sur ce forum, pour cette question que tu as posé, on explore un morceau de code assez court donc c’est gérable (mais chiant). En revanche, pour toi-même quand tu auras oublié ou pour qq’un d’autre qui devra faire des retouches dans ton code, c’est impossible à gérer, surtout compte tenu que tu n’as mis aucun commentaire. Il faut donc utiliser des noms de variables plus explicites. Exemples:
aa => agentActuel
a => nombreTotalAgents
tt => tacheActuelle
t => nombreTotalTaches
etc.

Voici ton code modifié :

Dim agentActuel As Integer
Dim tacheActuelle As Integer
Dim localisationActuelle As Integer
Dim vehiculeActuel As Integer

Dim nombreTotalAgents as Integer
Dim nombreTotalTaches as Integer
Dim nombreTotalLocalisations as Integer
Dim nombreTotalVehicules as Integer

Dim presenceVehicule as Integer


'Ajout Ligne. Methode actuelle (à revoir) : 1 ligne par agent et redondance des infos "tache", "localisation", "vehicule" qui sont répétées inutilement pour chaque agent
For agentActuel = 1 To nombreTotalAgents
    
    'Texte de la ligne à ajouter. Si cette ligne reste vide, rien ne sera ajouté
    AjoutLigneSIAET = ""
    
    'Variable indiquant la présence d'un véhicule.
    presenceVehicule = 0
    
    If Controls("AjoutAgent" & agentActuel).Value = 1 Then
      AjoutLigneSIAET = Text1.Text & ";" & Controls("AjoutAgent" & agentActuel).Caption
      Controls("AjoutAgent" & agentActuel).Value = 0

      For tacheActuelle = 1 To nombreTotalTaches
        If Controls("AjoutTache" & tacheActuelle).Value = True Then
        AjoutLigneSIAET = AjoutLigneSIAET & ";" & Controls("AjoutTache" & tacheActuelle).Caption
        End If
      Next tacheActuelle
      
        For localisationActuelle = 1 To nombreTotalLocalisations
          If Controls("AjoutLocalis" & localisationActuelle).Value = 1 Then
            AjoutLigneSIAET = AjoutLigneSIAET & ";" & Controls("AjoutLocalis" & nombreTotalLocalisations).Caption& & ";" & Controls("AjoutQteLocalis" & localisationActuelle).Text
          End If
        Next localisationActuelle
        
          For vehiculeActuel = 1 To nombreTotalVehicules
            If Controls("AjoutVehicule" & vehiculeActuel).Value = 1 Then
              presenceVehicule = 1
              AjoutLigneSIAET = AjoutLigneSIAET & ";" & Controls("AjoutVehicule" & vehiculeActuel).Caption & ";" & Controls("AjoutKMVehicule" & vehiculeActuel).Text
              Controls("AjoutVehicule" & vehiculeActuel).Value = 0
            End If 
           Next vehiculeActuel
           
            If presenceVehicule = 0 Then
              AjoutLigneSIAET = AjoutLigneSIAET & ";" & ";"
            End If 
    End If
    
    If AjoutLigneSIAET <> "" Then
    MsgBox AjoutLigneSIAET
 
    End If 
Next agentActuel

3ème remarque : là, c’est un point de détail, mais c’est toujours bon à préciser… Tu as bien transformé tes noms de variables pour mettre une majuscule à la 1ère lettre de chaque mot. C’est bien comme ça qu’il faut faire à une subtilité près : on ne met pas de majuscule sur le 1er mot. La majuscule sur le 1er mot est plutôt utilisée pour les classes (en prog. orientée objet).

4ème remarque : toujours sur le nommage des variables… tu as nommé “IsVehicule” une variable. Quand on utilise “is” quelque part, c’est vraiment dans le sens du verbe “être” et pas juste indiquer une variable booléenne. Dans le contexte de ton programme, ta variable serait mieux nommée si tu l’appelais “HasVehicule”. Ou quitte à rester dans l’emploi du français : “presenceVehicule”.

C’est pourtant ce que tu vas faire ! :wink:

Au lieu d’avoir 2 lignes, ceci doit être enregistré sur 1 seule ligne. Idéalement, ca se construirait dans une base de données, mais bon… tu travailles avec des fichiers alors on va continuer avec des fichiers.

Sur chaque ligne, tu sépares les champs par un point-virgule. Mais à l’intérieur d’1 champs tu peux mettre plusieurs informations. Il faut juste que tu décides d’un “séparateur”. En reprenant ton exemple :

06/08/2013;DURAND Michel#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

Voici donc à quoi ça ressemblerait :

06/08/2013;DURAND Michel#MARTIN Jean;enrobé;rue de l'église#rue des menhirs#rue nationale;2;721atl51#4514SB08#KAF008#1990SB08#428SJ08;((8/2)/(2+1+3))*2=1.33;mélange béton#ciment#platre#caramel;((3/2)/(2+1+3))*2=0.5#2+2=4#6*7=carambeu#a+b=c

Edité le 12/08/2013 à 12:06

…et voilà la gueule que ça aurait (avec la coloration syntaxique et l’indentation, c’est mieux :stuck_out_tongue: ) :

Dim agentActuel As Integer
Dim tacheActuelle As Integer
Dim localisationActuelle As Integer
Dim vehiculeActuel As Integer

Dim nombreTotalAgents as Integer
Dim nombreTotalTaches as Integer
Dim nombreTotalLocalisations as Integer
Dim nombreTotalVehicules as Integer

Dim listeAgents as String
Dim listeTaches as String
Dim listeLocalisations as String
Dim listeQuantiteLocalisations as String
Dim listeVehicules as String
Dim listeKilometrage as String


'Ce séparateur permet de lister plusieurs éléments dans 1 seul champ en les "séparant"
'Exemple : Mme Dupont#Mr Durand#Mme Martin
Dim strSeparateur as String
strSeparateur = "#"

'Liste des agents
For agentActuel = 1 To nombreTotalAgents
    If Controls("AjoutAgent" & agentActuel).Value = 1 Then
        listeAgents = listeAgents & strSeparateur & Controls("AjoutAgent" & agentActuel).Caption
    End If
Next agentActuel

'Liste des tâches
For tacheActuelle = 1 To nombreTotalTaches
    If Controls("AjoutTache" & tacheActuelle).Value = True Then
        listeTaches = listeTaches & strSeparateur & ";" & Controls("AjoutTache" & tacheActuelle).Caption
    End If
Next tacheActuelle

'Liste des localisations 
For localisationActuelle = 1 To nombreTotalLocalisations
  If Controls("AjoutLocalis" & localisationActuelle).Value = 1 Then
    listeLocalisations = listeLocalisations & strSeparateur & Controls("AjoutLocalis" & nombreTotalLocalisations).Caption
    listeQuantiteLocalisations = listeQuantiteLocalisations & strSeparateur & Controls("AjoutQteLocalis" & localisationActuelle).Text
  End If
Next localisationActuelle

'Liste des véhicules
For vehiculeActuel = 1 To nombreTotalVehicules
    If Controls("AjoutVehicule" & vehiculeActuel).Value = 1 Then
        listeVehicules = listeVehicules & strSeparateur Controls("AjoutVehicule" & vehiculeActuel).Caption 
        listeKilometrage = listeKilometrage & strSeparateur & Controls("AjoutKMVehicule" & vehiculeActuel).Text
    End If 
Next vehiculeActuel

'On teste s'il y a des données à enregistrer
If Len(listeAgents & listeTaches & listeLocalisations & listeQuantiteLocalisations & listeVehicules & listeKilometrage) > 0 Then 

    'On enlève le séparateur qui se trouve avant le 1er élement de chaque liste
    listeAgents = Right(listeAgents, Len(listeAgents) - Len(strSeparateur))
    listeTaches = Right(listeTaches, Len(listeTaches) - Len(strSeparateur))
    listeLocalisations = Right(listeLocalisations, Len(listeLocalisations) - Len(strSeparateur))
    listeQuantiteLocalisations = Right(listeQuantiteLocalisations, Len(listeQuantiteLocalisations) - Len(strSeparateur))
    listeVehicules = Right(listeVehicules, Len(listeVehicules) - Len(strSeparateur))
    listeKilometrage = Right(listeKilometrage, Len(listeKilometrage) - Len(strSeparateur))
    
    'On met tout bout à bout avec un point-virgule entre chaque
    AjoutLigneSIAET = listeAgents & ";" & listeTaches & ";" & listeLocalisations & ";" & listeQuantiteLocalisations & ";" & listeVehicules & ";" & listeKilometrage
End If

ATTENTION : j’ai juste fait ça dans Notepad++ sans tester (et puis j’ai oublié de mettre les matériaux). Donc il n’est pas impossible qu’une erreur se soit glissée au milieu. Mais je pense que ça doit te donner une bonne idée du truc.
Edité le 12/08/2013 à 12:45

Milles merci de te pencher sur mon casse tête !
Je commencerai par répondre à quelques une de tes remarques :

  • Pour isVehicule, c’est une faute de frappe de ma part quand j’ai commancé à coder : j’ai voulu mettre sivéhicule, mais mes doigts se sont emmélés, et comme j’ai continué à codé de la sorte, je n’ai pas tout recorrigé. Ceci dit, je prend bonne note de ta remarque (ne pas utiliser is quelque chose) pour la poursuite de mon programme :wink:

  • J’ai également corrigé ma GROSSE faute de français sur “divisible” et non pas “divisable” ! mdr lol merci de cette correction ! lol

  • Je vais également m’atteler à mettre des commentaires dans le code pour mieux identifier les variables, ainsi qu’a ne mettre de majuscule qu’a partir du 2ème mot qui compose le nom de mes variables.

  • Je ne travaille pas en base de données, d’une part parce que je n’y connais pas grand chose en programmation, et d’autre part, parce que les données écrites dans le fichier CSV devront être lues par excel.
    Cependant, s’il est possible de passer par une base de données et de traiter les données sous Excel (comme expliqué ci-après), je suis ouvert à toutes les solutions !
    Ceci m’ammène à ma dernière (et plus gènante) réponse :
    Je ne peux pas assembler plusieurs varaible dans un même champ :
    En effet, la variable ajoutLigneSIAET sera écrite dans un fichier CSV.
    Ce même fichier CSV pourra être ouvert sous Excel d’où on pourra appliquer des filtres, faire des calculs etc…
    Par exemple en ne mettant qu’un seul nom par champ, je pourrais retrouver quels sont les derniers travaux effectués par un agent, où encore quand est-on intervenu pour la dernière fois en surveillance réseau sur une localisation donnée etc …
    Pour cela, je dois travailler dans un fichier CSV, et n’avoir qu’une donnée par champ :’( A moins qu’il y ait une autre solution, je suis ouvert à toutes améliorations !
    Et c’est là dessus que je me casse la tête depuis plusieurs jours !
    Edité le 12/08/2013 à 13:51

Je vois 2 sujets qui se côtoient :

  1. modélisation des données : c’est la raison pour laquelle j’ai parlé de base de données. Mais c’est aussi gérable en Excel. Le problème c’est que tu relies un nombre indéfini d’Agents à un nombre indéfini de lieux et un nombre indéfini de voitures… En gros, c’est le bazaar. Pour l’instant tu fais le choix de créer une nouvelle ligne par agent et de répéter les informations de lieu, véhicule, etc. C’est un choix arbitraire. Et il serait aussi arbitraire de créer une nouvelle ligne pour chaque couple agent-véhicule ou chaque triplet agent-lieu-véhicule, ou chaque quadruplet, quintuplet…

note intermédiaire : il serait bien de savoir si plusieurs activités doivent être stockées dans un même CSV et si tu souhaites ainsi consulter plusieurs activités à travers Excel.

Au niveau modélisation, je pense qu’il y a 2 choix idéaux qui répondent à des objectifs différents :

  • tout regrouper sur 1 ligne comme montré dans mon message précédent.
  • tout exploser et soit multiplier les lignes soit multiplier les fichiers (mais je laisserai les multiples fichiers de coté car visiblement pas en phase avec ton cadre de travail).

Par “tout exploser”, j’entends que si tu as 6 informations, chaque sextuplet d’information représentera une nouvelle ligne. Du coup, si tu as 2 agents et 3 lieux, tu te retrouveras avec 6 lignes. Et si tu as 2 agents, 3 lieux, 2 véhicules, 5 tâches, tu te retrouveras avec 60 lignes.

Perso, il me semble mieux de tout regrouper sur 1 ligne et ensuite de faire du post-traitement dans Excel. Ce qui m’amène au 2ème point…

  1. Quelle utilisation d’Excel ? Si tu comptes juste “ouvrir” le fichier CSV et ensuite faire tes filtres à la main, tu vas avoir quelques soucis, même avec ton format de CSV actuel car tu vas te retrouver avec plusieurs adresses ou plusieurs véhicules sur une même ligne. Avec mon format, tu auras exactement le même problème sauf que tu pourras stocker plusieurs lieux, matériaux, etc.

Mais je te rassure quand même: Excel sait faire du filtrage et tu n’as pas seulement l’option de “filtre=valeur” mais aussi de “filtre contient valeur”.

Ce qui serait mieux (a mon avis), serait de charger le CSV dans une feuille et de créer une interface de consultation dans une autre feuille avec des macros toutes prêtes (ou des formules) qui correspondent à des infos consultées régulièrement. Par exemple, tu peux avoir des listes déroulantes avec “Date Min”, “Date Max”, “Agent”, et des champs texte pour “quantité min”, “quantité max”.

Ca nécessitera de programmer en VBA (un langage sympa) et ça te prendra certainement un peu de temps… à voir avec tes impératifs pour créer ton interface. Mais ça te sera certainement bénéfique car Excel est un outil extraordinaire où il y a pas mal de choses à apprendre. Et sur le plan professionnel, être doué en Excel peut faire une énorme différence.

Leçon avancée n°1 en Excel-VBA: si tu utilises “Select” ou “Activate”, il est probable (à 95%) que tu fais mal les choses.

PS: si tu fais du Excel-VBA, essaie d’avoir une version anglophone d’Excel sinon VBA va compiler à partir d’une syntaxe francophone pour ses mots-clés… Pas standard quand on a pris ses habitudes sur d’autres langages de programmation, et comme c’est pas standard, ça rendra beaucoup plus difficile d’obtenir de l’aide en ligne.
Edité le 12/08/2013 à 14:54

Ta solution de combiner plusieurs données dans une même colone me plait beaucoup, mais je ne pense pas qu’elle puisse être retenue.
Sans vouloir faire de baratin ni de roman, je vais essayer d’expliquer le pourquoi du comment de la création de ce petit programme :
Les élus qui “dirigent” ma collectivité souhaitent mettre en place un suivi informatique des tâches réalisées par les équipes dans plusieurs buts :

  • Pouvoir estimer la proportion et le cout de chaque activité
  • Retrouver quel agent à fait quels travaux et quand.
  • Pouvoir “facturer” les interventions dûes par exemple à des accidents de la circulation ou à du vandalisme.

Pour cela, plusieurs progiciels existants ont été testés (TRUST, GIMA etc …) mais leur cout, la complexité de leur mise en place et de leur maintenance étant bien trop élevées j’ai été chargé de “concevoir” et de mettre en place ce nouvel “outil” . Je précise que je n’ai que des connaissances de base en informatique, je suis un technicien de terrain, pas dans l’informatique. Je connais bien Excel et Calc, mais je n’y connais rien en programmation (jusques quelques notions en Quick Basic qui date de 1998)
Outre les objectifs cités ci-dessus la simplicité d’utilisation (saisie et exploitations des données) est primordiale.
En effet, les personnes (au nombre de 6) qui vont utiliser cette “application” n’ont que peu de connaissance en informatique, et doivent pouvoir l’utiliser à l?issu d’une simple petite formation qui en expliquera le fonctionnement.
De même, les personnes (cadres et élus) qui vont exploiter les données issues de ce logiciel, doivent pouvoir le faire avec leur notions d’informatique (Excel par exemple) (pas le temps de leur faire suivre une formation).
Ils souhaitent faire des graphiques des couts des activités, calculer le temps passer sur chaque tâche, retrouver qui a fait quoi et quand etc …
Ma collectivité n’étant pas certaine de continuer a vouloir acheter des licences Excel, il m’est également demandé de rendre mon projet compatible avec openoffice voire même avec Linux (histoire de bien compliquer les choses).

C’est pour toutes ces raisons que je me suis tourné vers la programmation d’un petit logiciel en VB6 : je crois savoir qu’il est possible de compiler un projet VB6 pour être compatible sous Linux.


[quote=""] si tu as 2 agents, 3 lieux, 2 véhicules, 5 tâches, tu te retrouveras avec 60 lignes. [/quote] Oui, ton calcul est exact, mais en général, une équipe (peu importe le nombre d'agents) intervient pour 1 seule tâche, dans 3 lieux diffférents maximum, avec 1 seul véhicule. Par contre c'est avec les matériaux que ça risque d'ajouter des lignes ...