Planning de livraisons interactif avec demandes

Et lorsque j'essaye de faire la demande pour cette livraison DD e même jour je n'ai pas ce message :

Il n'y a pas de raison pour moi. Si je le fais sur le fichier pour DDD j'ai bien le message
Donc là je ne comprends pas pourquoi vous avez un problème

image

L'instruction Call verification(ddate) est bien placée après le On error goto 0 ?


Pour le planning, je pense avoir trouvé.
- Allez dans le code planning
- A la ligne --> lig = WorksheetFunction.Match(cel.Offset(0, 1), .Columns(1), 0), remplacez le 0 par 1

Pour le planning, je pense avoir trouvé.

- Allez dans le code planning

- A la ligne --> lig = WorksheetFunction.Match(cel.Offset(0, 1), .Columns(1), 0), remplacez le 0 par 1

C'est cela merci

Concernant le message je vous ajoute ci-dessous l'extrait du code

Sub SoumettreDemande()
Dim lig As Integer
Dim tablo(0 To 6)
Dim i As Byte
Dim ddate As String

tablo(0) = InputBox("Entrez le nom de l'entreprise demandeuse :", "Nom entreprise")
If tablo(0) = vbNullString Then Exit Sub

On Error Resume Next
ddate = InputBox("Entrez la date de livraison (jj/mm/aaaa) :", "Date Livraison", Format(Now(), "dd/mm/yyyy"))
If Not IsDate(ddate) Or Len(ddate) < 10 Then MsgBox "Les dates doivent être dans un format JJ/MM/AAAA", vbCritical, "Erreur format": Exit Sub
If ddate = vbNullString Then Exit Sub
tablo(1) = ddate
On Error GoTo 0

Call verification(ddate)

tablo(2) = InputBox("Entrez l'heure de début au format décimal (par ex 7.5 pour 7h30) :", "Heure début")
If tablo(2) = vbNullString Then Exit Sub
tablo(2) = Replace(tablo(2), ".", ",") 'remplacer point par virgule
If tablo(2) - Int(tablo(2)) <> 0 And tablo(2) - Int(tablo(2)) <> 0.5 Then 'verifier si choix heure ou demi-heure
    MsgBox "Vous ne pouvez choisir que la demi-heure ou l'heure", vbCritical, "Choix heure"
    Exit Sub
End If

Ainsi que le code de verification ddate :

Sub verification(ddate As String)
Dim c As Range
Dim prem As String
Dim valeur

With Range("Tab_demande_livraison").ListObject.ListColumns(2).Range
    Set c = .Find(CDate(ddate), LookIn:=xlValues)

    If Not c Is Nothing Then
        prem = c.Address
        Do
            If valeur = vbNullString Then
               valeur = c.Offset(0, 4).Text & " - " & c.Offset(0, 1).Text & " à " & c.Offset(0, 2).Text
            Else: valeur = valeur & vbCrLf & c.Offset(0, 4).Text & " - " & c.Offset(0, 1).Text & " à " & c.Offset(0, 2).Text
            End If

            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> prem
    End If
End With

If valeur = 0 Then MsgBox "Aucune livraison prévue pour le jour choisi", vbInformation, "Etat de livraison": Exit Sub

If MsgBox("Livraison(s) déjà prévue(s) ce jour de " & vbCrLf & valeur & vbCrLf & vbCrLf & _
    "Voulez-vous enregistrer la demande de livraison ?", vbYesNo + vbDefaultButton2 + vbCritical, "Etat de livraison") = vbNo Then End
 End Sub

C'est ce que je vous ai donné comme code et l'instruction call est bien placée. Bizarre ...

- Essayez un peu en remplaçant le vbnullstring par des guillemets dans cette ligne

If valeur = vbNullString Then

- ensuite plus bas, remplacez aussi Valeur = 0 par Valeur = ""

Pas sûr que ce soit cela le souci mais bon autant essayer

NB : j'ai remis en forme le code dans votre post..

J'ai essayé en modifiant comme suit :

Sub verification(ddate As String)
Dim c As Range
Dim prem As String
Dim valeur

With Range("Tab_demande_livraison").ListObject.ListColumns(2).Range
    Set c = .Find(CDate(ddate), LookIn:=xlValues)

    If Not c Is Nothing Then
        prem = c.Address
        Do
            If valeur = "" Then
               valeur = c.Offset(0, 4).Text & " - " & c.Offset(0, 1).Text & " à " & c.Offset(0, 2).Text
            Else: valeur = valeur & vbCrLf & c.Offset(0, 4).Text & " - " & c.Offset(0, 1).Text & " à " & c.Offset(0, 2).Text
            End If

            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> prem
    End If
End With

If valeur = "" Then MsgBox "Aucune livraison prévue pour le jour choisi", vbInformation, "Etat de livraison": Exit Sub

If MsgBox("Livraison(s) déjà prévue(s) ce jour de " & vbCrLf & valeur & vbCrLf & vbCrLf & _
    "Voulez-vous enregistrer la demande de livraison ?", vbYesNo + vbDefaultButton2 + vbCritical, "Etat de livraison") = vbNo Then End
 End Sub

(je n'arrive pas à mettre en forme avec couleurs comme vous)

Mais toujours pas d'affichage du message. Cela peut-il être dû à la version d'Excel que j'utilise? (Office 365)

(je n'arrive pas à mettre en forme avec couleurs comme vous)

C'est à dire ?

Mais toujours pas d'affichage du message.

Donc les changements ne servent pas.
Là je ne vois pas pourquoi ce serait dû à la version.

essayez ceci --> juste avant cette ligne

If valeur = "" then msgbox ("aucune livraison....

Ajoutez cette ligne --> MSGBOX valeur

Dites-moi ce que cela vous renvoie comme info. Dans tous les cas, vous devez avoir une info dans la msgbox

C'est à dire ?

Je parlais seulement de la mise en forme avec les couleurs sur le code que j'ai copié dans mon message sur le forum.

J'ai effectivement une Msg Box qui s'ouvre

image

Le fait qu'elle soit vide signifie que le code n'arrive pas à lire quelles valeurs sont validées?

Je parlais seulement de la mise en forme avec les couleurs sur le code que j'ai copié dans mon message sur le forum.

cela se fait automatiquement si vous cliquez sur l'icône </> dans la barre de menu et que vous collez le code dans la fenêtre

J'ai effectivement une Msg Box qui s'ouvre

Ok donc le souci est là parce que vous devriez avoir quelque chose.

en voyant votre image, j'ai l'impression que vos dates dans la feuille ne sont pas au bon format.
Cliquez en B2 et regardez le format. Il peut être sur Date alors que ce n'est pas le cas en vrai dans la feuille
Au besoin, double cliquez en B2 puis touche Entrée sur le clavier. cela va positionner la date à droite. refaites la même chose pour B3.
Ensuite enregistrez le fichier puis refaites un test

Je pense que c'est la même chose avec les heures

Edit : il me semble me souvenir que j'avais dû corriger cela au début dans votre fichier

C'est effectivement cela, j'ai bien un format Date et Heure dans ces colonnes, il me semblait aussi que cela était corrigé. En faisant doubleclic+entrée le format ne change pas dans ces cellules.

J'ai essayé en mettant le format en Standard dans les 3 colonnes puis en fermant le fichier.

Quand on lance la macro il y a bien une commande qui formate les dates et les heures donc je ne comprend pas bien votre message

J'ai essayé en mettant le format en Standard dans les 3 colonnes puis en fermant le fichier.

Là c'est ce qu'il faut aussi faire. Si vous remettez sur standard il faut après remettre sur le bon format.
en fait en premier il faut voir si le fait d'avoir les dates à gauche n'est pas simplement le fait que vous avez mis l'alignement à gauche
Si je reprends votre dernier fichier posté, c'est effectivement le cas
Sur votre dernier fichier posté, j'ai testé le code que je vous ai donné et il y a bien un souci que je viens de régler comme ceci
- click en B2, mettre le format en Standard puis le remettre en format Date
- idem pour chaque cellule contenant une date en colonne B
- enregistrer le fichier puis refaite un test.

Edit : si cela ne fonctionne pas, re-donnez moi votre fichier. C'est le plus simple

Sur votre dernier fichier posté, j'ai testé le code que je vous ai donné et il y a bien un souci que je viens de régler comme ceci

- click en B2, mettre le format en Standard puis le remettre en format Date

- idem pour chaque cellule contenant une date en colonne B

- enregistrer le fichier puis refaite un test.

J'ai essayé mais cela ne change rien. Peut-être que je ne fais pas correctement la manip..

Je vous renvoie mon fichier

sur base de votre fichier, je fais la première entrée.
J'ai ce message et qui est correct puisque pas de valeur enregistrée

image

Edit : bon j'ai trouvé une erreur. On revient à ce que je vous ai demandé et pas sûr que vous l'aviez fait comme expliqué
Dans votre fichier joint faites ceci
- Cliquez une nouvelle demande pour compléter la première ligne
- Une fois la première ligne complétée, allez sur B2
- Mettez la cellule en format standard. La date va se transformer en un chiffre --> 45531 (si vous avez la date d'aujourd'hui donc 27/08/2024)
- remettez ensuite le format DATE sur la cellule B2 pour voir à nouveau la date

N'effacez pas la ligne et cliquez sur Nouvelle demande pour entrer une deuxième demande

D'accord, je comprend

Il faudrait donc que je crée une macro qui remet en standard la cellule entre chaque demande et qui ensuite réapplique le format date pour que le message se mette à jour?

Si c'est le cas je vais rentrer la macro manuellement étape par étape

J'ai désormais une question concernant la validation des demandes : lorsque des demandes sont validées et qu'on entre une nouvelle demande de livraison, lorsque l'on arrive à l'étape de validation toutes les demandes (même les validées) sont redemandées. Savez-vous s'il est possible de ne poser la question que pour les demandes en attente?

Il faudrait donc que je crée une macro qui remet en standard la cellule entre chaque demande et qui ensuite réapplique le format date pour que le message se mette à jour?

Non absolument pas. Vous faites ce que j'ai écrit 1 seule fois et ce sera bon
Si vous me posez cette question c'est que vous n'avez pas fait le test comme décrit dans mon post....

J'ai désormais une question concernant la validation des demandes : lorsque des demandes sont validées et qu'on entre une nouvelle demande de livraison, lorsque l'on arrive à l'étape de validation toutes les demandes (même les validées) sont redemandées. Savez-vous s'il est possible de ne poser la question que pour les demandes en attente?

Oui je regarde ce point. C'est vrai que le code actuel vous montre aussi un message si la ligne est déjà validée


Edit :

- Allez dans le code "Validerdemande"
- Juste en dessous de la ligne For i = 1 to .listrows.count, ajoutez cette ligne

If .DataBodyRange.Item(i, 7) <> "Validée" Then

- Juste en dessous du END SELECT, ajoutez

End if

Dans ce cas je dois avoir mal compris ,

J'ai crée une demande

Cliqué en cellule "B2" puis appliqué le format standard

Remis le format date sur cette cellule

Refait une demande (à ce moment là j'ai bien eu le bon message)

Ajouté une 3ème demande

Cependant, lorsque j'ai voulu ajouter une autre demande, le message recap n'a pas inclus ma 3ème demande :

image

Le code de Validation des demandes fonctionne parfaitement merci !

Cependant, lorsque j'ai voulu ajouter une autre demande, le message recap n'a pas inclus ma 3ème demande :

Effectivement
Pas facile de voir ce qu'excel voit. Si on savait...

Bon je pense avoir trouvé. En repartant d'un fichier vide de données.

J'ai testé depuis votre dernier fichier posté --> https://forum.excel-pratique.com/s/goto/1215488

Suivez bien pas à pas :
1. Sélectionner la cellule B2
2. Mettre le format en Standard puis le remettre le Format en DATE
3. Allez dans le code Sub SoumettreDemande()
4. Vers la fin du code (en dessous de Case = 1, désactivez la ligne --> .Item(lig, i + 1).NumberFormat = "dd/mm/yyyy"

Refaite un test en ajoutant des lignes

Bonjour,

Merci encore, c'est parfait, cela à l'air de marcher. J'ai crée en plus 2 macros permettant la mise en forme du planning avec ajustement des colonnes sur une certaine largeur et retour à la ligne imposé.

J'ai ajouté une MFC pour une entreprise en particulier, celle qui possède la grue et qui aura donc un droit de regard/autorisation sur les livraisons à valider. Cette "ENTREPRISE" recevra le tableau en premier et le remplira suivant ses besoins de grue et ensuite les autres entreprises formuleront leurs demandes pour les 2 prochaines semaines.

J'ai une question concernant la possibilité d'effectuer des livraisons autonomes si et seulement si la grue est utilisée par l'"ENTREPRISE"?

Une sorte de recherche s'il est écrit "ENTREPRISE" dans le créneau pour laquelle la demande est faite, celle-ci peut être intégrée au planning précisant que la GRUE et l'aire de livraison sont occupées, voir exemple ci-dessous d'une livraison autonome demandée le 29/08/2024 de 09:00:00 à 10:00:00

image

Bonjour

J'ai crée en plus 2 macros permettant la mise en forme du planning avec ajustement des colonnes sur une certaine largeur et retour à la ligne imposé.

Ok.
Mais dans votre fichier il y a un code redimensionnement. L'utilisez-vous encore ?
Sachez qu'il peut se faire sur une ligne au lieu de 6 lignes

J'ai une question concernant la possibilité d'effectuer des livraisons autonomes si et seulement si la grue est utilisée par l'"ENTREPRISE"?

Là vous me montrez la feuille Planning mais ce que vous demandez devrait se faire au moment où vous soumettez la demande de livraison dans la feuille demande livraison ou quand votre planning est généré ?

Ok.

Mais dans votre fichier il y a un code redimensionnement. L'utilisez-vous encore ?

Sachez qu'il peut se faire sur une ligne au lieu de 6 lignes

Je ne l'utilise plus, j'ai refait une macro au clic par clic pour la mise en forme.

Là vous me montrez la feuille Planning mais ce que vous demandez devrait se faire au moment où vous soumettez la demande de livraison dans la feuille demande livraison ou quand votre planning est généré ?

Je vous ai ajouté la feuille planning pour illustrer le rendu que je souhaiterais avoir, mais cette instruction devrait se trouver au moment du lancement de la macro Soumettredemande à mon avis, une vérification de : si la livraison tombe sur un créneau déjà occupé par l'"ENTREPRISE" alors il faut que ce soit une livraison autonome.

Nous avions déjà échangé sur ce sujet technique de vérification, après réflexion je pense qu'il est possible de l'adapter en faisant une vérification directement sur la feuille planning hebdo qu'en pensez-vous? Et les créneaux réservés pour l'"ENTREPRISE" seraient pré-remplis avant transmission du fichier aux autres entreprises pour qu'ils réalisent leurs demandes

Je ne l'utilise plus, j'ai refait une macro au clic par clic pour la mise en forme.

Ok si c'est pas trop compliqué....

....si la livraison tombe sur un créneau déjà occupé par l'"ENTREPRISE" alors il faut que ce soit une livraison autonome.

Hum pas simple du tout là .... car il va falloir repenser tout le code

Pour résumer ce que je comprends pour date X

Si lors d'un ajout, la date X et l'heure choisie sont déjà prises par ENTREPRISE dans la demande de livraison, vous voulez que pour cette date et l'heure choisie le mode de déchargement soit mentionné en Autonome pour le sous traitant demandeur ?
Si oui, cela veut aussi dire que l'on peut avoir un créneau identique sachant que pour l'ENTREPRISE ce sera Grue et pour le sous traitant ce sera Autonome

Ok si c'est pas trop compliqué....

Pour le moment le code se lance correctement et ne ralentit pas la macro

Je souhaiterais que la demande, une fois validée ainsi que le créneau déjà pris par l'"ENTREPRISE" soient affichés dans la cellule. Bien sûr, cela serait un plus si jamais lorsque le demandeur fasse la demande de livraison qu'un message s'affiche pour signaler que le déchargement sera forcément autonome mais cela me semble très compliqué à réaliser donc la première solution serait suffisante

Rechercher des sujets similaires à "planning livraisons interactif demandes"