XL pour MAC Répartir des commandes en colonnes dans un tableau

jcrouzil

XLDnaute Nouveau
Bonjour à tous,

J'ai besoin de vous car j'aimerais pouvoir faire en sorte de remplir un tableau (calendrier) automatiquement à partir des données rentrer dans un autre tableau au dessus.
Dans le fichier que vous trouverez en pièce-jointe, j'ai besoin de répartir mes commandes (N° dans les colonnes du tableau au dessus) dans un tableau de fabrication en dessous en limitant à 8 lignes puisque c'est notre capacité de prod actuelle. Du coup cela me permet de voir quand la porte sortira de prod en fonction de la demande.

Par exemple les 9 premières commandes du 13 juin (colonne verte) sortiront de prod le 20 et 21 juin. La dernière commande du 15 juin sortira le 24 juin.

Si je pouvais mettre cet outil à disposition de mes collaborateurs, ce serait une vraie avancée pour moi.

Le top serait de pouvoir récupérer la couleur également.
Avez vous une idée pour faire cela, je vous prie ?

Merci d'avance,
 

Pièces jointes

  • Calcul délai (Enregistré automatiquement).xls
    134.5 KB · Affichages: 5

vgendron

XLDnaute Barbatruc
Bonjour,

la demande n'est pas claire du tout..
de quels tableaux parles tu? quelle feuille ?

les commandes n° 5432-->5440 du 13 juin: Ok je les vois bien dans le tableau lignes 5-26

elles sortiront de prod le 20 et 21 juin.. alors la. je ne vois pas du tout !

en attendant plus d'éclaircissement..
une proposition de formule en ligne 3 pour mettre la date qui va bien pour omettre les week end
en D3
Code:
=SI(JOURSEM(C3+1;2)<6;C3+1;C3+8-JOURSEM(C3;2))
tu tires vers la droite
en C3: tu dois toujours saisir une date de départ manuellement
 

jcrouzil

XLDnaute Nouveau
Merci pour ta réponse, c'est vrai que je ne suis pas très clair.
Je reformule :
En fait je parle de l'onglet Feuil2 (2)

Le principe serait de saisir en colonne les commandes du jour. Par exemple pour le 13 juin je saisie à la suite les numéros (pas forcément chrono d'ailleurs) au fur et à mesure de l'enregistrement des commandes.

J'ai un délai de fabrication de 6 jours pour une capacité de 8 commandes par jour. Le tableau en dessous montre le délai en fonction de la demande. Par exemple pour le 13 juin étant donné que j'ai saisi 9 commandes alors que j'ai une capacité de 8, le délai inscrit est 6,1 jours. Ca ça marche.

Ce que j'aimerais c'est que ces commandes du 13 juin en colonnes viennent se ventiler automatiquement dans le tableau tout en bas avec un décalage de 6 jours. Par exemple toujours pour les commandes du 13 juin, on voit que les numéros de commandes se retrouvent à la date du 20 juin. La dernière commande de ce jour est elle ventilée sur le 21 étant donné ma capacité de 8 commandes. (je pars du principe que le 13 juin est le jour 1)

Pour l'instant j'ai fait un copié collé, ce que je voudrais c'est qu'au fur et à mesure que je saisis mes commandes en haut dans mes colonnes, celles-ci viennent s'ajouter à la suite dans le tableau dans bas, pour remplir toutes les cases. (sans vide) et ainsi de suite les jours d'après... Si je supprime une commande automatiquement elle disparait d'en bas et tout mon tableau se décale.

Je suis désolé si je n'arrive pas à être très clair mais ce n'est pas facile à expliquer.

Merci beaucoup pour la date, ça fonctionne nickel.
 

vgendron

XLDnaute Barbatruc
Re,

plus clair en effet..

un début de piste à adapter certainement

Code:
Sub dispatch()
Application.ScreenUpdating = False


Set CommandToDispatch = Range("C7:Q26")
Ldest = 46
Cdest = 8

For i = 1 To CommandToDispatch.Columns.Count
    For Each commande In CommandToDispatch.Columns(i).Cells
        If commande <> "" Then
            Cells(Ldest, Cdest) = commande
            Ldest = (Ldest - 45) Mod 9 + 46
            If Ldest = 54 Then
                Cdest = Cdest + 1
                Ldest = 46
            End If
        End If
    Next commande
Next i
   
Application.ScreenUpdating = True
End Sub
 

jcrouzil

XLDnaute Nouveau
Merci vgendron, ça marche nickel, je l'ai intégré. Il faut juste que j'arrive à comprendre et à l'adapter si je fais quelques modifs.
Après l'idéal aurait été que la couleur de la cellule d'aujourd'hui s'applique automatiquement. Mais peut être que j'en demande un peu trop ! :p

Merci en tout cas.

JBOBO, je n'ai pas accès à ta pièce jointe.
 

jcrouzil

XLDnaute Nouveau
Salut,

C'est pas grâce pour le temps, je me doute bien que vous n'avez pas que ça à faire.
En revanche, j'ai un soucis avec le tableau, c'est un peu plus compliqué que prévu. En faisant un test en prenant les vraies saisies de commande je me suis rendu compte d'une erreur.
Mon problème est que la commande doit être fabriquée en 6 jours minimum. C'est incompressible puisque c'est mon délai minimum de fabrication.
Les commandes doivent donc se remplir le tableau à la suite mais en se décalant au minimum de 6 jours.
Je ne sais pas si je suis très clair, je vous joins le tableau que j'ai mis à jour.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Calcul délai (Enregistré automatiquement) (Enregistré automatiquement).xls
    180 KB · Affichages: 69

jcrouzil

XLDnaute Nouveau
J'ai réussi à décaler de 6 jours en faisant une macro qui met des "-" dans les cellules vides (minimum 8 par jour) et du coup qui s'intègre dans mon tableau. Mais un autre problème se pose. Les "-" se mettent aussi entre des commandes. Par exemple en colonne T les commandes devraient commencer ligne 46. Mais là j'ai les tirets qui s'intègre.
En fait il faudrait que la macro tienne compte du fait qu'il faille remplir en décalant de 6jours minimums mais à la suite d'autres commandes si j'ai de la place. Je ne sais pas si je suis très clair, c'est pas évident à expliquer.
J'ai essayé de modifié la macro mais ce n'est pas mon fort et je bloque.
Je vous remercie de m'aider, je suis vraiment dans la panade.
 

Pièces jointes

  • Calcul délai (Enregistré automatiquement) (Enregistré automatiquement).xls
    186 KB · Affichages: 91

vgendron

XLDnaute Barbatruc
Hello

ci dessous un second code.. qui permet de décaler de 6 jours.. et de completer si il y a de la place
je me suis également efforcé de mettre des commentaires.. mais le plus efficace pour comprendre ce que chaque ligne fait, utilise le mode pas à pas (touche F8)
pour la couleur. je regarde ca
Code:
Sub dispatch2()
Application.ScreenUpdating = False

'zone contenant toutes les commandes à dispatcher
Set CommandToDispatch = Range("C7:EQ36")

'indices Ligne du tableau de destination
Ldest = 46


'pour chaque colonne de la zone source
For i = 3 To CommandToDispatch.Columns.Count + 2
    'si il y a au moins une commande dans la journée
    If Cells(6, i) <> 0 Then
        'on récupère les commandes de la journée: à partir de la ligne 7, on resize du nombre de commandes calculée en ligne 6
        Set ListeToDispatch = Cells(7, i).Resize(Cells(6, i))
        'permet de décaler de 6 jours
        Cdest = i + 6
       
        'pour chaque commande de la journée
        For Each commande In ListeToDispatch
            'on regarde, s'il y a de la place (=ligne53 vide) ET qu'il y a déjà quelque chose (=ligne46 NON vide)
            If Cells(53, Cdest) = "" And Cells(46, Cdest) <> "" Then
                'on récupère l'indice de ligne de la première cellule vide
                Ldest = Cells(53, Cdest).End(xlUp).Offset(1, 0).Row
            End If
            'on y colle la commande
            Cells(Ldest, Cdest) = commande
            'petit modulo pour augmenter le numéro de ligne tout en restant inférieur au nombre de commande max par jour
            Ldest = (Ldest - 45) Mod 9 + 46
            'si le prochain numéro de ligne=54 (donc dépasse les 8 commandes)
            If Ldest = 54 Then
                'on passe à la colonne suivante et on repasse en première ligne (46)
                Cdest = Cdest + 1
                Ldest = 46
            End If
        'commande suivant
        Next commande
    End If
    'on vient de placer les commandes d'un jour, on va donc passer au suivant
    'on réinitialise à la première ligne
    Ldest = 46
Next i
   
Application.ScreenUpdating = True
End Sub
 

jcrouzil

XLDnaute Nouveau
Salut,

C'est génial, je viens de tester vite fait ça marche nickel. Merci beaucoup ça me sauve la vie.
Je vais essayer de bien tout comprendre.

Si tu peux m'aider pour la couleur alors la c'est la cerise sur le gâteau.
Merci encore t'es au top !

A plus
 

vgendron

XLDnaute Barbatruc
et voila pour la couleur... j'ai mis du temps à voir que la couleur venait d'une MFC...

Code:
Sub dispatch2()
Application.ScreenUpdating = False

'zone contenant toutes les commandes à dispatcher
Set CommandToDispatch = Range("C7:EQ36")

'indices Ligne du tableau de destination
Ldest = 46


'pour chaque colonne de la zone source
For i = 3 To CommandToDispatch.Columns.Count + 2
    'si il y a au moins une commande dans la journée
    If Cells(6, i) <> 0 Then
        'on récupère les commandes de la journée: à partir de la ligne 7, on resize du nombre de commandes calculée en ligne 6
        Set ListeToDispatch = Cells(7, i).Resize(Cells(6, i))
        couleur = Cells(7, i).FormatConditions(1).Interior.ColorIndex
        'permet de décaler de 6 jours
        Cdest = i + 6
       
        'pour chaque commande de la journée
        For Each commande In ListeToDispatch
            'on regarde, s'il y a de la place (=ligne53 vide) ET qu'il y a déjà quelque chose (=ligne46 NON vide)
            If Cells(53, Cdest) = "" And Cells(46, Cdest) <> "" Then
                'on récupère l'indice de ligne de la première cellule vide
                Ldest = Cells(53, Cdest).End(xlUp).Offset(1, 0).Row
            End If
            'on y colle la commande
            Cells(Ldest, Cdest) = commande
            Cells(Ldest, Cdest).Interior.ColorIndex = couleur
            'petit modulo pour augmenter le numéro de ligne tout en restant inférieur au nombre de commande max par jour
            Ldest = (Ldest - 45) Mod 9 + 46
            'si le prochain numéro de ligne=54 (donc dépasse les 8 commandes)
            If Ldest = 54 Then
                'on passe à la colonne suivante et on repasse en première ligne (46)
                Cdest = Cdest + 1
                Ldest = 46
            End If
        'commande suivant
        Next commande
    End If
    'on vient de placer les commandes d'un jour, on va donc passer au suivant
    'on réinitialise à la première ligne
    Ldest = 46
Next i
   
Application.ScreenUpdating = True
End Sub
 

jcrouzil

XLDnaute Nouveau
Salut Vgendron,
Merci encore pour ta macro, c'est top. Pardon pour les couleurs, j'aurais du te le préciser.

J'ai juste encore un petit souci. La formule marche très bien sauf pour la colonne R qui se dispatche de façon étrange et certaines commandes disparaissent même. J'ai essayé de comprendre pourquoi et je ne m'en sors pas.
On dirait que les 6 commandes disparues sont remplacées par la colonne suivante.

De plus ce qui aurait été top c'est que si j'ajoute une commande dans une colonne déjà faite, celle-ci s'ajoute en dessous en refaisant tourner la macro et en décalant tout le reste. Idem si j'en supprime une. Il faudrait que mon tableau soit rerempli intégralement en fait. Or ici, si je fais tourner à nouveau, les commandes s'ajoutent en double.

Je te remercie encore une fois, tu ne t'imagines pas à quel point ce tableau va m'aider.

A très bientôt,
 

Discussions similaires

Réponses
8
Affichages
297

Statistiques des forums

Discussions
312 294
Messages
2 086 871
Membres
103 402
dernier inscrit
regishar