Selection cellule par sa valeur [Résolu]

Messages postés
6
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
- - Dernière réponse : bensoln
Messages postés
6
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
- 12 mai 2011 à 15:53
Bonjour,
Je suis nouveau sur le forum, et comme vous vous en doutez je viens dans le but de vous exposer un joli petit problème. Je suis actuellement en charge de la création d'un inventaire tournant sous Excel. Pour essayer de faire quelque chose d'assez sympa et automatisé, une multitude de macro sont déja présentent dans le modèle.

Bref, pour faire court, j'ai une page mouvement qui me permet de enregistrer les entrées et/ou sorties d'un article sélectionné. Pour mettre à jour les stocks de ma page inventaire, j'aimerais par un système de recherche, trouver la ligne du produit en question et la sélectionner pour que sa valeur du stock soit remit à jour.
Cependant je n'ai aucune idée de la marche a suivre, et depuis maintes et maintes tentatives je commence à broyer du noir

Ma macro fonctionne bien, cependant la valeur d'actualisation du stock dans la page mouvement, ne s'enregistre pas sur la bonne ligne... Voila pourquoi la sélection de la ligne est primordiale.


Je vous joint le fichier pour que vous compreniez mieux.
http://cjoint.com/11mi/AEkpcIgdJQf.htm

Le mot de passe d'entrée est: stagiaire

J'espère avoir été assez clair, et j'attends vos réponses au plus vite.
Un grand merci
Benjamin
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
6
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
3
Merci
Au final c'est bon..

Après plusieurs jours de recherche, j'ai enfin compris que la fonction qui m'était nécessaire était:
 For Each cellule In Range("nom_produit")
 i = i + 1
 If cellule.Value = produit_choisi Then
Range("quantité_stock").Cells(i).Value = stock_postmouvement


Merci à toi Hélène, d'une certaine manière c'est toi qui m'a mit sur la voie Bonne continuaition

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 145 internautes nous ont dit merci ce mois-ci

Commenter la réponse de bensoln
Messages postés
6
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
Commenter la réponse de bensoln
Messages postés
27
Date d'inscription
jeudi 5 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
0
Merci
Bonjour Benjamin,
Peux-tu mettre la partie du code concernée par cette opération ? Je n'ai pas accès à ton fichier.
Comme ça, je pense qu'utiliser une boucle Do...Loop While peut marcher :

i=0
do
    i=i+1
loop while pdt=cells(i,col_nom_produit).value 
num_ligne_produit=i
cells(num_ligne_produit,col_valeur_stock).value=valeur_stock_MAJ

Commenter la réponse de heleneML
Messages postés
6
Date d'inscription
lundi 2 mai 2011
Statut
Membre
Dernière intervention
18 mai 2011
0
Merci
Le code se décompose en 2 fonctions.
Une troisième est également appliqué à mon bouton de validation, mais elle n'a en aucun cas à voir avec cet exemple d'opération.
Il fait un peu barbare, mais la validation de ce code est sensé apporté pas mal de modifications
Sub Valid_mvmt()
'saisie de données
Dim ddate As Date
Dim pprod As String
Dim op As String
Dim vvaleur As Integer

'emplacement des données
pprod = Range("c5").Value
op = Range("c6").Value
vvaleur = Range("c7").Value
ddate = Format(Range("c8").Value, "dd/mm/yyyy")
vdiff = Range("c11").Value

'renseignement des données obligatoires
If op "" Or vvaleur 0 Or ddate = 0 Or pprod = "" Then
MsgBox ("Toutes les zones doivent être renseignées")
Exit Sub
End If


Select Case op
    Case "Commande"
            rep2 = MsgBox("Vous allez mettre à jour les commandes, Voulez vous continuer ?", vbYesNo)
                If rep2 = vbYes Then
                    Range("c6:c7").ClearContents
                    Worksheets("Commande").Range("a1").Activate
                    
                    Cells.Find(What:=pprod, After:=ActiveCell, LookIn:=xlValues, _
                    lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
                    MatchCase:=False, SearchFormat:=False).Activate
                    
                    Cells(ActiveCell.Row, 2).Value = ddate
                    Cells(ActiveCell.Row, 3).Value = vvaleur
                    Cells(ActiveCell.Row, 4).Value = "Non"
                    Call maj(ddate, pprod, op, vvaleur, "")
                End If
                
    Case "Inventaire"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 5).Value = vvaleur
        Call maj(ddate, pprod, op, vvaleur, "")

    Case "Entrée"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 5).Value = Cells(ActiveCell.Row, 5).Value + vvaleur
        Call maj(ddate, pprod, op, vvaleur, "")
       
    Case "Sortie"
        If message1 = 0 Then Exit Sub
        Cells(ActiveCell.Row, 5).Value = Cells(ActiveCell.Row, 5).Value - vvaleur
        Call maj(ddate, pprod, op, vvaleur, "")
    End Select
Worksheets(2).Select
 
End Sub
Private Function message1()
message1 = 0
rep = MsgBox("Vous allez mettre à jour le stock, Voulez vous continuer ?", vbYesNo)
    
    If rep = vbYes Then
    Range("c6:c7").ClearContents
        Worksheets("Page de garde ").Select
        Cells.Find(What:=pprod, After:=ActiveCell, LookIn:=xlFormulas, _
            lookat:=xlWhole, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
    message1 = 1
    End If

End Function


Sur mon classeur, ta boucle serait équivalente à:
i=0
do
    i=i+1
loop while pprod=cells(i,A).value 
num_ligne_produit=i
cells(num_ligne_produit,E).value=vvaleur


J'ai essayé de l'employer mais elle ne fonctionne pas, ou alors c'est que je ne l'emploit pas au bon endroit, puisqu'elle vient bloquer le modèle

Je te remercie tout de même de porter un intérêt à mon problème
Commenter la réponse de bensoln