Recherche valeur VBA Excel

Fermé
jiandal -  
michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour,

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

    En effet le pb peut ^tre réglé avec une formule.....
    0
    1. biboupifa Messages postés 54 Statut Membre
       
      bonjour michel,

      oui en effet je lui fait avec vba mais c'est possible plus simplement avec les fonctions
      0
    2. jiandal
       
      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
      0
  2. biboupifa Messages postés 54 Statut Membre
     
    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
    0
  3. biboupifa Messages postés 54 Statut Membre
     
    ta complication je ne la comprends pas
    0
  4. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    à 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)
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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 {}
      0
    2. jiandal
       
      merci pour ta réponse michel , pourrais tu me dire à quoi correspond le "B" dans la formule .
      0
    3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0