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 :

VB file de véhicules avec traitements différents


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut VB file de véhicules avec traitements différents
    Bonjour,

    J'espère que je ne pollue pas le forum avec un sujet mal adressé ou déja vu par ailleurs.. je n'utilise pas très souvent ce forum (pas depuis de nombreuses années en fait).

    Mon niveau en code est très basique. Je suis bloqué sur un besoin un peu spécifique (et complexe pour moi), je cherche à modéliser les longueurs de files de véhicules. Et ce sur la base de :
    1 un relevé de flux de véhicule réel
    2 des longueurs de voiries pour accueillir ces véhicules en attente

    Mon problème:

    J'ai un tableau qui reprend des relevés de flux de véhicules en entrée de site industriel.

    Ce tableau est constitué de colonnes, pour chacune desquelles on a saisi le nombre de véhicules par type (col1: x camionBleu, Col2: y camion vert, etc..)
    Les lignes représentent les horaires auxquels ont été effectués ces relevés (ligne 1 de 8 à 8h15, 2, de 8h15 à 8h30 etc)

    Je sais qu'en fonction du type de véhicule, le traitement pour son accès durera tel ou tel temps.
    Ex: un camion bleu, qui est déja venu sur site, devra faire un traitement de 2 minutes pour rentrer
    Un camion bleu qui n'est jamais venu mettra 10 min
    ...

    Dernier paramètre, en fonction du traitement à subir, le camion devra emprunter une voie n°1 ou une voie n°2 pour son traitement.

    Je bute sur la méthode en vb qui me permettrait, dans une boucle existante (qui fait arriver les véhicules et les ajoute à une file) de :
    1-répartir ces véhicules par types sur la base de proportions / pourcentages que je connais. Ex: 80% des camions doivent passer par le traitement A donc je voudrais que les 8 premiers camions soient désignés "A", etc...
    3 rattacher à chaque point d'entrée (en fait, il y en a 2), les véhicules qui vont y passer, de par leurs types.
    4 compter sur chacun de ces points d'entrée, le temps nécessaire au traitement, puis quand le temps de traitement est fini, enlever le véhicule de la file.

    Cela me permettrait derrière, de modéliser le flux entrant / sortant et de noter la longueur de file de véhicules, à chaque itération, (pour récupérer sa valeur max).

    Toute aide est bienvenue, Merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 441
    Par défaut
    Bonjour,
    En gros, si j'ai bien compris, 2 problèmes différents:
    - modéliser l'avancement dans une file,
    - modéliser la répartition des arrivées dans les files.
    Pour commencer, pourriez-vous présenter un exemple de données pour une file (ex: les camions verts déjà venus) et indiquer le résultat attendu.
    Cordialement.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 4
    Par défaut
    Bonjour,

    Sujet toujours en cours..

    Merci pour votre réponse, désolé pour le silence radio, j'avais oublié avoir posé ce post et avais réussi à trouver une solution (de qualité discutable)..

    Oui, il s'agirait de modéliser l'arrivée de véhicules dans une file, compter le délai de traitement (en fonction du type de véhicule) et modéliser les longueurs de files (qui est le vrai but de l'outil, puisque je cherche à dimensionner les longueurs de voiries à construire).

    Pour simplifier le problème, je me suis limité à 1 voie, qui reçoit tous les véhicules, mais pour un outil plus abouti, il serait effectivement intéressant qu'une répartition sur plusieurs files soit faite (mais je me pose la question de la faisabilité).

    Ma vraie première question est quand même de savoir si le VB / excel est un outil qui peut apporter des résultats ok sur ce type de problème, et sinon, quel devrait être l'environnement de développement à utiliser?

    J'ai inséré une pièce jointe pour illustrer;
    Par exemple en ligne 18, 2 camions "expédition" arrivent sur la période (8h15 à 8h30),
    Chacun de ces camions a un traitement de 20min par exemple, donc sur cette période, la file doit arriver à un total de 2 longueurs de camions = 30m env,
    la ligne suivante, un autre camion arrive (45m), mais après les 20min de traitement du premier camion la file revient à 30m de long etc..

    même principe si 1 camion Matière D. arrive, pour lui le traitement sera par exemple de 5 minutes...

    Cordialement,
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 441
    Par défaut
    Bonjour,

    Problème intéressant. Je ne vois pas mieux que Excel pour le traiter.
    A mon avis, il faudrait 2 types de données supplémentaires pour y répondre: pour chaque type de véhicule 1) les temps de traitement, 2) leur longueur de file (15 m pour les PL, ? pour les VL).
    Le 1er véhicule qui arrive, entre-t-il dans la file ou est-il traité immédiatement (hors file d'attente)?
    Je n'ai pas compris ce qu'était les moy/min.
    Les PL et VL vont-ils dans la même file, ou dans au moins 2 différentes?
    Un véhicule en file d'attente peut-il en "dépasser" un autre. Exemple: 1 PL Matières D arrive dans une file avec 2 PL Expédition. Entre-t-il dans la file, ou va-t-il en traitement directement?

    Cordialement.

  5. #5
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 441
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 441
    Par défaut
    Bonjour,
    Une exemple de simulation en attaché.
    Il ne traite que les PL (colonnes J à N) qui iraient tous dans la même file, chacun étant traité dans l'ordre d'arrivée.
    Il est supposé qu'il n'y a pas plus de 15 PL qui arrivent par quart d'heure (et aucun contrôle dans le code).
    La simulation s'effectue de la façon suivante:
    - prendre les données quart d'heure pour les inscrire en minute par minute
    - dans le quart d'heure mélanger les ordres et minutes d'arrivée
    - toutes les arrivées étant entrées, calcul des longueurs de file et des heures de sortie
    - enregistrement des longueurs de file de la journée simulée
    - passer à la journée suivante.
    Cela avec VBA:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    Option Explicit
     
    Sub Simulatio()
       Dim i As Long
       ActiveWorkbook.Worksheets("Test").Select
       Range("M3:Q843").ClearContents                        '--- vider tableau des files
       For i = 0 To 4
          Simulation_Jour i
          Range(Cells(3, 13 + i), Cells(843, 13 + i)).Value = Range(Cells(3, 9), Cells(843, 9)).Value
       Next i
    End Sub
     
    '--- pas plus de 15 véhicules sur 15 minutes
    Private Sub Simulation_Jour(i As Long)
       Dim kCS As Long, kRS As Long, shStat As Worksheet
       Dim kCT As Long, kRT As Long, shTest As Worksheet
       Dim kC As Long, kR As Long, j As Long, k As Long, n As Long
       Randomize
       Set shStat = ActiveWorkbook.Worksheets("Stat")
       Set shTest = ActiveWorkbook.Worksheets("Test")
       shTest.Range("C3:E843,G3:I843,F844:I900").ClearContents  '--- vider plages calculs
       kCS = 9
       kRS = 7 + 56 * i
       kCT = 2
       kRT = 3
       '--- les arrivées
       With shStat
          For kR = 1 To 56        '--- 9h*4 = 56 quarts d'heure par jour
             '--- ajouts données "dans l'ordre"
             For kC = 1 To 5      '--- types différents de véhicules
                n = .Cells(kRS + kR, kCS + kC)
                If n > 0 Then
                   For j = 1 To n
                      shTest.Cells(kRT, kCT + 1) = .Cells(4, kCS + kC)
                      shTest.Cells(kRT, kCT + 2) = .Cells(5, kCS + kC)
                      shTest.Cells(kRT, kCT + 3) = .Cells(6, kCS + kC)
                      kRT = kRT + 1
                   Next j
                End If
             Next kC
             '--- rendre l'ordre d'arrivée aléatoire dans le quart d'heure
             kRT = 3 + (kR - 1) * 15 '--- ligne début quart d'heure
             For k = 0 To 14
                j = Int(15 * Rnd)
                If j > 15 Then
                   Stop
                End If
                '--- permutation
                shTest.Range(Cells(kRT + 15, 3), Cells(kRT + 15, 5)).Value = shTest.Range(Cells(kRT + k, 3), Cells(kRT + k, 5)).Value
                shTest.Range(Cells(kRT + k, 3), Cells(kRT + k, 5)).Value = shTest.Range(Cells(kRT + j, 3), Cells(kRT + j, 5)).Value
                shTest.Range(Cells(kRT + j, 3), Cells(kRT + j, 5)).Value = shTest.Range(Cells(kRT + 15, 3), Cells(kRT + 15, 5)).Value
             Next k
             kRT = 3 + kR * 15   '--- ligne début quart d'heure suivant
             shTest.Range(Cells(kRT, 3), Cells(kRT, 5)).ClearContents
          Next kR
       End With
       '--- les sorties
       shTest.Select
       n = 0                         '--- temps d'attente
       j = 843                       '--- ligne dernière heure
       For kRT = 3 To 843
          '--- calcul longueur file
          If kRT = 3 Then
             Cells(kRT, 9) = Cells(kRT, 4).Value
          Else
             Cells(kRT, 9) = Cells(kRT - 1, 9) + Cells(kRT, 4) - Cells(kRT, 8)
          End If
          k = Cells(kRT, 5)                '--- temps traitement véhicule arrivé
          If k > 0 Then
             '--- véhicule arrivé, indiquer sa sortie
             If n > 0 Then     '--- selon longueur file
                n = n + k
             Else
                n = k
             End If
             If kRT + n > 843 Then
                '--- ne pourront être traités avant la fermeture
                j = j + 1
                Cells(j, 6) = Cells(kRT, 2) + n / 1440    '--- 24*60 = 1440 minutes dans 1 jour
                Range(Cells(j, 7), Cells(j, 8)).Value = Range(Cells(kRT, 3), Cells(kRT, 4)).Value
             Else
                '--- traité dans la journée
                Range(Cells(kRT + n, 7), Cells(kRT + n, 8)).Value = Range(Cells(kRT, 3), Cells(kRT, 4)).Value
             End If
          End If
          n = n - 1
       Next kRT
    End Sub
    et puis un graphe.
    Reste à simuler plusieurs files! Bon amusement.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. Problème avec traitement de chaînes
    Par cortex007 dans le forum Langage
    Réponses: 6
    Dernier message: 25/04/2006, 17h22
  2. Fermeture avec traitement long dans le onActivate
    Par benj63 dans le forum C++Builder
    Réponses: 14
    Dernier message: 20/03/2006, 19h54
  3. Réponses: 3
    Dernier message: 04/12/2005, 16h08
  4. Réponses: 16
    Dernier message: 10/11/2005, 23h51
  5. [FLASH MX] Bouton avec états différents
    Par Chucky69 dans le forum Flash
    Réponses: 5
    Dernier message: 24/08/2004, 13h01

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