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
Bonjour XVA,
Essayez :
VB:
=SI(OU(B8="";C8="");"";SI(C8<AUJOURDHUI();"Périmé";SI(DATEDIF(AUJOURDHUI();C8;"m")>0;DATEDIF(AUJOURDHUI();C8;"m")&" mois et ";"")&DATEDIF(AUJOURDHUI();C8;"md")&SI(OU(DATEDIF(AUJOURDHUI();C8;"md")=1;DATEDIF(AUJOURDHUI();C8;"md")=0);" jour";" jours")))
Le OU permet de mettre "jour" si 0 ou 1, au delà il met "jours"
 

XVA

XLDnaute Junior
Bonjour Sylvanu,

Je viens de tester votre solution proposée, cela fonctionne très bien !

Je vous remercie pour la rapidité de votre solution et l'explication qui y est associée. Je vais comparer votre formule avec ma modification afin de comprendre où j'avais fait une erreur.

Je vous souhaite de très belles fêtes de fin d'année...

XVA
 

XVA

XLDnaute Junior
Bonjour,
Donnez nous un petit fichier test avec ce que vous attendez, car votre demande ne semble pas très claire.
Merci pour votre retour.

Voici un extrait du tableau que je réalise en ce moment et pour lequel j'ai besoin de cette incrémentation automatique en entrant les chiffres dans la même cellule de saisie.
 

Pièces jointes

  • Explication Excel-Downloads.xlsx
    14.1 KB · Affichages: 4

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Un essai en PJ avec cette macro :
VB:
Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Fin: If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [J17]) Is Nothing Then
         Application.ScreenUpdating = False
         Application.EnableEvents = False
         [J18] = [J18] + [J17]
         [J17] = ""
         [J17].Select
    End If
Fin:
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Par contre pour ré initialiser la cellule J18 il faut mettre son inverse en J17 pour revenir à zéro car pas de mécanisme de remise à zéro demandée.
 

Pièces jointes

  • Explication Excel-Downloads.xlsm
    19.4 KB · Affichages: 6

XVA

XLDnaute Junior
Merci pour ce retour Sylvanu ! Je vais essayer ta macro dès que possible (suis dans mon magasin toute la journée) et reviens vers toi pour te dire si cela fonctionne bien. Si les cellules ne sont pas exactement au même endroit dans mon tableau complet, je suppose que je dois actualiser ta programmation avec la bonne adresse de cellule à la place de [J17] et [J18] ?
 

XVA

XLDnaute Junior
Cela fonctionne exactement comme il faut, merci Sylvanu.

L'extrait du tableau sur lequel tu as programmé correspond à une journée. Un onglet comprend 7 journées (La semaine). Le tableau est mensuel, il comprend 4 ou 5 onglets pour représenter le mois en cours. Si je souhaite avoir cette macro sur chaque journée, comment faire ? 7 macros différentes pour chaque journée soit 7 macros par onglet ?
 

job75

XLDnaute Barbatruc
Bonjour XVA, sylvanu,

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.

A+
 

Pièces jointes

  • Explication Excel-Downloads(1).xlsm
    21 KB · Affichages: 2

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re, bonsoir Job,
Un onglet comprend 7 journées (La semaine).
Voir PJ avec :
Dans chaque feuille cette macro :
VB:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, [J17]) Is Nothing Or _
        Not Intersect(Target, [J26]) Is Nothing Then
        Addition ActiveSheet.Name, Target.Address
    End If
End Sub
Qu'il faut ajuster en fonction des cellules concernées.
Cette macro appelle une autre macro générique qui n'a pas à être modifiée :
Code:
Sub Addition(Feuille, Cellule)
    'On Error GoTo Fin
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    With Sheets(Feuille)
        L = Range(Cellule).Row
        C = Range(Cellule).Column
        .Cells(L + 1, C) = .Cells(L + 1, C) + .Cells(L, C)
        .Cells(L, C) = ""
    End With
Fin:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
Comment copier ta macro dans mon fichier définitif ?
La macro est dite évènementielle donc qui se déclenche automatiquement sur un événement, elle doit donc être copiée dans la feuille concernée.
Si c'est trop nébuleux, donnez un fichier vraiment représentatif.
 

Pièces jointes

  • Explication Excel-Downloads.xlsm
    31.9 KB · Affichages: 5

XVA

XLDnaute Junior
Merci pour vos retours efficaces. La tableau joint à ce message n'est pas terminé en termes de liens entre les cellules mais il l'est au niveau de la place que celles-ci occupent.
Les cellules de saisie sont : J61 / J93 / J125 / J158 / J190 / J222 et J254
Les cellules d'additions : J62 / J94 / J 125 / J158 / J190 / J222 et J255

Dois-je copier la macro pour chaque séquence en modifiant les adresses des cellules respectives ou une seule macro pour l'ensemble de la page est envisageable ?

Bon dimanche !

XVA
 

Pièces jointes

  • Tableau CA 2023 - XVA Proxi V2.xlsx
    507.3 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Les cellules de saisie sont : J61 / J93 / J125 / J158 / J190 / J222 et J254
Les cellules d'additions : J62 / J94 / J 125 / J158 / J190 / J222 et J255
Pour les cellules additions, êtes vous sur de J 125 / J158 / J190 / J222 ?
Ces cellules s'ajoutent à elles mêmes ? Mais comment fait on ?
Dois-je copier la macro pour chaque séquence en modifiant les adresses des cellules respectives ou une seule macro pour l'ensemble de la page est envisageable ?
La macro Worksheet_Change est une macro événementielle, il ne peut y en avoir qu'une seule par feuille.
Donc il faut utiliser le OR comme dans l'exemple.
Cette macro doit être dupliquée sur chaque feuille concernée.
Par contre, si toutes les feuilles auront la même structure, à la cellule près, on peut simplifier en mettant les modifications qu'une seule fois dans la macro principale.

Donc :
1- est ce que les cellules d'additions sont correctes ou est ce une erreur ?
2- Est ce que toutes les feuilles Semaine xx seront strictement les mêmes concernant les cellules à ajouter ?
 

XVA

XLDnaute Junior
Désolé, c'est une erreur. Je suis au magasin avec des clients entre chaque phrase que j'écris....

Les cellules d'additions : J62 / J94 / J 126 / J159 / J191 / J223 et J255

La feuille jointe est répétée dans le fichier par nombre de semaines que comprend 1 mois (4,5 ou 6 semaines en fonction du mois en question) Je peux préparer différents tableaux avec le nombre d'onglet afin de faciliter l'écriture de la macro. Les feuilles Semaine xx sont donc strictement les mêmes, oui.
Voulez-vous que je finalise les tableaux à 4 / 5 / 6 onglets avant ?

Merci

XVA
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 423
Membres
103 206
dernier inscrit
diambote