IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Algorythme d'ordonnancement des traitements


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut Algorythme d'ordonnancement des traitements
    Bonjour,

    J'essaye de concevoir une solution à un pb d'ordonnancement classique, mais je n'y arrive pas. Je me dis que peut-être il existe un outil EXCEL qui fait ça. A défaut qq pourrait me donner une idée.
    Je m'explique:
    J'ai un feuillet EXCEL avec une colonne A qui contient des noms de traitement. Les colonne B, C, D contiennent aussi des noms de traitement qui sont des prédécesseurs obligés du traitement de la colonne A. Il faut que j'en déduise l'ordre des traitements à éxécuter. Pas si simple...
    Il y a plusieurs centaines de traitements (ce sont des chargements de tables) ce qui rend difficile une solution manuelle. De plus c'est en cours de développement donc ça va bouger...

    Quelqu'un a t-il une idée?

    Cordialement

    Christian

  2. #2
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Bonjour,

    Attention, je raisonne... Je ne dis pas avoir la solution :
    A chaque traitement j'affecte un niveau dans un tableau/liste VBA à 2 dimensions.

    exemple :
    Niveau 0 faire la liste des courses
    Niveau 1 vérifier dans le frigo
    Niveau 2 prendre un sac de course
    Niveau 3 prendre des sous
    Niveau 4 faire les courses

    Si je dois faire les courses, il me faut faire appaitre tous les niveaux inférieurs jusqu'à ce que niveau = 0

    C'est peut-être simpliste.

    Dans la même idée et dans la deuxième dimension, tu peux indiquer le prédécesseur directement. Sans prédécesseur indiqué, on considérera la recherche terminée.

    Bertrand

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut ordonnancement des traitements
    Je ne comprend pas trop vos réponses.
    Mon but est d'obtenir la liste des traitements dans le bon ordre; c'est très compliqué, même à la main.
    Ci-joint en exmple mon fichier qui est en cours de construction. A terme il devrait avoir 3 fois plus de lignes.
    Au final je voudrais avoir l'enchainement des traitements qui tient compte de toutes les contraintes. Il peut y avoir plusieurs chaines si celles-ci sont indépendantes.

    Amicalement

    Christian
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 352
    Par défaut
    Citation Envoyé par Mikadox Voir le message
    Il peut y avoir plusieurs chaines si celles-ci sont indépendantes.
    Ce que tu appelles une chaîne sont "des enchaînements de traitements" ? Tu donnes le traitement et le programme te sort tous ces prédécesseurs, jusqu'à l'ancêtre le plus lointain ?

    Mon idée était d'associer un traitement à son prédécesseur immédiat. Le prédécesseur étant lui même considéré comme un traitement... etc ... Pour remonter jusqu'à un traitement sans prédécesseur et conserver trace de l’enchaînement.

    J'ai commencé un bout de code pour charger les éléments dans ma liste à deux dimensions :
    T(x,1) --> c'est le traitement
    T(x,2) --> c'est le prédécesseur immédiat

    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
    Dim i As Integer
    Dim longueur As Variant
     
    ' compte le nombre de références de traitements présents en colonne C
    With Sheets("Ordonnancement")
        longueur = .Range("C" & Rows.Count).End(xlUp).Row
    End With
     
    ' création d'une liste à deux dimensions
    ReDim T(longueur - 1, 2) As String
     
    ' remplissage de la liste sur les deux dimensions
    For i = 2 To longueur
        T(i - 1, 1) = Sheets("Ordonnancement").Cells(i, 3).Value
        T(i - 1, 2) = Sheets("Ordonnancement").Cells(i, 7).Value
    Next
    Il faudrait continuer :
    1. Entrer une variable via une listbox pour définir le traitement sur lequel on fait des recherches (cela évite les erreurs de saisie, la correspondance des termes doit être précise).
    2. Faire une boucle : tant que la deuxième dimension de la liste n'est pas vide, chercher le prédécesseur

    Bertrand

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    Merci pour ton aide.
    En fait le pb est un peu différent; il ne s'agit pas à partir d'un traitement donné de remonter la liste des prédécesseurs. Il faut que tous les traitements soient éxécutés dans un ordre adéquat.
    Tu vas comprendre quand je vais te dire de quels traitements il s'agit.
    Il s'agit de construire une base de données cible à partir d'une base de données source.
    Les traitements sont des chargements de tables; quand on charge une table, on va chercher certaines données dans une table préexistante ou bien on fait un contrôle d'existence (dans des tables cibles). Cela implique qu'on charge les tables dans le bon ordre; pour prendre un exemple bateau, la table commande contenant le code client doit être chargée après la table client.

    Je crois que le pb excède mes capacités (et aussi le temps que j'ai).
    J'espérais que qq'un me dise "j'ai un fichier EXCEL qui fait presque ça!".
    On peut rèver...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 35
    Par défaut
    Bonjour,

    j'essaye de faire le truc à la main,mais grosse galère.
    Je rappelle le pb:
    J'ai une liste de traitements en A; dans les colonnes B à F, j'ai de 0 à 5 prédécesseurs obligés qui sont eux aussi des traitements (les mêmes qu'en A). Je dois en déduire un ordre des traitements de manière que chaque traitement s'exécute bien après que les traitements prédécesseurs aient passé.

    Grosse galère car si je déplace une ligne pour respecter une contrainte, j'en viole 2 autres...

    Qq'un at-il déja rentré ce cas?

    Cordialement

    Mikadox

Discussions similaires

  1. [Conception] Optimisation des traitements de variable
    Par nebil dans le forum PHP & Base de données
    Réponses: 43
    Dernier message: 18/08/2006, 21h22
  2. [FORMS6i]Ordonnancement des blocs
    Par MomoZeAsticot dans le forum Forms
    Réponses: 2
    Dernier message: 26/07/2006, 16h49
  3. [C++/VB.Net]Optimiser des traitements lourds
    Par NiamorH dans le forum Windows Forms
    Réponses: 8
    Dernier message: 28/05/2006, 10h03
  4. Un Gif animé qui ne se fige pas lors des traitements ?
    Par delphi+ dans le forum Composants VCL
    Réponses: 11
    Dernier message: 18/03/2006, 10h31
  5. Cout des traitement PHP
    Par emathieu13 dans le forum Langage
    Réponses: 10
    Dernier message: 11/03/2006, 23h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo