XL 2016 Formule à corriger

XVA

XLDnaute Junior
=SI(OU(B10="";C10="");"";SI(C10<AUJOURDHUI();"Périmé";SI(DATEDIF(AUJOURDHUI();C10;"m")>0;DATEDIF(AUJOURDHUI();C10;"m")&" mois et ";"")&DATEDIF(AUJOURDHUI();C10;"md")&SI(DATEDIF(AUJOURDHUI();C10;"md")=1;" jour";" jours")))

Bonjour,

Je viens d'ouvrir un magasin alimentaire dans lequel je gère les dates de péremption des produits avec un fichier Excel + Macro. Par contre, voici ci-dessus une formule (récupérée dans une discussion sur ce site) que je n'arrive pas à mettre à jour. Le but est simplement d'enlever le "s" à jour quand la formule indique "0 jour".

je joins un fichier test établi ce matin afin de vous permettre de voir le principe d'utilisation que j'en fait. La ligne 10 correspond à la formule récupérée (D10) et la ligne 8 à la modification apportée (D8) et son résultat peu probant !!

En vous remerciant par avance,

XVA
 

Pièces jointes

  • 03 formule péremption.xlsx
    9.4 KB · Affichages: 9

sylvanu

XLDnaute Barbatruc
Supporter XLD
Les cellules d'additions : J62 / J94 / J 126 / J159 / J191 / J223 et J255
1- La cellule J21 n'est pas concernée ?
2- Il semble qu'il y ait un décalage de 1 ensuite.

Sauf si je n'ai rien compris, les cellules concernées sont :
VB:
'Les cellules de saisie sont :  J21 / J60 / J92 / J124 / J157 / J189 / J221 et J253
'Les cellules d'additions :     J22 / J61 / J93 / J125 / J158 / J190 / J222 et J254
Pour éviter de reprendre le travail inutilement confirmez moi ce que sont ces cellules.
( pour les feuilles, inutiles d'avoir une PJ, je me débrouillerai )
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En me basant sur ma définition des cellules concernées, voir PJ.
Il suffit de dupliquer une feuille et la macro sera dupliquée et opérationnelle, avec autant de feuilles que vous voulez.
La seule limitation est la position des cellules qui ne doit pas bouger quelle que soit la feuille.
 

Pièces jointes

  • Tableau CA 2023 - XVA Proxi V3.xlsm
    600.8 KB · Affichages: 3

XVA

XLDnaute Junior
Merci Sylvanu !

Ce sont les bonnes cellules que vous avez activé.

J'ai testé sur les différents onglets et cela fonctionne très bien ! La cellule J22 me permet d'additionner l'ensemble des cellules "addition" de la semaine, elle n'est donc pas concernée par votre programmation.

J'ai bien noté vos remarques et ne bougerais donc pas les cellules concernées par vos Macros si je dois faire évoluer le tableau.
Merci beaucoup pour votre aide qui va me permettre de finaliser le tableau complet dès demain.

Belle fin de journée Sylvanu.

PS: voulez-vous voir le tableau une fois finalisé ?

XVA
 

job75

XLDnaute Barbatruc
Bonsoir XVA, sylvanu,

Je suis étonné que cette solution alternative du post #11 ne vous intéresse pas :
En J18 il vaut mieux une formule pour mémoriser les valeurs entrées en J17 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$J$17" Or Not IsNumeric(CStr(Target(1).Value)) Then Exit Sub
Target.Select
If Left([J18].Formula, 1) <> "=" Or Not IsNumeric([J18]) Then [J18] = "="
[J18] = [J18].Formula & IIf(Target >= 0, "+", "-") & Replace(Abs(Target), ",", ".")
Target = ""
End Sub
Cela permettra de corriger les erreurs éventuelles.
Elle ne mange vraiment pas de pain.

A+
 

XVA

XLDnaute Junior
Bonsoir XVA, sylvanu,

Je suis étonné que cette solution alternative du post #11 ne vous intéresse pas :

Elle ne mange vraiment pas de pain.

A+
Bonjour job75,

Je n'avais pas vu ta réponse, désolé.

Est-il possible d'utiliser ta Macro à plusieurs endroits sur un même onglet ? (J60/61 - J92/93 - J124/125 - J157/158 - J189/190 - J221/222 - J253/254 : cellule 1 = saisie / cellule 2 = addition)

XVA
 

job75

XLDnaute Barbatruc
Comment dois-je faire pour adapter votre Macro sur mon onglet ?
Voyez le fichier joint et cette macro dans chacune des feuilles :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [J21,J60,J92,J124,J157,J189,J221,J253]) Is Nothing _
    Or Target.CountLarge > 1 Or Not IsNumeric(CStr(Target(1).Value)) Then Exit Sub
Target.Select
If Left(Target(2).Formula, 1) <> "=" Or Not IsNumeric(Target(2)) Then Target(2) = "="
Target(2) = Target(2).Formula & IIf(Target >= 0, "+", "-") & Replace(Abs(Target), ",", ".")
Target = ""
End Sub
 

Pièces jointes

  • Tableau CA 2023 - XVA Proxi V4.xlsm
    589.1 KB · Affichages: 1

XVA

XLDnaute Junior
Merci beaucoup Job75 !! Je vais me servir de votre Macro en copiant mon fichier finalisé sur votre PJ. Les cellules concernées par la Macro ne changeront pas de place. Vous avez raison, je peux ainsi modifier les nombres saisis en les visualisant.

Merci à vous deux (Sylvanu et job75) pour votre aide précieuse et efficace !

XVA
 

job75

XLDnaute Barbatruc
Il vaut mieux utiliser HasFormula :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [J21,J60,J92,J124,J157,J189,J221,J253]) Is Nothing _
    Or Target.CountLarge > 1 Or Not IsNumeric(CStr(Target(1).Value)) Then Exit Sub
Target.Select
If Not Target(2).HasFormula Or Not IsNumeric(Target(2)) Then Target(2) = "="
Target(2) = Target(2).Formula & IIf(Target >= 0, "+", "-") & Replace(Abs(Target), ",", ".")
Target = ""
End Sub
 

Pièces jointes

  • Tableau CA 2023 - XVA Proxi V5.xlsm
    589.1 KB · Affichages: 3

XVA

XLDnaute Junior
Il vaut mieux utiliser HasFormula :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [J21,J60,J92,J124,J157,J189,J221,J253]) Is Nothing _
    Or Target.CountLarge > 1 Or Not IsNumeric(CStr(Target(1).Value)) Then Exit Sub
Target.Select
If Not Target(2).HasFormula Or Not IsNumeric(Target(2)) Then Target(2) = "="
Target(2) = Target(2).Formula & IIf(Target >= 0, "+", "-") & Replace(Abs(Target), ",", ".")
Target = ""
End Sub
Qu'apporte cette version HasFormula ?
 

job75

XLDnaute Barbatruc
Je ne vois pas où est la difficulté :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, [J21,J60,J92,J124,J156,J188,J220,J252]) Is Nothing _
    Or Target.CountLarge > 1 Or Not IsNumeric(CStr(Target(1).Value)) Then Exit Sub
Target.Select
If Not Target(2).HasFormula Or Not IsNumeric(Target(2)) Then Target(2) = "="
Target(2) = Target(2).Formula & IIf(Target >= 0, "+", "-") & Replace(Abs(Target), ",", ".")
Target = ""
End Sub
Vous pouviez faire les modifications vous-même.
 

Pièces jointes

  • Tableau CA 2023 - XVA Proxi Vfinale.xlsm
    521.6 KB · Affichages: 2

XVA

XLDnaute Junior
Merci job75.

Le fait est que je ne sais pas comment afficher la page Macro afin de la modifier.... Je n'ai pas cette expérience.

Je vais aller rechercher les informations sur internent afin d'être plus autonome...

Merci beaucoup pour votre disponibilité, en tout cas.

XVA
 

Discussions similaires

Statistiques des forums

Discussions
314 629
Messages
2 111 345
Membres
111 109
dernier inscrit
djameldel