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

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

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

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

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

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

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