Soustraction avec sauvgarde de la nouvelle valeur

Non, je te rassure : tu n'abuses pas ! pour moi aussi, quand j'ai débuté, c'était pas évident !

voici donc les infos complémentaires nécessaires :

Alt F11 ➯ fenêtre de "Microsoft Visual Basic" (qu'on appelle aussi "Éditeur VBA") :

screen

Dans ton fichier réel, sélectionne la feuille "TRI" même si c'est par exemple Feuil5 au lieu de Feuil2.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
    If .Count > 1 Then Exit Sub
    If .Address <> "$B$4" Then Exit Sub
    If Len(.Value) <> 15 Then Exit Sub
    If [B9] = "" Or [B9] = "Référence inconnue" Then Exit Sub
    Dim chn$, col%, lig As Byte: chn = RTrim$([D4])
    chn = Right$(chn, Len(chn) - InStr(chn, " ")): col = Val(chn) + 1
    For lig = 17 To 71 Step 6
      chn = Cells(lig, col)
      If Len(chn) = 15 Then
        If chn = .Value Then
          If Cells(lig - 1, col) = [B9] Then
            With Cells(lig + 3, col)
              If IsNumeric(.Value) Then _
                .Value = WorksheetFunction.Max(0, .Value - 1)
              Exit Sub
            End With
          End If
        End If
      End If
    Next lig
  End With
End Sub

N'oublie pas de refaire Alt F11 pour retourner sur Excel ; si tu as besoin de plus d'infos, n'hésite pas.

dhany

Merci,

A part cette manip rien à faire d'autre ?

PLUMEA

ben non : normalement, ça doit réagir quand tu modifies B4 et que les conditions sont réunies : rencontre du GTIN et aussi : la référence doit être identique à B9 (pour l'exemple donné : B16 doit être égal à B9 : X5).

dhany

Bonjour PLUMEA,

« pas de nouvelles, bonnes nouvelles », alors je suppose que t'as réussi à faire tourner mon code VBA dans ton vrai fichier.

dhany

Bonjour dhany,

Non je n'y suis pas encore arrivé mais je me suis arrêté de travailler dessus hier dans la soirée.

Je ne sais pas si je pourrais y toucher aujourd'hui mais dans tous les cas je reviendrais vers vous pour vous tenir au courant et si besoin vous poser encore quelques questions,

Merci de votre intérêt,

Cordialement,

PLUMEA.

Bonjour dhany,

Après multiples tentatives infructueuses, j'ai essayé de simplement prendre mes données pour les copier dans ton fichier Excel et rien à faire la macro ne fonctionne plus,

Cordialement,

PLUMEA.

dans ce cas : peux-tu joindre ton fichier (sans données confidentielles) ?

dhany

J'ai réussi à changer toutes les feuilles seulement quand je veux changer les références de "BASE DE DONNEE" et de "GTIN" cela ne fonctionne plus,

Oui bien sûr,

4tri-pgi-forum.xlsm (96.28 Ko)

j'essaie de chercher la modification à apporter dans le code mais à vrai dire ce n'est pas facile,

PLUMEA.

Je viens de vérifier : tu as mis mon code VBA dans le module de la feuille "TRI" : c'est bien ça : ok ! et justement, mon code est fait pour fonctionner uniquement pour la feuille "TRI" ; regarde cette image :

screen

En B20, il y a : 7 ; en B4 : appui sur les touches F2 puis Entrée : GTIN est identique et la référence S111 aussi

➯ ça décrémente B20 : 7 ; 6 ; 5 ; ... ; 0 ; c'est bien ce qui était prévu.

Par contre, pour les liens avec la feuille "GTIN" : j'pensais qu'y'avait qu'les formules pour ça, pas le code VBA !

Pour les liens avec la feuille "BASE DE DONNEE", ça risque d'être difficile vu que cette feuille existe pas !

(mais peut-être veux-tu parler de la feuille "BASE ARTICLE" ? si oui, même remarque que pour la feuille "GTIN")

dhany

Oui pardon je parlais de la feuille "base article",

Si je modifie cette feuille et la feuille GTIN le F2+Enter ne fonctionne plus (dans mon vrai fichier j'ai plus de 2000 lignes en "base article") est ce que le problème peut provenir d'ici ?

Mon code VBA étant dans le module de la feuille "TRI", cela signifie que la modif d'une cellule n'est détectée que sur la feuille "TRI" (et le F2+Enter est considéré comme une modif de cellule) ; ce que je viens d'écrire est valable pour n'importe quelle cellule de la feuille, mais j'ai écrit mon code VBA pour que ça ne réagisse que pour une modif de la cellule B4 (ta plage fusionnée B4:C6 étant prise comme une seule cellule B4) ; de plus, ne pas oublier que la diminution de 1 se fait pour ces 2 conditions successives : a) identité du GTIN puis b) identité de la Référence.

Si tu fais F2+Enter sur une autre feuille que la feuille "TRI", c'est tout à fait normal que ça ne fasse rien, même si c'est en cellule B4.


Juste pour info : sur ta feuille "Requête", cellule B12, ta donnée est : "Palette 1 " (y'a un espace en trop à la fin) ; même feuille, cellule B23 : idem ➯ à corriger !

dhany

J'ai compris ce point là c'est seulement que je ne comprend par pourquoi ça ne marche pas alors que je change des feuilles qui ne sont pas liées à la macro,

j'ai une piste, dans mon vrai fichier mes codes barres font 12 caractères et non pas 15 comme dans le fichier que je vous aies envoyé. Est-ce que le problème peut venir de là ?

Encore merci pour toute cette attention,

Cordialement,

PLUMEA.

J'y suis arrivé !!!!!!!!!!

C'est la longueur du code barre qui n'allait pas :/ J'ai remplacé 15 par 12 dans le code est il marche maintenant !!

Merci dhany,

Si j'ai des nouvelles interrogations puis-je vous contacter ?

Cordialement,

PLUMEA.

oh là ! j'étais sûr que tous les GTIN faisaient tous 15 caractères, moi !!! d'où cette instruction dans mon code VBA :

If Len(.Value) <> 15 Then Exit Sub dans ce cas, change le 15 en 12 : If Len(.Value) <> 12 Then Exit Sub

si tu veux que ça marche pour des GTIN de longueur variable, par exemple entre 12 et 20 caractères, tu peux mettre :

If Len(.Value) < 12 Or Len(.Value) > 20 Then Exit Sub

alors c'est sûr qu'après la correction, ça marchera mieux dans ton vrai fichier !

dhany

nos messages se sont croisés ; je viens de lire ton message de 13:40 ; si tu as de nouvelles interrogations, écrit un nouveau post dans cette discussion s'il s'agit du même sujet ; sinon : crée un autre sujet.

si c'est confidentiel, tu peux me contacter en MP (Message Privé).

dhany

Merci encore,

Super,

Si mes connaissances en VBA deviennent meilleures, puis-je automatiser l'action F2+Entrer?

Cordialement,

PLUMEA.

attention : il y a 2 choses différentes à ne pas confondre :

1) sans même parler de programmation VBA, quand tu es sur une feuille Excel, la touche F2 te permet de passer en mode "modification de cellule" (pour la cellule active) ; et si tu refais F2, ça sort du mode en question ; la touche Entrée permet de valider la saisie.

2) le code VBA est normalement mis dans un module "classique" tel que Module1 ou Module2 ; quand on écrit un code VBA qui doit réagir à un événement (par exemple la modification d'une cellule), on écrit alors des procédures événementielles telles que la sub Worksheet_Change(...) qu'on doit placer dans le module de la feuille concernée ; ça a été fait avec le module de la feuille "TRI" ; et c'est cela que tu appelles « automatiser l'action F2+Entrer » ; car plus exactement : c'est « automatiser un traitement suite à la détection de la modif d'une cellule précise ».

Info supplémentaire : pour du code VBA devant réagir à des événements concernant le classeur, on écrit des procédures événementielles telles que la sub Workbook_Open() qui doivent être placées dans le module spécial ThisWorkbook.

dhany

Donc il n'est pas possible que le stock se décrémente simplement quand on scan un nouveau GTIN ?

Comment puis-je apprendre le VBA facilement ? Sur YouTube ? Internet ?

PLUMEA

La douchette qui te sert à scanner un code GTIN n'est qu'un périphérique d'entrée : au final, le code GTIN se trouve dans une cellule ; après c'est de l'Excel : il faut utiliser le contenu de cette cellule pour le but que tu veux atteindre ; il y a aussi des logiciels de gestion de stock spécialisés, avec traitement des reliquats, méthodes LIFO (Last In First Out) ou FIFO (First In First Out), etc...


Pour apprendre le VBA, tu peux déjà commencer par un site que tu connais bien :

cours vba xlp

Tu peux aussi faire une recherche google avec ces mots : « cours vba gratuit »

Attention : quand on débute en VBA, on ne commence pas par écrire des procédures événementielles !

c'est un type de programmation spécial qu'on apprend plus tard !

dhany

Je comprend bien mais je ne peux pas laisser aux opérateurs la manipulation F2+Entrer sinon les erreurs et oublies seront trop important

Merci bien,

PLUMEA

Rechercher des sujets similaires à "soustraction sauvgarde nouvelle valeur"