Calendrier de transport

Hello le forum,

J'ai besoin de vous concernant un code avec des boucles imbriquer qui ne fonctionne pas comme je l'aimerais.. Voici le code :

Sub Chargement()
Dim BD As Worksheet, PL As Worksheet
Dim h&, Col&, Last_L_BD&, d&
Dim Tab_Verif

Set BD = Sheets("BD")
Set PL = Sheets("Planning_V2")

Col_Date = 2
Last_L_BD = BD.Range("A" & Rows.Count).End(xlUp).Row

' Contrôle si la date est identique puis contrôle si l'heure est identique, si non, passe à l'heure suivante sur le planning
' Une fois trouver ou non, passe à la ligne suivante sur la feuille BD

For Col = 2 To 16 Step 3
    For d = 2 To Last_L_BD
        With PL
            If .Cells(1, Col) = BD.Cells(d, 1) Then ' Si la date du planning est identique à la date du transport(feuille BD) alors
                For h = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
                    If BD.Cells(d, 2) = .Cells(h, 1) Then ' Si l'heure du transport est identique à l'heure du planning
                        .Cells(h, Col).Value = BD.Cells(d, 3).Value ' Ajoute le NPA
                        .Cells(h, Col + 2).Value = BD.Cells(d, 4).Value ' Ajoute l'objet du transport
                        GoTo Suite
                    End If
                Next h ' Heure suivante
            End If
        End With
Suite:
    Next d ' Date suivante
Next Col ' Colonne Suivante

End Sub

J'ai donc un calendrier de transport de semaine en semaine, à chaque changement de semaine celui-ci sauvegarde les données et charge les données relatif à la semaine.

Cependant, a chaque fois qu'il ne trouve pas de correspondance il passe à la prochaine ligne et donc ne charge pas mes données.

Pourriez-vous m'indiquer une synthaxe correcte pour que ça fonctionne ? Je vous joint le fichier.

Merci

Kilian

bonjour,

Pourquoi utiliser ce format d'heure farfelu dans la feuille Planning ?

Hum... La question n'est pas de savoir quelle mouche vous as piqué mais si c'est modifiable. (ou s'il y a une contrainte externe)

Indépendamment de cette remarque, je ne comprend pas votre question...

Comme le truc est conçu la macro trouve forcément toutes les correspondances. Pouvez vous me donner un exemple d'enregistrement de la BD qui ne s'affiche pas dans le planning ?

A+

Hello Galopin,

Merci pour votre réponse.

Je ne comprend pas bien en quoi le format d'heure est farfelu, personnellement je l'ai très souvent vue comme ceci.

Pour faire un test, dans la feuille BD en date du 19.04.2021 il y a un transport à 08:00, un à 12:00 et un à 14:00.

Celui de 08:00 s'affiche, mais les deux autres non.. Après avoir fait quelques test, la macro passe sur les heures mais ne vois pas de correspondance.. Alors qu'a mon sens, il n'y pas de différence entre 08:00 et 12:00 au niveau du format.

A+

Kilian

On ne va pas chipoter sur ce détail, même si pour moi le format heure aurait été parfait, mébon...

J'ai le même problème que toi le 12/14 h n'est pas reconnu à cause d'un problème d'arrondi dans une feuille il prend 12:00 = 0.5 et dans l'autre 0.49999999 alors évidemment yapa de correspondance.

J'ai passé quelques heures la-dessus sans trouver de solution potable...

Nota : Il est possible que le classeur soit bogué en effet à l'importation j'ai un message d'erreur et une réparation automatique d'Excel qui trouve une erreur dans le xml de ce fichier et plus précisément dans la feuille planning.

Alors évidemment travailler sur un fichier réparé on peut se poser des questions.

J'ai essaie de contourner le problème avec un classeur codé de manière plus "orthodoxe" (ce n'est pas une critique...)

Mais cela demande du temps...

A+

Merci pour le temps que tu as passé la dessus.

Le message d'erreur est tout nouveau et a apparu après l'importation de ce fichier sur le forum, je ne sais pas si ça a un lien.. Mais quoi qu'il en soit je ne penses pas que ça ai un quelquonc lien avec mon problème..

C'est bizarre que 12h00 est = à 0,5 et une autre fois à 0.4999999, car lorsque je met en format standard, j'ai 0.5 sur les deux feuilles.

Je vais encore approfondire mes recherches, merci encore pour ton aide.

A+

Kilian

En fait il est très difficile de comparer des heures avec VBA.

Le seul moyen que j'ai trouvé est d'indexer un tableau d'heure et de travailler sur les index.

Hum... Bon là ça va te dépasser surement un peu.

Bref j'y suis arrivé mais je n'ai fait que la moitié du boulot. La restitution de ce qui a été enregistré dans la BD vers le planning.

Bon ceci dit il reste à faire l'enregistrement et les modifications quand tu travailles sur un planning.

Je te dis tout de suite que j'ai bien vu la macro "Memo" mais je l'ai effacé car je ne crois pas qu'elle puisse servir à quelque chose :

Outre le fait que j'ai du rajouter une colonne (masquée) au planning, ce qui la rend caduque, iIl faudra surement l'améliorer car la méthode ne résistera sans doute pas à quelques semaines d'enregistrements.

Je vais voir si je peux travailler à la mémorisation des saisies et des modifications dans ce contexte.

Lien vers le fichier :

A+

30killian.zip (524.33 Ko)

Effectivement ça me dépasse un peu.. Je débute encore

Pour l'instant je connais pas vraiment d'autre méthode que devoir passer par des boucles pour mémoriser les données..

Je vois que tu as reporté le nombre de minute correspondante à l'heure en colonne A, mais rien de semblable dans la feuille BD, tu fais ta recherche toujours sur l'heure ?

tu fais ta recherche toujours sur l'heure ?

Bien sur, c'est VBA qui s'occupe de la conversion :

   For i = 2 To UBound(ArBD)
      ArBD(i, 2) = Hour(WsB.Cells(i, 2)) * 60 + Minute(WsB.Cells(i, 2))
   Next

C'est vrai qu'idéalement il faudrait insérer une colonne "B" ou toutes les conversions seraient faites.

Mébon dans ce sens là ce n'est pas important.

Par contre il y a un problème que je ne sais pas gérer dans la configuration actuelle : Comment faire la mise à jour de la base de donnée dans le cas ou on fait des SpinUp et SpinDown d'une semaine à l'autre : C'est très bien d'enregistrer à chaque fois mais comment on fait pour enregistrer les modifications s'il y en a ? En particulier les annulations. Imagine qu'on veuille supprimer la navette de 14 h pour Moutier le 19 Avril ? On fait comment ? Et c'est encore pire si elle est remplacée par une autre destination...

Comme ce n'est pas une vrai BD, ce serait une galère pour la tenir à jour.

Idéalement pour que ce soit gérable, il faudrait effectivement insérer une colonne "B" avec le même type de minutage, mais surtout insérer une colonne "A" (avant la date) pour indexer réellement la BD si on veut réellement tenir à jour les modifications.

En outre il faudrait insérer une colonne avant chaque colonne "NPA" dans le planning avec le même index que la BD "pour faire le lien" avec la BD.

Dans le fichier joint toutes ces modifications ont été faites (Attention du coup la macro ne marche pas encore)

De plus la BD a été transformée en tableau structuré pour une maintenance plus aisée.

Dans chaque feuille, les colonnes ajoutées ont été colorées en gris pour les mettre en évidence.

Mais pour la mise à jour de la macro "Galopin" prévoir un délai...

Quand à la mise au point d'une macro "Mémo" capable d'enregistrer les mises à jour, il va falloir un balèze.

Après il reste que toussa est organisé pour des départs unique chaque demi-heure de 5h00 à 18h00 :

Tout ce bel édifice tombe à l'eau si on décide de prolonger les horaires jusqu'à 19 h par exemple... ou s'il y a des départs toutes les 5 minutes... ou s'il peut y avoir plusieurs départs à la même heure...

Dans tous ces derniers cas une refonte complète du Planning s'imposerait, avec (sans doute) la nécessité d'une colonne index supplémentaire (en "A")

A+

33killian-v2.zip (532.99 Ko)

Ah je comprend mieux.

Afin d'éviter de gérer les modification, pourquoi pas ne pas simplement supprimer le transport et devoir en rajouter un ?

Un simple double clic sur la ligne et un msgbox pour trouver et supprimer la ligne de la feuille BD ne ferais pas l'affaire ?

Et pour la rapiditer de la macro, est-ce qu'une suppression des données de plus de 6 mois serais suffisant ? Je ne penses pas qu'il soit nécessaire d'avoir les archives après 6 mois (même si dans un mode idéale se serais mieux, mais très rarement utilisé).

Afin d'éviter de gérer les modification, pourquoi pas ne pas simplement supprimer le transport et devoir en rajouter un ?
- Ça c'est ton problème :A toi de gérer les modes opératoires pour que quelqu'un qui va devoir faire une suppression le fasse directement sur la BD et non pas en passant par le SpinDown. Si c'est plus ou moins mal géré il y a gros à parier qu'un jour ou l'autre un dégourdi appuiera là ou ça fait mal...
Personnellement, je préconise que la BD soit inaccessible au pélerin lambda... Mais cela suppose que l'utilisateur dispose d'un menu suffisamment chiadé pour satisfaire à tous ses besoins ! (ou que le programmeur ne soit pas loin !)

Un simple double clic sur la ligne et un msgbox pour trouver et supprimer la ligne de la feuille BD ne ferais pas l'affaire ?

- Si bien sur mais ça suppose que l'utilisateur à accès à la feuille BD (avec tout ce que ça suppose d'aléas !)Revenir au paragraphe 1 !

Et pour la rapidité de la macro, est-ce qu'une suppression des données de plus de 6 mois serait suffisant ?

Ma macro est extrêmement robuste, au moins 20 fois plus rapide que le simple parcours de la BD dans tout les sens. Toutefois à l'évidence cela dépend énormément du nombre de lignes. Si au départ le planning fait 30 lignes par semaines, ça ne dépassera pas 10 000 lignes par ans ç'est très gérable....
Mais si au réel ton planning est plus important, ça se discute : Dans ce cas contraire il faudra surement resserrer la purge en proportion. Dès le premier signes de ralentissement... Si le planning fait 300 lignes, moi je prévoirai une purge par mois.
Après une purge c'est pas forcément une suppression sauvage... Les sauvegardes c'est pas fait pour les chiens !

Je m'excuse mais pour la macro "mémo" prévoir un délai... j'ai des chances d'être pas mal dérangé jusqu'à jeudi midi or ça va être un boulot conséquent :
Me tenir au courant rapidement si au réel d'autres contraintes externes doivent être prises en considération car je ne referai pas 2 fois le même travail sous prétexte que tu as oublié quelques détails...

L'idéal serait que j'ai sous les yeux un planning réel du mois dernier...
A+

quelqu'un qui va devoir faire une suppression le fasse directement sur la BD et non pas en passant par le SpinDown

Je choisit peut-être la facilité, mais je penses qu'il est plus abordable de simplement cliquer sur un msgbox pour supprimer la ligne directement sur la BD. Je ne penses pas avoir besoin d'un menu sophistiqué pour l'utilisateur, le but étant de faire un calendrier relativement simple.

Ma macro est extrêmement robuste

Alors pas de problème de ce côté là, il n'y aura pas énormément de ligne au final. Bien entendu, il faudra faire des purges avec des sauvegardes.

Je m'excuse mais pour la macro "mémo" prévoir un délai

Pas de problème, je ne m'attendais pas à ce que tu prenne autant de temps à m'aider dans ce projet, tu as déjà fais beaucoup pour moi et je t'en remercie.

Me tenir au courant rapidement si au réel d'autres contraintes externes doivent être prises en considération

Je ne crois pas qu'il y ai encore de réelle contrainte, peut-être juste un point à noté sur une implémentation que j'aurais voulu faire plus tard :

Je voudrais pouvoir générer un ordre de transport (feuille ODT dans le classeur) avec une sauvegarde sur un serveur partagé puis avoir un lien sur le planning pour ouvrir cet ordre (Excel ou PDF). Je pensais faire le lien directement sur le NPA, mais encore rien de défini ce n'est qu'un concept.

L'idéal serait que j'ai sous les yeux un planning réel du mois dernier...

Malheureusement je ne peux pas vraiment te fournir ceci, les seuls transport fixe sont ceux de 5h00 à 7h30 à 4624 Härkingen.

Les horaires de transports ne peuvent pas être avant 5h00 et pas plus tard que 18h00.

Merci, A+

Kilian

Ce sera toujours toutes les demi-heures et il n'y aura jamais de doublons sur une heure quelconque ?

Oui le transport le plus court est de 30 minutes.

Par doublon, tu entend un transport qui durera plusieurs demi-heure ? Si c'est le cas, oui il est probable. Tout comme le transport de 5h00 à 7h30.

bonjour,

Heu... Non, ça n'a rien à voir.

On va laisser de coté ce problème pour l'instant.

Bon j'ai eu pas mal de difficultés parce que ce planning est de mon point de vue pas bien conçu. Mébon... Là encore on va pas en faire un "casus belli"...

Les informations qui suivent concerne le fonctionnement normalement prévu actuellement. Toutefois cela n'exclu pas qu'on fasse une vérification complète et poussée que tout se passe comme prévu... (Car en fait je n'ai pas eu le temps de tester suffisamment !) Donc en cas de problème imprévu, me le signaler.

Veuillez lire attentivement ce qui suit et au besoin l'imprimer.

Je n'interviendrai pas ultérieurement pour tout dysfonctionnement lié à l'inobservation de ce qui suit.

Particulièrement signalé :

Pour la feuille BD

Selon mon avis tout accès à la BD ne peut mener qu'à une catastrophe ! C'est pourquoi elle est masquée et devra rester inconnue de l'utilisateur lambda.

Néanmoins pour votre information vous pouvez la visualiser.

Pour l'initialisation, la ligne 2 de cette BD comporte 1 enregistrement à la date du 1er Février. Pour l'instant et tant que vous ne fonctionnerez pas avec des données réelles ne touchez pas à cette ligne.

Vous pouvez supprimer toutes les lignes suivantes mais pas les 2 premières.

Les autres lignes étant supprimées vous pourrez alors commencer à travailler avec des données véritables. Quand vous aurez rempli quelques lignes, ce n'est qu'à partir de ce moment que vous pourrez supprimer la ligne 2.

Pour la suite cela n'aura plus d'importance puisqu'il restera toujours au moins une ligne de données...

Par la suite ne cherchez pas à trier différemment la BD cela ne présente aucun intérêt (du point de vue de la programmation)

Comprenez bien :

Pour la feuille Planning

En aucun cas vous ne devez modifier les lignes 1 et 2 et les colonnes 1 (masquée) et 2.

Dans ce planning seules les cellules des colonnes NPA et Objet sont susceptibles d'être modifiées. Les autres ne devraient jamais être modifiés et pourraient être inhibées. Toutefois je ne l'ai pas fait mais toute modification imprévue peut conduire à un résultat désastreux !

Toute action sur la toupie entraîne l'enregistrement du planning dans la base de donnée.

Puis selon le cas, l'affichage des données de la semaine suivante ou précédente.

Seules les cellules vides sont modifiables.

Les autres ne peuvent être que supprimées puis recrées.

La suppression se fait colonne NPA pour les 3 colonnes solidaires NPA/Ville/Objet

Dans cette feuille il est normalement impossible (et très déconseillé...) de sélectionner plus d'une cellule. Si vous tenez absolument à le faire, inhibez toutes les macros de cette feuille en mettant un X devant leur nom :

inhibeventmacro

N'oubliez pas de rétablir le fonctionnement normal ensuite !

Je reste à votre disposition pour toute info complémentaire.

A+

33killian-v4.zip (540.09 Ko)

Hello Galopin,

Merci beaucoup pour le travail accompli, j'en attendais pas tant !

Je prend note de toutes tes remarques et je vais faire vivre ce planning afin de faire tout les tests.

Je clos donc le sujet.

Merci, A+

Kilian

En procédant à un test j'ai remarquer que lorsque un transport est ajouté, il se met dans la BD dans un mauvais format et que Htom et heure se ne remplisse pas..

image

Du coup, pas de chargement sur le calendrier.. Est-ce que c'est dû à ma version ou paramètre excel ?

Un peu plus d'info sur votre config SVP : Dans le ruban Excel => Fichier > Compte

cpteexc

Le format avec des points est-il votre format habituel par défaut pour les dates ? Je n'ai pas ce format sur votre fichier original.

Avez vous modifié le paramétrage du fichier que j'ai posté ? Ou au contraire est-ce apparu dès la première utilisation.

Joignez le classeur SVP

Hello,

image

Il s'agit de la première utilisation du fichier, aucun paramètre n'a été modifié.

Les points sont bien le format par défaut enregistrer dans mon excel.

A+

Kilian

Essayez en partant de mon classeur et en le renommant à votre convenance. Ensuite vous importerez les feuilles dont vous avez besoin...

Pour initialiser la base de donnée : mettez le planning sur une semaine de Mars (vide) supprimez toutes les lignes de la BD sauf la ligne 1 et 2.

et voyez si vous pouvez travailler. Vous pourrez supprimer la ligne 2 dans quelques semaines quand vous serrez certain que l'ensemble est fonctionnel.

Et si ça ne marche pas désolé : Je n'ai pas 365 donc je ne peux pas vous dépanner plus que ça.

Pour le forum modifiez votre config et précisez qu'il s'agit de 365.

Éventuellement aussi voyez à paramétrer votre Window correctement

Fenêtre Windows > Paramétre > Région > (France ?) > Date > heure et mise en forme régionale (/ou : Modifier les Formats de données)

A+

Quelqu'un d'autre peut-il tester mon dernier classeur sous 365 pour voir s'il éprouve les mêmes difficultés.

Moi je suis obligé de passer la main...

Rechercher des sujets similaires à "calendrier transport"