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

XVA

XLDnaute Junior
Bonjour,

Je finis le tableau récapitulatif mensuel d'activité de mon magasin.

Dans l'onglet final (S14 - S17 Avril 2023), j'ai installé un tableau par type de Cartes Restau et de Tickets Restau avec lesquels les clients paient leurs courses tout au long du mois.
Est-il envisageable de copier dans ces tableaux de synthèse uniquement les cellules de chaque journée contenant des informations (Cellules des tableaux "Tickets Restau (Relevé)" et "Cartes Restau (Relevé).

Le but est d'avoir une synthèse sur le dernier onglet qui correspond au bilan mensuel. Le but est également de réduire le nombre de lignes de ces tableaux de synthèse car toutes les cellules des journées ne sont pas utilisées...

J'espère être assez clair. Mon tableau est joint.

Merci d'avance pour vos avis sur cette question.

XVA
 

Pièces jointes

  • Base tableau XVA Proxi - Janv 23.xlsm
    780.6 KB · Affichages: 4

job75

XLDnaute Barbatruc
Bonjour XVA,

Si les feuilles des mois sont toujours jointives on peut simplifier les formules des sommes.

Exemple en J7 :
Code:
=SOMME('Semaine 14 - Avril 2023:Semaine 18 - Avril 2023'!J7)
A+
 

Pièces jointes

  • Base tableau XVA Proxi - Janv 23.xlsm
    777.7 KB · Affichages: 6

XVA

XLDnaute Junior
Merci JOB pour votre retour rapide. Je ne connaissais pas cette simplification de formule utilisable dans ce cas car les feuilles des mois sont jointives.
Par contre, la copie que je veux faire doit se trouver dans les cellules que j'ai colorié en jaune dans le tableau ("S14 - S17 Avril 23").

Je vais essayé d'être plus précis dans mon interrogation :

Onglet "Semaine 14 - Avril 2023" : Si une information est notée dans les cellules des différents tableaux AA - AC - AD - AE42 / AA - AC - AD - AE53 jusqu'à AA - AC - AD - AE240 / AA - AC - AD - AE251 de la feuille, est-il possible de conditionner la copie de l'information notée dans l'onglet "S14 - S17 Avril 23" que si celle-ci existe ? Autrement dit, si pas d'info dans une cellule de base, pas de copie et donc pas d'espace perdu dans le tableau de destination ? (Cellules jaunes des tableaux "Synthèse Cartes Restau" et "Synthèse Tickets Restau") de l'onglet "S14 - S17 Avril 23".

Merci par avance !!

XVA
 

Pièces jointes

  • Copie de Base tableau XVA Proxi - Janv 23.xlsm
    779.7 KB · Affichages: 1

job75

XLDnaute Barbatruc
Voyez le fichier joint et cette macro dans ThisWorkbook :
VB:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Not Sh.Name Like "S#* *" Then Exit Sub
Dim s, mois$, w As Worksheet, feuille$(), n&, c As Range, cc As Range
'---liste des feuilles du mois---
s = Split(Application.Trim(Sh.Name))
mois = s(UBound(s) - 1) & " " & "20" & s(UBound(s))
For Each w In Worksheets
    If w.Name Like "Semaine*" & mois Then
        ReDim Preserve feuille(n)
        feuille(n) = w.Name
        n = n + 1
    End If
Next w
'--- remplissage des tableaux---
Application.ScreenUpdating = False
For Each c In Sh.[C40,E40,H40,J40,M40,P40,S40,V40] 'à adapter
    c(3).Resize(Sh.Rows.Count - c(2).Row, 2).ClearContents 'RAZ des 2 colonnes
    n = 2
    For Each w In Sheets(feuille)
        With w.Range("Y42:Y267") 'à adapter
            .Replace c, "#N/A", xlWhole 'pour pouvoir repérer les lignes à traiter
            For Each cc In Intersect(.SpecialCells(xlCellTypeConstants, 16), .Cells) 'Intersect nécessaire à cause de la colonne Z fusionnée
                If cc(1, 3) & cc(1, 5) <> "" Then
                    n = n + 1
                    c(n) = cc(1, 3)
                    c(n, 2) = cc(1, 5)
                End If
                If cc(1, 6) & cc(1, 7) <> "" Then
                    n = n + 1
                    c(n) = cc(1, 6)
                    c(n, 2) = cc(1, 7)
                End If
            Next cc
            .Replace "#N/A", c 'remise en état
        End With
Next w, c
'---masquage des lignes vides---
Sh.Rows("42:100").Hidden = False 'affiche
n = Sh.Cells.Find("*", , xlValues, , xlByRows, xlPrevious).Row + 1
If n <= 100 Then Sh.Rows(n & ":100").Hidden = True 'masque
End Sub
Elle se déclenche quand on active une feuille de synthèse mensuelle comme "S14 - S17 Avril 23".

J'ai aussi remplacé les autres macros par cette unique macro, toujours dans ThisWorkbook :
VB:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Not Sh.Name Like "Semaine*" Then Exit Sub
If Intersect(Target, Sh.[V63,V96,V129,V162,V195,V228,V261]) 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
Bonne nuit.
 

Pièces jointes

  • Base tableau XVA Proxi - Janv 23(1).xlsm
    783.8 KB · Affichages: 4
Dernière édition:

XVA

XLDnaute Junior
Trop fort !!

Cela correspond bien au principe que j'imagine mais que je suis incapable de réaliser ! Bravo Job75 et merci beaucoup pour votre réponse rapide et efficace !!
Je vais transcrire l'activité du mois d'avril sur votre principe de tableau afin der bien intégrer la plus-value que vous apportez à ce tableau.
Je vous tiens informé de toute façon !

Je vous souhaite une belle journée !

XVA
 

job75

XLDnaute Barbatruc
Bonjour XVA,

Je n'avais pas fait attention mais chaque libellé de ticket ou carte comporte 3 ou 4 lignes.

Si tel est bien le cas il faut une boucle supplémentaire pour traiter ces lignes :
VB:
            For Each cc In Intersect(.SpecialCells(xlCellTypeConstants, 16), .Cells) 'Intersect nécessaire à cause de la colonne Z fusionnée
                For i = 1 To IIf(cc(3) Like "*Total*", 3, 4)
                    If cc(i, 3) & cc(i, 5) <> "" Then
                        n = n + 1
                        c(n) = cc(i, 3)
                        c(n, 2) = cc(i, 5)
                    End If
                    If cc(i, 6) & cc(i, 7) <> "" Then
                        n = n + 1
                        c(n) = cc(i, 6)
                        c(n, 2) = cc(i, 7)
                    End If
            Next i, cc
Fichier (2).

A+
 

Pièces jointes

  • Base tableau XVA Proxi - Janv 23(2).xlsm
    784.4 KB · Affichages: 4

XVA

XLDnaute Junior
Par exemple dans la 1ère feuille il y a des données en AA42, AC42, AD42 et AE42 mais il pourrait y en avoir aussi dans les 2 lignes 43 et 44 qui suivent.
Exactement, les données en AA42 et AC42 correspondent à un seul paiement effectué par un client avec sa carte Restau. AA42 correspond à la facture engendrée par Bimpli et AC42 au montant du paiement réalisé par le client avec sa carte Bimpli. Dans une journée, plusieurs paiements différents peuvent être effectué par des clients différents avec leur propre carte Bimpli. C'est pourquoi les cellules AA42 jusqu'à AE44 correspondent à des paiements différents à partir de cartes Bimpli. Il en est de même pour les cellules AA45 -> AE47 pour les cartes Up Déjeuner , AA48 -> AE50 pour Edenred et AA51 -> AE53 pour Sodexo.
Le principe est le même en ce qui concerne les Tickets restaurant sauf que les informations sont différentes, il s'agit du numéro de ticket et du montant du même ticket.
A la fin de chaque mois, je dois vérifier le nombre de tickets et de cartes restaurant avec les bilans adressées par Bimpli, Up Déjeuner, Edenred et Sodexo, éviter ainsi les erreurs de chaque part (eux ou moi) et adresser les informations précises à mon expert-comptable pour gérer les commissions que prennent ces sociétés et la TVA engendrée.
Bref, vous avez raison, chaque société qui gère les cartes et tickets restau (Bimpli, Up Déjeuner, Edenred et Sodexo) dispose dans mon tableau de 3 ou 4 lignes par colonne pour que je puisse rentrer les informations de chaque paiement qui me sont fournies par mes caisses enregistreuses.

J'espère être clair dans mon explication. En tout cas, je dois rentrer plusieurs informations différentes à chaque journée du tableau.

Merci Job75 !

XVA
 

XVA

XLDnaute Junior
Bonjour Job75,

J'espère que vous allez bien.

Lors d'un de mes enregistrements sur One Drive, Excel a renommé mon dernier fichier en stipulant un problème à l'enregistrer tel quel.
Depuis, la macro que vous avez conçu pour déporter les éléments de cartes et tickets restau en dernière feuille n'agit plus. Quand je vais sur cette dernière feuille, un prompt "Erreur d'exécution '13' : Incompatibilité de type.
Je joins le fichier à ce message, pouvez-vous jeter un oeil expert ?

En vous remerciant par avance !

XVA
 

Pièces jointes

  • Base tableau XVA Proxi - Mai 23 M2.xlsm
    787.9 KB · Affichages: 2

Discussions similaires

Statistiques des forums

Discussions
312 228
Messages
2 086 421
Membres
103 206
dernier inscrit
diambote