Aide pour compléter code VBA
Bonjour à tous,
Je viens de nouveau vous demander de l’aide, car grâce à l'aide du forum, j'ai pu répondre à une grande partie de mon problème et je vous en remercie. Mais une partie subsiste encore. Je souhaite intégrer la vérification de la vitesse cumulée des moteurs. On a la vitesse initiale cumulée rentrée par l’utilisateur (V0) en cellule « F10 ». « B11 » représente la vitesse cumulée maximale à ne pas dépasser et « B12 » la vitesse minimale cumulée. Des cellules « G10 » à « FR10 » j’ai entrer sur la feuille une formule à condition d’affichage permettant de connaitre le cumul des vitesses à chaque pas de H.
Je viens demander de l’aide dans le forum afin de pouvoir corriger le code ci-joint de la manière suivante : tant que l’on a pas atteint les valeurs seuils de cumuls de vitesse (« B11 » et « B12 ») on conserve la tournure actuelle.
Cependant, si on atteint ou dépasse les 2000 m/s alors les moteurs « actifs » (présence d’un 2) à l’instant Hx passent en « attente » (présence d’un 1) dans les H+n tant que la vitesse cumulée n’a pas atteint 0,75*2000. Leur temps de fonctionnement est lui aussi mis en attente, c’est-à-dire qu’une fois les 0.75*2000 atteints, les moteurs initialement actifs avant mis en attente, sont remis en marche avec leur temps de fonctionnement restant. Par exemple si le moteur 6 a tourné pendant 24h puis a été mis en attente car la valeur seuille a été atteinte, une fois relancé, il tourne pendant encore les 11h restantes.
De même, si l’on est dans le cas où on est en dessous des 800m/s alors les moteurs en « attente » (présence d’un 1) sont activés (ils passent à 2) tant que l’on a pas atteint les 1.75*800. Une fois cette valeur atteinte, ils sont alors mis en repos même si il reste du temps de fonctionnement.
Je viens une nouvelle fois demander de l’aide car il s’agit de la dernière marche du programme et que malheureusement je suis dans l’incapacité de pouvoir résoudre seul ce dernier obstacle.
Je vous remercie d’avoir pris du temps pour lire ma requête et vous suis reconnaissant d’avance si vous avez des propositions ou des pistes pour m’aider à régler ce problème.
En vous souhaitant une bonne journée et une bonne semaine,
Cordialement
bonjour,
Si j'ai bien compris tes explications, la limite basse est inutile (tout semble conditionné par la limite haute (arrêt) et 75% de cette limite haute (redémarrage)).
Comment faut-il prioriser l'activation d'un moteur ? L'ordre des moteurs dans le tableau est-il encore important ?
Bonjour h2so4, merci de vous proposer une nouvelle fois
Pour répondre à votre question sur la priorité de l'activation du moteur, à la base , je souhaitais que l'activation d'un moteur soit priorisée par la vitesse cumulée puis par la vitesse nominale (105 m/s), c'est à dire que la condition première pour activer un moteur est que le seuil haut n'est pas atteinte si on active le moteur. Si c'est bien le cas, on l'active. Puis on regarde la deuxième condition qui est de produire autant ou plus que la vitesse nominale. Si on ne l'atteint pas, on fait alors comme initialement c'est à dire qu'il est envisagé de faire appel à un autre moteur disponible pour atteindre la vitesse nominale. Mais à nouveau il faudrait revérifier si en activant le moteur supplémentaire, on atteint pas la vitesse limite haute.
Le problème étant qu'avec cette méthode je serai encore plus en difficulté que je ne le suis déjà et et je n'entrevois aucun moyen assez abordable pour pouvoir la coder. Du coup, je me suis rabattu sur le fait de tourner à vitesse égale ou supérieure à la vitesse nominale puis de vérifier si on n'a pas dépasser les vitesses seuil. Si on dépasse la limite haute, on "stop" momentanément les moteurs en cours de fonctionnement avant de reprendre un fonctionnement normal.
Pour votre deuxième question, oui l'ordre est toujours important malgré l'ajout de la condition sur la vitesse cumulée, le but étant de s'appuyer en priorité sur les moteurs 6,5 et 1 si possible puis les autres en complément.
Je vous remercie de vous intéresser et de vous impliquer une nouvelle fois à mon problème.
Bien cordialement
Bonjour h2so4,
Je vous remercie grandement pour votre proposition, je m'en vais l'étudier et la comprendre.
Encore une fois mille merci pour votre aide.
Bonne fin de journée à vous
Bien cordialement
Bonjour h2so4,
J'ai regardé votre proposition et je pense que vous y êtes presque puisqu'en effet maintenant il y la prise en compte de la vitesse cumulée. Par contre j'ai remarqué un problème car lorsque je lance le progamme, le tableau affiche bien la succession de 2 lorsque c'est nécessaire et de 1 lorsqu'on est en attente. Cependant, je crois comprendre qu'il n'y a pas la prise en compte du temps de fonctionnement restant ou du temps de repos. En effet, sur l'image en piece jointe, le moteur 6 a tourné 20h, puis a été mis en attente, puis il repris pendant 10h avant d'être à nouveau mis en attente jusqu'à H44. A H45 il reprend encore mais la est le problème. Je ne comprends pas pourquoi à H50 on a encore un 2 alors qu'on devrait avoir un 0 puisque le moteur a tourner 20h, puis 10 puis 5h soit les 35h maximales qu'il peut effectuer avant repos. Du coup normalement, les deux prochains H50 et H51 devraient être à 0 dans le cas du moteur 6.
Bien cordialement.
re-Bonjour,
un bug, la macro allait chercher le temps de fonctionnement en colonne 2 plutôt qu'en colonne 3.
une version corrigée pour ce point :
Bonjour h2so4,
Merci enormément , mille fois merci vous m'aidez terriblement. Le code répond parfaitement voir plus à ce que j'avais espéré et c'est entièrement grâce à vous.
J'ai cependant une dernière question, juste un détail par rapport à votre toute dernière version que vous m'avez proposé. A quoi correspond ou sert l'instruction ctr=ctr+1 ( cf image en piece jointe)?
Sur ce, je vous remercie beaucoup et vous souhaite une bonne journée et une très bonne continuation.
Bien cordialement
bonjour
J'ai cependant une dernière question, juste un détail par rapport à votre toute dernière version que vous m'avez proposé. A quoi correspond ou sert l'instruction ctr=ctr+1 ( cf image en piece jointe)?
Comme dirait mon prof, "c'est pour vérifier si vous êtes attentifs, un bon point pour toi". Cela ne sert à rien et peut être supprimé.
Merci pour ton retour.