Recherche valeur VBA Excel
Fermé
jiandal
-
michel_m Messages postés 16602 Date d'inscription Statut Contributeur Dernière intervention -
michel_m Messages postés 16602 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
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
A voir également:
- Recherche valeur VBA Excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
4 réponses
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
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
à 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:
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)
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)
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
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
oui en effet je lui fait avec vba mais c'est possible plus simplement avec les 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