Macro colle valeur à la ligne de la bonne référence du produit

Bonjour,

J'aimerais une macro qui copie une cellule et la colle face à la ligne en fonction de la référence indexée dans une colonne un peu comme les fonctions RECHERCHEVouH.

Exemple :

La feuille1 sert à modifier le prix des articles du catalogue par un bouton avec une macro qui va prendre le nouveau prix en B2 et va le coller dans la feuille2 en recherchant la référence du produit en A1(feuille1) dans la colonne A de la feuille2 pour coller le prix dans la colonne B

La feuille2 sert de catalogue et base de données des produits

Feuille1 -> Cellule A1 : Référence du produit subissant une modification de prix

Feuille1 -> Cellule B1 : Nouveau prix à enregistrer manuellement

Feuille 2 -> Colonne A : Toutes les références des produits du catalogue

Feuille 2 -> Colonne B : Les prix de chaque produit

Feuille 2 -> Colonne C : Le nom de chaque produit

MERCI POUR VOTRE AIDE

Cdt

Bonjour,

Voici un essai avec les informations fournies. Si le produit existe, on remplace le prix dans la feuille 2 et s'il n'existe pas, on ajoute le produit à la base. Pour l'instant, le code ne tient pas compte du nom de produit mais seulement de la référence. Il faudra alors remplacer les B par des C sur la ligne avant le end if dans majprix.

Il faut que vous saisissiez vos vrais noms de feuille.

La macro majprix est à coller dans un module normal tandis que la seconde worksheet_change doit être insérée dans le module de la feuille 1 (celle sur laquelle on modifie le prix). Alors, à chaque changement de la cellule B1, elle se déclenchera.

'MODULE NORMAL
Sub majprix()

dim f1 as worksheet, f2 as worksheet, lig&, nvl&

if msgbox("Voulez-vous mettre à jour le catalogue ?", vbyesno, "Demande de confirmation") <> vbyes then exit sub

set f1 = sheets("Feuil1"): set f2 = sheets("Feuil2") '<<<ADAPTER NOMS DE FEUILLE

if f1.Range("B1").value = "" then exit sub

if application.countif(f2.columns(1), f1.range("A1").value) > 0 then 'si la référence existe en colA de f2
    lig = application.match(f1.range("A1").value, f2.columns(1), 0) 'ligne corresp.
    f2.range("B" & lig).value = f1.range("B1").value 'cellule en B de f2 modifiée, prend valeur de B1 de f1
else 'sinon, si existe pas encore
    nvl = f2.cells(f2.rows.count, 1).end(xlup).row + 1 'première ligne vide de col1 de f2
    f2.range("A" & nvl & ":B" & nvl).value = f1.range("A1:B1").value 'la nouvelle ligne de f2 prend valeurs de A1 et B1 de f1
end if

f1.range("B1").clearcontents 'contenu B1 de f1 effacé
msgbox "mise à jour effectuée"

end sub

'MODULE DE LA FEUILLE 1
private sub worksheet_change(byval target as range)
if target.address = "$B$1" and target.value <> "" and target.count = 1 then 'si changement sur B1 de f1
    application.enableevents = false 'desact evenemts
    Call majprix 'lancement macro
    application.enableevents = true 'reactiv evnts
end if
end sub

Cdlt,

Bonjour 3GB,

Merci beaucoup pour votre aide ! c'est très complet et bien expliquer.

Seulement, j'ai pas été suffisamment précis je pense… je suis désolé.

Je ne souhaite pas que le prix se modifie tout seul dès que B1 change, je souhaite qu'un bouton avec une macro affectée modifie le prix uniquement quand le bouton est cliqué… Pensez-vous pouvoir adapter vos codes pour cette idée svp? :)

Merci pour votre contribution à mon projet

Bonjour,

Dans ce cas, il ne faut pas tenir compte de la seconde macro. Vous copiez uniquement majprix dans un module standard.

Ensuite, il ne reste plus qu'à insérer un bouton sur la feuille 1 et faire clic droit / affecter une macro / majprix...

Si vous rencontrez un bug lors de l'execution, merci de m'indiquer la ligne sur laquelle porte l'erreur ainsi que le message d'erreur .

J'ai quand même fait une toute petite modification (ne rien faire si B1 est vide car je l'avais fait sur la seconde macro).

Cdlt,

Merci beaucoup !!! Je vais essayer et reviens vers vous

Merci beaucoup cela fonctionne ! :D

Génial ! Bonne continuation !

Cdlt,

Rechercher des sujets similaires à "macro colle valeur ligne bonne reference produit"