Mise à jour de stocks
Leghe59
Messages postés
34
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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) :
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 !
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:
- Mise à jour de stocks
- Mise a jour chrome - Accueil - Applications & Logiciels
- Mise a jour windows 10 - Accueil - Mise à jour
- Mise a jour chromecast - Accueil - Guide TV et vidéo
- Mise a jour kindle - Guide
- Mise à jour libre office - Accueil - Bureautique
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
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.
- 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.
Ne fonctionne pas bien non plus...
Me colore des cases ou prix STOCK = ou <
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
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.
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.
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...
redéfini ta logique, décris-là, et puis, ensuite, pense à la syntaxe.
Bon, tant pis. Merci quand même !