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,