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 :

dispatcher quantité


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut dispatcher quantité
    Bonjour à tous,

    je veux une macro qui dispatche une valeur sur plusieurs ligne

    Merci
    Dernière modification par Invité ; 25/01/2020 à 15h23.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Wat, bonjour le forum,

    [Édition]
    Il semblerait que tu aies édité ton premier message. Ma réponse ci-dessous paraît complètement débile du coup...


    Trop nul en formules pour envisager une solution par ce moyen. Si une proposition VBA te convient, je te propose le code ci-dessous qui va faire rire tellement il est complexe (je suis sûr que l'on peut faire beaucoup plus simple mais je n'y arrive pas). Pense à mettre à jour le nom de l'onglet. J'ai mis Feuil1 par défaut :

    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
    Sub Macro1()
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim TS As Variant 'déclare la variable TS (Tableau des Stocks)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim J As Integer 'déclare la variable J (incrément)
    Dim K As Integer 'déclare la variable K (incrément)
    Dim P As String 'déclare la variable P (Produit)
    Dim TPS() As Variant 'déclare la variable TPS (Tableau des Produits Stockés)
    Dim QD As Integer 'déclare la variable QD (Quantité Demandé)
     
    Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
    TV = O.Range("B2").CurrentRegion 'définit le tableau des valeurs TV
    For I = 2 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        TS = O.Range("B14").CurrentRegion 'définit le tableau des stocks TS
        K = 1 'initialise la variable K
        Erase TPS 'vide le tableau TPS
        P = TV(I, 2): QD = TV(I, 3) 'définit le produit P et la quantité demandée QD
        For J = 2 To UBound(TS, 1) 'boucle 2 : sur toutes les lignes J du tableau des stocks TS (en partant de la seconde)
            If TS(J, 1) = P Then 'condition : si la donnée en colonne 1 de TS est égale au produit P
                ReDim Preserve TPS(1 To 3, 1 To K) 'redimensionne le tableau TPS des produits en stock  (3 lignes, K colonnes)
                TPS(1, K) = J + 13 'récupère le numéro de ligne dans la ligne 1 de TPS (on ajoute 13 car J = 2 donne la ligne 15)
                TPS(2, K) = TS(J, 2) 'récupère le nom de l'entrepot dans la ligne 2 de TPS
                TPS(3, K) = TS(J, 3) 'récupère la quantité de l'entrepot de ligne 3 de TPS
                K = K + 1 'incrémente K (ajoute une colonne au tableau TPS des produits en stock)
            End If 'fin de la condition
        Next J 'prochaine ligne de la boucle 2
        On Error GoTo fin 'gestion des erreur (en cas d'erreur va à l'etiquette "fin")
        Select Case QD 'agit en fonction de la quantité demandée QD
     
            Case Is <= TPS(3, 1) 'cas inférieure ou égale à la quantité du premier entrepot
                'met à jour le calcul de la quantité de l'entrepot 1
                O.Cells(TPS(1, 1), "D").Value = O.Cells(TPS(1, 1), "D").Value - QD
                O.Cells(I + 1, "E") = TPS(2, 1) 'renvoie le nom de l'entrepot dans la ligne I+1 colonne E de l'onglet O
                O.Cells(I + 1, "F") = QD 'renvoie la quantité demandée dans la cellule ligne I+1 colonne F de l'onglet O
     
            Case Is <= TPS(3, 1) + TPS(3, 2) 'cas inférieur ou égale au total des quantités des entrepots 1 à 2
                'met à jour le calcul de la quantité de l'entrepot 2
                O.Cells(TPS(1, 2), "D").Value = O.Cells(TPS(1, 2), "D").Value + O.Cells(TPS(1, 1), "D").Value - QD
                O.Cells(TPS(1, 1), "D").Value = 0 'vide le stock de l'entrepot 1
                O.Cells(I + 1, "E") = TPS(2, 1) 'renvoie le nom de l'entrepot 1 dans la ligne I+1 colonne E de l'onglet O
                O.Cells(I + 1, "F") = TPS(3, 1) 'renvoie le stock de l'entrepot 1 dans la ligne I+1 colonne F de l'onglet O
                O.Cells(I + 1, "G") = TPS(2, 2) 'renvoie le nom de l'entrepot 2 dans la ligne I+1 colonne G de l'onglet O
                'renvoie la quantité demandée moins le stock de l'entrepot 1 dans la cellule ligne I+1 colonne H de l'onglet O
                O.Cells(I + 1, "H") = QD - TPS(3, 1)
     
            Case Is <= TPS(3, 1) + TPS(3, 2) + TPS(3, 3) 'cas inférieur ou égale au total des quantités des entrepots 1 à 3
                'met à jour le calcul de la quantité de l'entrepot 3
                O.Cells(TPS(1, 3), "D").Value = O.Cells(TPS(1, 3), "D").Value + O.Cells(TPS(1, 2), "D").Value + O.Cells(TPS(1, 1), "D").Value - QD
                O.Cells(TPS(1, 1), "D").Value = 0 'vide le stock de l'entrepot 1
                O.Cells(I + 1, "E") = TPS(2, 1) 'renvoie le nom de l'entrepot 1 dans la ligne I+1 colonne E de l'onglet O
                O.Cells(I + 1, "F") = TPS(3, 1) 'renvoie le stock de l'entrepot 1 dans la ligne I+1 colonne F de l'onglet O
                O.Cells(TPS(1, 2), "D").Value = 0 'vide le stock de l'entrepot 2
                O.Cells(I + 1, "G") = TPS(2, 2) 'renvoie le nom de l'entrepot 2 dans la ligne I+1 colonne G de l'onglet O
                O.Cells(I + 1, "H") = TPS(3, 2) 'renvoie le stock de l'entrepot 2 dans la ligne I+1 colonne H de l'onglet O
                O.Cells(I + 1, "I") = TPS(2, 3) 'renvoie le nom de l'entrepot 3 dans la ligne I+1 colonne I de l'onglet O
                'renvoie la quantité demandée moins le stock des entrepots 1 à 2 dans la cellule ligne I+1 colonne J de l'onglet O
                O.Cells(I + 1, "J") = QD - (TPS(3, 1) + TPS(3, 2))
     
            Case Is <= TPS(3, 1) + TPS(3, 2) + TPS(3, 3) + TPS(3, 4) 'cas inférieur ou égale au total des quantités des entrepots 1 à 4
                'met à jour le calcul de la quantité de l'entrepot 4
                O.Cells(TPS(1, 4), "D").Value = O.Cells(TPS(1, 4), "D").Value + O.Cells(TPS(1, 3), "D").Value + O.Cells(TPS(1, 2), "D").Value + O.Cells(TPS(1, 1), "D").Value - QD
                O.Cells(TPS(1, 1), "D").Value = 0 'vide le stock de l'entrepot 1
                O.Cells(I + 1, "E") = TPS(2, 1) 'renvoie le nom de l'entrepot 1 dans la ligne I+1 colonne E de l'onglet O
                O.Cells(I + 1, "F") = TPS(3, 1) 'renvoie le stock de l'entrepot 1 dans la ligne I+1 colonne F de l'onglet O
                O.Cells(TPS(1, 2), "D").Value = 0 'vide le stock de l'entrepot 2
                O.Cells(I + 1, "G") = TPS(2, 2) 'renvoie le nom de l'entrepot 2 dans la ligne I+1 colonne G de l'onglet O
                O.Cells(I + 1, "H") = TPS(3, 2) 'renvoie le stock de l'entrepot 1 dans la ligne I+1 colonne H de l'onglet O
                O.Cells(TPS(1, 3), "D").Value = 0 'vide le stock de l'entrepot 3
                O.Cells(I + 1, "I") = TPS(2, 3) 'renvoie le nom de l'entrepot 3 dans la ligne I+1 colonne I de l'onglet O
                O.Cells(I + 1, "J") = TPS(3, 3) 'renvoie le stock de l'entrepot 3 dans la ligne I+1 colonne J de l'onglet O
                O.Cells(I + 1, "K") = TPS(4, 2) 'renvoie le nom de l'entrepot 4 dans la ligne I+1 colonne K de l'onglet O
                'renvoie la quantité demandée moins le stock des entrepots 1 à 3 dans la cellule ligne I+1 colonne J de l'onglet O
                O.Cells(I + 1, "L") = QD - (TPS(3, 1) + TPS(3, 2) + TPS(3, 3))
        End Select 'fin de l'action en fonction de la quantité demandée
        GoTo suite 'va à l'etiquette "suite"
    fin: 'etiquette
    Err.Clear 'supprime l'erreur
    MsgBox "Le total des quantités en stock ne permet pas de fournir cette commande !" 'message
    O.Rows(I + 1).Select 'sélectionne la ligne qui pose problème
    On Error GoTo 0 'annule la gestion des erreurs
    suite: 'étiquette
    Next I 'prochaine ligne de la boucle 1
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 14h47
  2. Response.Write sur plusieurs lignes
    Par simoryl dans le forum ASP
    Réponses: 2
    Dernier message: 31/08/2004, 22h49
  3. Réponses: 2
    Dernier message: 10/05/2004, 07h55
  4. TDBGrid - Un enregistrement sur plusieurs lignes
    Par BRODU dans le forum Bases de données
    Réponses: 2
    Dernier message: 09/05/2004, 07h53
  5. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45

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