Mise à jour de stocks

Fermé
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021 - Modifié le 19 mai 2018 à 16:38
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 - 22 mai 2018 à 19:03
Bonjour,

Soit le classeur suivant :
ISBN PRIX FOURNISSEUR
3281553413593 10,95 FOURNISSEUR XXX
3282118102310 5,7 STOCK
3282118102310 7,50 FOURNISSEUR XXX
3760039940049 9,99 STOCK
3760039940049 12,95 FOURNISSEUR XXX
3760039940193 14,99 STOCK
3760039940193 16,90 FOURNISSEUR XXX
3760039940346 19,99 STOCK
3760039940346 19,99 FOURNISSEUR XXX

Objectif : en cas de doublon ISBN, colorer en rouge la cellule PRIX si le FOURNISSEUR XXX a augmenté ses prix par rapport au STOCK et conserver les 2 lignes, sinon supprimer la ligne FOURNISSEUR XXX

Mon début de macro qui ne fonctionne pas (ne colore pas les bonnes cases) :
Sub nouveautes()
Dim ISBN As Range
Dim dl As Long
Dim x As Long
Set ISBN = Range("A2:A" & Range("A2").End(xlDown).Row)
ISBN.CurrentRegion.Sort Key1:=ISBN, Order1:=xlAscending, Header:=xlYes
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
For x = dl To 2 Step -1
If Application.WorksheetFunction.CountIf(ISBN, Cells(x, 1)) > 1 Then
If Cells(x, 2).Value > Cells(x - 1, 2).Value Then
Cells(x, 2).Interior.ColorIndex = 3
End If
End If
Next x
End Sub


Il y a là une logique que je n'assimile pas, les (x - 1) doivent interférer quelque part...
Il doit y avoir plus simple...
Merci à tou(te)s pour votre aide !

A voir également:

2 réponses

yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 Ambassadeur 1 554
19 mai 2018 à 17:13
bonjour, je pense que la logique de base de ton code est erronée:
- pour chaque ligne, tu te poses la question "le code ISBN est-il présent plusieurs fois dans le fichier?"
- j'ai l'impression que tu supposes que, quand un code ISBN est présent plusieurs fois, la ligne au dessus a le même code ISBN que la ligne courante 

oublie un moment l'informatique, et imagine que tu dois expliquer en détail à quelqu’un comment faire cela à la main. que doit-il faire, ligne par ligne?
quand ce sera clair et correct, tu pourras passer à la programmation.
0
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
19 mai 2018 à 17:34
Je me pose la question car ISBN est la clé. S'il n'est pas en double, il n'y a rien à faire.
Et oui, je suppose que quand un code ISBN est présent plusieurs fois, la ligne au dessus a le même code ISBN que la ligne courante (d'où le tri).
Si il est en double, c'est que j'ai 2 "fournisseurs", parfois au même prix, parfois non.
Donc si l'ISBN est présent 2 fois, et que le prix est identique, je souhaite supprimer la ligne FOURNISSEUR XXX.
Par contre si FOURNISSEUR XXX est moins cher, je souhaite simplement colorer sa ligne de prix.
Je devrais comparer sur 2 cellules pour être précis :
SI ISBN en double
SI PRIX.FOURNISSEUR_XXX < PRIX.STOCK Then
Colorie Prix.FOURNISSEUR_XXX en rouge

Mais je bloque sur la syntaxe, malgré mes recherches...
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554 > Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
19 mai 2018 à 18:34
il n'est pas correct de supposer que, quand un code ISBN est présent plusieurs fois, la ligne au dessus a le même code ISBN que la ligne courante. n'oublie pas que tu fais la vérification sur chaque ligne: que va-t'il donc se passer quand tu seras remonté d'une ligne?
redéfini ta logique, décris-là, et puis, ensuite, pense à la syntaxe.
0
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
19 mai 2018 à 18:47
Ca plantera...
Bon, tant pis. Merci quand même !
0
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
22 mai 2018 à 16:29
Ne fonctionne pas bien non plus...
Me colore des cases ou prix STOCK = ou <

Sub nouveautes()
Dim ISBN As Range
Dim dl As Long
Dim x As Long
Set ISBN = Range("A2:A" & Range("A2").End(xlDown).Row)
ISBN.CurrentRegion.Sort Key1:=ISBN, Order1:=xlAscending, Header:=xlYes
dl = Cells(Application.Rows.Count, 1).End(xlUp).Row
For x = dl To 2 Step -1
If Application.WorksheetFunction.CountIf(ISBN, Cells(x, 1)) > 1 Then
If Cells(x, 1).Value = Cells(x - 1, 1) Then
If Cells(x, 3) = "STOCK" And Cells(x - 1, 3) = "FOURNISSEURXXX" And Cells(x, 2).Value < Cells(x - 1, 2).Value Then
Cells(x, 2).Interior.ColorIndex = 3
End If
End If
If Cells(x, 1).Value = Cells(x + 1, 1) Then
If Cells(x, 3) = "STOCK" And Cells(x + 1, 3) = "FOURNISSEURXXX" And Cells(x, 2).Value < Cells(x + 1, 2).Value Then
Cells(x, 2).Interior.ColorIndex = 3
End If
End If
End If
Next x
End Sub
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554
22 mai 2018 à 16:48
je pense que ton code fait ceci:

SI PRIX.STOCK < PRIX.FOURNISSEUR_XXX Then
Colorie PRIX.STOCK en rouge

Tu préféreras peut-être intervertir "STOCK" & "FOURNISSEURXXX".
0
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
22 mai 2018 à 16:55
non non, c'est bien ce que je veux faire.
Mais il me colore AUSSI des cellules si PRIX.STOCK > PRIX.FOURNISSEUR_XXX ou si PRIX.STOCK = PRIX.FOURNISSEUR_XXX...

???
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554 > Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
22 mai 2018 à 17:14
peux-tu partager ton fichier?
0
Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
Modifié le 22 mai 2018 à 18:44
0
yg_be Messages postés 23352 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 novembre 2024 1 554 > Leghe59 Messages postés 34 Date d'inscription mercredi 14 juin 2017 Statut Membre Dernière intervention 17 avril 2021
22 mai 2018 à 18:41
c'est ce que je craignais: tes prix (ta colonne F) ne sont pas des valeurs numériques: Excel les traite comme du texte, donc les comparaisons foirent.
peux-tu corriger cela globalement, d'où viennent ces valeurs?
pas de panique, il y a probablement plusieurs méthodes pour corriger ou contourner cela. j'essaie de comprendre ton contexte pour faire au mieux.
0