XL 2016 Formule à corriger

  • Initiateur de la discussion Initiateur de la discussion XVA
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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 )
 
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

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
 
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+
 
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
 
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

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
 
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

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 ?
 
Qu'apporte cette version HasFormula ?
Il me semble que la Macro a glissé d'une ligne à partir de J157/J158. J'ai colorié les cellules décalées d'une ligne en rouge en rouge.
Pouvez-vous regarder cela en y implantant la version HasFormula ?

Merci !!

XVA
 

Pièces jointes

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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Convertir en VBA
Réponses
45
Affichages
5 K
Réponses
10
Affichages
2 K
Retour