Salut,
on va y aller pas à pas:
Lorsque je clique sur une cellule de Produit, la MsgBox apparaît.
Est-ce qu'il ne faudrait pas plutôt que ce soit lorsque l'on inscrit un nouveau Produit dans Feuille 1 que l'opération se déroule.
normalement, si je ne me trompe pas l'évenement change déclenche la macro lorsque un changement dans la cellule cible intervient. donc un simple clic sur la cellule ne devrait pas déclencher la macro. Maintenant si tu double clic sur une cellule cible et que tu ne changes rien dans la cellule si tu valides alors la macro va se déclencher, idem si tu modifie ou ajoute un nouveau produit et donc les msgbox vont apparaître.
2- ensuite:
C'est-à-dire que le produit soit ajouté à la liste dans Feuille 2 si et seulement si il n'y figure pas, et là qu'il nous soit confirmé par une MsgBox "Produit ajouté à Feuille 2".
la macro le fait déjà:
1 2 3 4
| Set vrech2 = .Columns(i).Find(val) 'recherche du produit
If vrech2 Is Nothing Then
.Cells(j, i).Value = val
MsgBox "1 produit ajouté !" |
quand au texte du msgbox il te suffit de modifier le texte qui se trouve entre "".
3-
+ Du coup, un moyen de contrôler que le produit est unique dans Feuille 2 serait que cela soit vérifié et confirmer "Le produit figure déjà dans la liste. Il n'a pas été rajouté"
cela aussi le code le fait :
1 2 3
| Else
MsgBox "Ce produit existe déjà !"
End If |
comme dis plus haut il te suffit de changer le texte.
4-
Précision : ma liste commence à la ligne 31 de Feuille 1, les intitulés de colonne sont en ligne 29.
+ Les Familles de produits sont dans la colonne B, et Les Produits se situent dans la colonne C.
merci pour ces précisions, comme tes produits commence à la ligne 31 et se trouve en colonne 3, il n'est pas utile d'activer la macro sur les lignes précédentes donc j'ai un peu modifié la macro. comme ceci :
1 2 3 4 5 6 7 8 9 10
| Dim val As String, val1 As String, vrech1 As Range, vrech2 As Range
Dim i As Long, j As Long
If Target.Column = 3 And Target.Row < 31 Then
Exit Sub
ElseIf Target.Column = 3 And Target.Row >= 31 Then
val = Target.Value 'produit
val1 = Target.Offset(0, -1).Value 'famille de produit
'etc.... |
remplace le début du code par celui-ci 
5- enfin
Dois-je placer la macro dans Feuille 1 ou Feuille 2 ?
note que je t'ai déjà indiqué cela :
Donc dans l'éditeur vba tu clic 2 fois sur
feuil1 dans la fenetre de gauche et
tu colles ceci:
voila çà fait pas mal on verra après si on peux mettre la cellule en surbrillance, fait ces changements et dis ce qu'il en est.
Bonne journée
ps: tes intitulés en feuil2 se trouve bien sur la première ligne ? si oui c bon, sinon change le numero de ligne ici :
Set vrech = Sheets(2).Rows(1).Find(val1)
remplce rows (1) par ton numero de ligne
@+
Partager