prévisions stocks [Résolu]

le_sablais

XLDnaute Nouveau
Bonjour à tous,

N’ayant pas été déçu des réponses pour mes anciens posts, je reviens encore vers vous.

Aujourd’hui, je voudrais votre avis sur la copie d’une donnée dans un tableau précis.

Je m’explique : Imaginez que vous travaillez pour une entreprise qui stocke des palettes pour différents clients. Un client appelle aujourd’hui et dit « pour la semaine 40 de cette année, vous aurez 32 palettes à stocker pour moi ».

J’ai donc fait une cellule où on choisi dans une liste le nom du client, et dans une autre cellule où on choisi le numéro de semaine. Il reste ensuite à écrire le nombre cité par le client.
Il serait donc intéressant ensuite d’avoir un bouton « valider » pour que ce nombre aille se copier dans un tableau de données, afin que cela soit simple pour l’utilisateur.

Pour illustrer mon idée j’ai créé un petit fichier exemple avec 3 onglets :
- Modif -> où l’on vient saisir les données
- Données -> où les données devraient être copiées
- Listes : Liste des clients et numéros de semaines.

Egalement un autre détail à prendre en compte, dans l’onglet « données », la colonne semaine se met à jour automatiquement chaque lundi. Du coup est-ce que les données copiées suivront ?

Donc si quelqu’un sait s’il est préférable d’utiliser une macro ou une formule, ça pourrait m’aider grandement !

Merci d’avance pour ceux qui se pencheront sur mon défi du jour.

Le_sablais
 

Pièces jointes

  • test modif volume.xlsx
    16.3 KB · Affichages: 27
Dernière édition:

job75

XLDnaute Barbatruc
Re : prévisions stocks

Bonjour le_sablais, le forum,

Coller cette macro dans le code de la feuille "Modif" (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, col As Variant
With Feuil2 'CodeName de la feuille de destination
  lig = Application.Match([C4], .[A:A], 0)
  col = Application.Match([B4], .[4:4], 0)
  If IsNumeric(lig) And IsNumeric(col) Then _
    .Cells(lig, col).Resize(5) = [F3:F7].Value
End With
End Sub
Elle s'exécute chaque fois qu'on modifie une cellule de la feuille.

A+
 

job75

XLDnaute Barbatruc
Re : prévisions stocks

Re,

La macro précédente suppose que pour un client et une semaine toutes les données sont entrées en F3:F7.

Si l'on veut ensuite faire une modification, il faut entrer de nouveau toutes les données.

Pour éviter cela on peut ajouter un bouton pour le transfert :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B4:C4]) Is Nothing Then Exit Sub
Dim lig As Variant, col As Variant
[F3:F7] = "" 'RAZ
With Feuil2 'CodeName de la feuille source
  lig = Application.Match([C4], .[A:A], 0)
  col = Application.Match([B4], .[4:4], 0)
  If IsNumeric(lig) And IsNumeric(col) Then _
    [F3:F7] = .Cells(lig, col).Resize(5).Value
End With
End Sub

Private Sub CommandButton1_Click() 'Transfert
Dim lig As Variant, col As Variant
With Feuil2 'CodeName de la feuille de destination
  lig = Application.Match([C4], .[A:A], 0)
  col = Application.Match([B4], .[4:4], 0)
  If IsNumeric(lig) And IsNumeric(col) Then _
    .Cells(lig, col).Resize(5) = [F3:F7].Value
End With
End Sub
Fichier joint.

A+
 

Pièces jointes

  • test modif volume(1).xlsm
    29.7 KB · Affichages: 36
  • test modif volume(1).xlsm
    29.7 KB · Affichages: 35
  • test modif volume(1).xlsm
    29.7 KB · Affichages: 32

le_sablais

XLDnaute Nouveau
Re : prévisions stocks

Re,

Très pratique cette macro que tu m'as proposé. Cependant j'ai essayé de la modifier afin de rajouter un critère : l'année. Car si je souhaite insérer une donnée pour la semaine 32 de l'année prochaine, ça copie dans la semaine 32 de cette année. J'ai donc tenté de modifié le code mais sans succès.

Je te joins le fichier

A+
 

Pièces jointes

  • test modif volume(1).xlsm
    31.3 KB · Affichages: 23
  • test modif volume(1).xlsm
    31.3 KB · Affichages: 20
  • test modif volume(1).xlsm
    31.3 KB · Affichages: 19

job75

XLDnaute Barbatruc
Re : prévisions stocks

Re,

Là il faut utiliser le nom (Name) "Données" pour concaténer les plages :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B4:D4]) Is Nothing Then Exit Sub
Dim lig As Variant, col As Variant
[F3:F7] = "" 'RAZ
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  [F3:F7] = Feuil2.Cells(lig, col).Resize(5).Value
End Sub

Private Sub CommandButton1_Click() 'Transfert
Dim lig As Variant, col As Variant
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  Feuil2.Cells(lig, col).Resize(5) = [F3:F7].Value
End Sub
Et revoyez la liste des semaines : il y faut juste les nombres de 1 à 53.

A+
 

job75

XLDnaute Barbatruc
Re : prévisions stocks

Re,

Je rajoute les 2 tests If [C4] & [D4] = "" Then Exit Sub :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B4:D4]) Is Nothing Then Exit Sub
Dim lig As Variant, col As Variant
[F3:F7] = "" 'RAZ
If [C4] & [D4] = "" Then Exit Sub
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  [F3:F7] = Feuil2.Cells(lig, col).Resize(5).Value
End Sub

Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] = "" Then Exit Sub
Dim lig As Variant, col As Variant
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  Feuil2.Cells(lig, col).Resize(5) = [F3:F7].Value
End Sub
A+
 

le_sablais

XLDnaute Nouveau
Re : prévisions stocks

Bonjour,

Je relance le sujet, car il m'a été imposé une nouvelle contrainte.

Serait-il possible d'ajouter une date de sortie ?

Je m'explique : jusqu'ici on peut ajouter des données de manière ponctuelles (ex : semaine 40, j'ajoute 120). Mais aujourd'hui je voudrais par exemple ajouter 120 de la semaine 40 à la semaine 52. Y-a-t-il un moyen pour éviter de remplir chaque semaine une par une ou d'aller dans la base faire des copier-coller qui peuvent induire en erreur les utilisateurs peu expérimentés ?

Merci d'avance

Le_sablais
 

job75

XLDnaute Barbatruc
Re : prévisions stocks [Résolu]

Bonjour le_sablais,

Cette nouvelle demande n'est pas d'une limpidité absolue.

Mais voyez ce fichier (2) avec les listes de validation en G3:G7 et cette nouvelle macro :

Code:
Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] = "" Then Exit Sub
Dim lig As Variant, col As Variant, i As Byte
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  Feuil2.Cells(lig, col).Resize(5) = [F3:F7].Value
For i = 0 To 4
  If [G3].Offset(i) <> "" Then
    lig = Application.Match([G3].Offset(i) & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
    If IsNumeric(lig) And IsNumeric(col) Then _
      Feuil2.Cells(lig + i, col) = [F3].Offset(i)
  End If
Next
End Sub
A+
 

Pièces jointes

  • test modif volume(2).xlsm
    31 KB · Affichages: 22

le_sablais

XLDnaute Nouveau
Re : prévisions stocks [Résolu]

Bonjour,

Désolé si ma demande n'a pas été limpide.

Je vais essayer de reformuler.

Nous sommes aujourd'hui en semaine 34. Le client "Dupont" m'appelle pour me dire qu'il va devoir stocker 50 palettes à partir de la semaine 40, et ce, pendant 5 semaines.

Les données seront donc les mêmes les semaines 40, 41, 42, 43, et 44.

J'essaye donc de trouver un moyen pour faire soit :

Semaine 40 -> 50 palettes ; durée : 5 semaines

soit :

Date d'entrée : semaine 40 -> 50 palettes; Date de sortie : semaine 44.

Ayant beaucoup de demandes de ce genre, j'essaye de trouver le moyen le plus simple pour éviter de rentrer plusieurs fois la même données pour plusieurs semaines.

J'espère que c'est compréhensible...

A vous lire

Le_sablais
 

job75

XLDnaute Barbatruc
Re : prévisions stocks [Résolu]

Re,

Maintenant c'est clair.

Pour se simplifier la vie, il faut que les semaines à traiter se suivent chronologiquement en feuille "Données".

Alors ce n'est pas très compliqué :

Code:
Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] = "" Then Exit Sub
Dim lig As Variant, col As Variant, n&
lig = Application.Match([C4] & [D4], [Données!A1:A5000&Données!B1:B5000], 0)
col = Application.Match([B4], Feuil2.[4:4], 0)
n = Abs(Int(Val([D6]))) 'nombre de semaines
If n = 0 Then n = 1
[D6] = n
If IsNumeric(lig) And IsNumeric(col) Then
  For n = 0 To n - 1
    Feuil2.Cells(lig, col).Resize(5).Offset(5 * n) = [F3:F7].Value
  Next
End If
End Sub
Fichier (3).

A+
 

Pièces jointes

  • test modif volume(3).xlsm
    31.1 KB · Affichages: 27

le_sablais

XLDnaute Nouveau
Re : prévisions stocks [Résolu]

Merci ! C'est exactement ça que je cherchais !

je l'ai adapté sur mon fichier de base, ça fonctionne, cependant j'ai ajouté un nouveau critère : la température. les données se copient pour toutes les températures alors que j'en ai choisi une seule.

un exemple vaut mieux qu'un long discours. Je joins le fichier exemple.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B4:E4]) Is Nothing Then Exit Sub
Dim lig As Variant, col As Variant
[G3:G7] = "" 'RAZ
If [C4] & [C4] & [E4] = "" Then Exit Sub
lig = Application.Match([C4] & [D4] & [E4], [Base_modif_volumes!A1:A5000&Base_modif_volumes!B1:B5000&Base_modif_volumes!D1:D5000], 0)
col = Application.Match([B4], Feuil2.[1:1], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  [G3:G7] = Feuil2.Cells(lig, col).Resize(5).Value
End Sub

Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] & [E4] = "" Then Exit Sub
Dim lig As Variant, col As Variant, n&
lig = Application.Match([C4] & [D4] & [E4], [Base_modif_volumes!A1:A5000&Base_modif_volumes!B1:B5000&Base_modif_volumes!D1:D5000], 0)
col = Application.Match([B4], Feuil2.[1:1], 0)
n = Abs(Int(Val([E6]))) 'nombre de semaines
If n = 0 Then n = 1
[E6] = n
If IsNumeric(lig) And IsNumeric(col) Then
For n = 0 To n - 1
  Feuil2.Cells(lig, col).Resize(5).Offset(5 * n) = [G3:G7].Value
Next
End If
End Sub
 

Pièces jointes

  • test modif volume (4).xlsm
    59.6 KB · Affichages: 19
  • test modif volume (4).xlsm
    59.6 KB · Affichages: 23
  • test modif volume (4).xlsm
    59.6 KB · Affichages: 17

job75

XLDnaute Barbatruc
Re : prévisions stocks [Résolu]

Bonjour le_sablais,

C'est bien, vous avez compris comment fonctionnent les matrices dans Application.Match.

Si les températures se suivent toujours avec un pas de 15 remplacer 5 * n par 15 * n.

On peut aussi écrire :

Code:
Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] & [E4] = "" Then Exit Sub
Dim lig As Variant, col As Variant, n&
lig = Application.Match([C4] & [D4] & [E4], [Base_modif_volumes!A1:A5000&Base_modif_volumes!B1:B5000&Base_modif_volumes!D1:D5000], 0)
col = Application.Match([B4], Feuil2.[1:1], 0)
n = Abs(Int(Val([E6]))) 'nombre de semaines
If n = 0 Then n = 1
[E6] = n
If IsNumeric(lig) And IsNumeric(col) Then
  For n = 0 To n - 1
    Feuil2.Cells(lig + 15 * n, col).Resize(5) = [G3:G7].Value
  Next
End If
End Sub
Fichier (4) modifié.

A+
 

Pièces jointes

  • test modif volume (4).xlsm
    57.7 KB · Affichages: 18
  • test modif volume (4).xlsm
    57.7 KB · Affichages: 23
  • test modif volume (4).xlsm
    57.7 KB · Affichages: 23

job75

XLDnaute Barbatruc
Re : prévisions stocks [Résolu]

Re,

Un détail, il est mieux de paramétrer le nom de la feuille "Base_modif_volumes" :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [B4:E4]) Is Nothing Then Exit Sub
Dim nom$, lig As Variant, col As Variant
[G3:G7] = "" 'RAZ
If [C4] & [D4] & [E4] = "" Then Exit Sub
nom = "'" & Feuil2.Name & "'!"
lig = Application.Match([C4] & [D4] & [E4], Evaluate(nom & "A1:A5000&" & nom & "B1:B5000&" & nom & "D1:D5000"), 0)
col = Application.Match([B4], Feuil2.[1:1], 0)
If IsNumeric(lig) And IsNumeric(col) Then _
  [G3:G7] = Feuil2.Cells(lig, col).Resize(5).Value
End Sub

Private Sub CommandButton1_Click() 'Transfert
If [C4] & [D4] & [E4] = "" Then Exit Sub
Dim nom$, lig As Variant, col As Variant, n&
nom = "'" & Feuil2.Name & "'!"
lig = Application.Match([C4] & [D4] & [E4], Evaluate(nom & "A1:A5000&" & nom & "B1:B5000&" & nom & "D1:D5000"), 0)
col = Application.Match([B4], Feuil2.[1:1], 0)
n = Abs(Int(Val([E6]))) 'nombre de semaines
If n = 0 Then n = 1
[E6] = n
If IsNumeric(lig) And IsNumeric(col) Then
  For n = 0 To n - 1
    Feuil2.Cells(lig + 15 * n, col).Resize(5) = [G3:G7].Value
  Next
End If
End Sub
Ainsi on peut modifier le nom, y mettre des espaces...

Fichier (5).

A+
 

Pièces jointes

  • test modif volume (5).xlsm
    56.6 KB · Affichages: 40

Discussions similaires

Statistiques des forums

Discussions
312 480
Messages
2 088 757
Membres
103 950
dernier inscrit
Thomas Solioz