Recherche valeur VBA Excel

Fermé
coucou ,
je cherche un code VBA pour recherche un code produit X dans une colonne (code produit) et de afficher la valeur de stock correspondante dans la colonne à côté (colonne stock théorique)

complication : le code produit x se répète, j'aimerai chercher en boucle jusqu'à retrouver la dernière valeur qui ne se répète pas : cela correspond à la valeur la plus récente

j espère que quelqu'un de super fort en VBA Excel entendra mon appel à l'aide :) !!! ça m'empêche d'avancer depuis un moment ce problème

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    Bonjour,

    Es tu obligé d'utiliser VBA pour résoudre ce Pb ?

    En effet le pb peut ^tre réglé avec une formule.....
    1. bonjour michel,

      oui en effet je lui fait avec vba mais c'est possible plus simplement avec les fonctions
    2. j'ai déjà essayer 2 fonctions :
      =INDEX($I$1:I57;MAX(SI((SUPPRESPACE($H$1:H157)=SUPPRESPACE(E2))*(LIGNE($I$1:I57)<LIGNE());LIGNE($I$1:I57)))-1)

      =SI(NB.SI(D12:D174;D11)=0;"inconnu";INDIRECT("X"&MAX(SI(D12:D174=D11;LIGNE(X12:X174)))))

      aucune ne marche !! j'ai fini par me dire que je devrais essayer de créer une Macro VBA qui va exécuter cette tâche plus facilement mais ça coince encore au niveau du code VBA
  2. bonjour,

    dans l'idée ça donne ca:

    Sub bidule()
    Dim i As Integer
    i = 1 'si c'est la premiere ligne

    If Cells(i, 1).Value = "binz" Then
    Cells(i, 2).Value = "valeur stock" 'je ne sais pas ou est ta valeur
    i = i + 1
    End If

    End Sub
    1. Contributeur
      à biboupifa

      c'est la dernière valeur du produit que veut le demandeur

      Pour jiandal

      tu es prié de ne pas créer des doublons (cf forum bureautique) donc tu le supprimes

      Il n'y a pas besoin d'être "super-fort" pour écrire ce qui suit ! :-(

      en VBA:
      Sub chercher_stock()
      Dim Produit As String, Lig As Integer
      
      Produit = Range("D3")
      On Error GoTo vide
      Lig = Columns("A").Find(Produit, , , , , xlPrevious).Row
      MsgBox "dernier stock de " & Produit & ": " & Cells(Lig, "B")
      Exit Sub
      vide:
      MsgBox "produit inconnu", vbCritical
      End Sub


      Maquette à adapter à ton contexte
      https://www.cjoint.com/?3GsoLL699UA

      je te complète avec la formule (pas si simple que veut le dire notre ami)
      1. Contributeur
        Et voilà la formule

        =INDIRECT("B"&MAX(SI(A2:A200=D3;LIGNE(A2:A200))))

        IMPORTANT:
        Formule matricielle à valider par « ctrl+maj+entrée » (et non directement par « entrée »), le curseur clignotant dans la barre de formule; Excel encadre alors automatiquement la formule par des {}
      2. merci pour ta réponse michel , pourrais tu me dire à quoi correspond le "B" dans la formule .
      3. Contributeur
        B c'est la colonne des stocks dans ma maquette et "A" celle des produits

        A3:A200 --> pour 200 , tu peux mettre ce que tu veux (nombre maxi de lignes prévisible

        La fonction INDIRECT donne la valeur du stock sur la ligne du produit. dans ma maquette

        MAX(SI(A2:A200=D3;LIGNE(A2:A200)) donne la ligne 44
        donc la valeur du stock est dans B44 et indirect(B44) = valeur stock

        A propos, je te signale que ma formule que tu reprends (il est d'usage de citer l'auteur, merci)
        =SI(NB.SI(D12:D174;D11)=0;"inconnu";INDIRECT("X"&MAX(SI(D12:D174=D11;LIGNE(X12:X174)))))
        fonctionne et est une matricielle à valider par « ctrl+maj+entrée » comme indiquée + haut
        Et visiblement comme le 16 et le 17, tu n'as pas fait l'effort de lire comment valider une formule Matricielle
        Ce n'est pas sérieux de ta part

        Bonne soirée