prévisions stocks [Résolu]

  • Initiateur de la discussion Initiateur de la discussion le_sablais
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Dernière édition:
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+
 
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

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

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+
 
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+
 
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
 
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

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
 
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

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

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

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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
16
Affichages
846
Réponses
2
Affichages
881
  • Question Question
XL 2016 planning
Réponses
0
Affichages
677
Retour