Autres [RÉSOLU] La macro n'aime pas!!!

un internaute

XLDnaute Impliqué
Bonjour le forum
Dans le fichier joint je voudrais faire la somme des kms & repas en cellule F4 du mois de février
Depuis le 09/01/23 au 04/02/23 soit une somme totale de 214.40 (153.60€ +60.80€) en double cliquant sur cellule C9
Mais la macro ci-dessous n'aime pas
VB:
          If CDate(Range("F2")) <= CDate(Range("'" & MoisPrec & "'!G" & J)) Then Total = Total + Range("'" & MoisPrec & "'!D" & J) + Range("'" & MoisPrec & "'!E" & J)
Merci pour vos éventuelles réponses
Bien cordialement
 

Pièces jointes

  • TITI.xls
    382.5 KB · Affichages: 6

jm.andryszak

XLDnaute Occasionnel
Bonjour
Il y a des cellules vides en colonne D et E donc incompatibilité de type.
En modifiant comme ceci, ça paraît ok, je retrouve bien les 214.40 € en double cliquant sur cellule C9.
For J = 36 To 6 Step -1
If Range("'" & MoisPrec & "'!G" & J) <> "" Then
If CDate(Range("F2")) <= CDate(Range("'" & MoisPrec & "'!G" & J)) Then Total = Total + _
IIf(Range("'" & MoisPrec & "'!D" & J) = "", 0, Range("'" & MoisPrec & "'!D" & J)) + _
IIf(Range("'" & MoisPrec & "'!E" & J) = "", 0, Range("'" & MoisPrec & "'!E" & J))
End If
Next J
Range("F6") = Range("F4") + Total
End If
End If
 

patricktoulon

XLDnaute Barbatruc
bonjour
perso je vois pas le besoins des double "IIF(ceci ou cela, valeur , 0)"
au pire utiliser "Val" si les cellules sont en texte
VB:
For J = 36 To 6 Step -1
If Range("'" & MoisPrec & "'!G" & J) <> "" Then
If CDate(Range("F2")) <= CDate(Range("'" & MoisPrec & "'!G" & J)) Then Total = Total + _
val( Range("'" & MoisPrec & "'!D" & J))) + _
val(Range("'" & MoisPrec & "'!E" & J)))
End If
Next J
Range("F6") = Range("F4") + Total
End If
End If
 

un internaute

XLDnaute Impliqué
Bonjour patricktoulon
C'est bon aussi mais alors où ça ne va pas et rien à voir avec vous deux
Lorsque je tape mois de mars 01/01/23 cellule F2 et 24/03/23 cellule F3 le calcul donne 512€ cellule F6
Alors que si on additionne le mois de de janvier 2023 + Février 2023 + Mars 2023 on doit trouver 848€
Si on additionne les cellules D4 + E4 ça donne bien 848€
C'est dans la macro que ça ne va pas mais quoi?
Moi je dépassé là.
Si un de vous deux à la solution je veux bien
Merci à vous
Cordialement
 

Pièces jointes

  • toto.xls
    383.5 KB · Affichages: 5
C

Compte Supprimé 979

Guest
Bonjour un internaute

La construction de votre fichier est très étrange 🤔
Des dates en colonne A qui n'en sont pas réellement, des montants qui son parfois des "" au lieu de 0, etc..

Bref, ce que vous pouvez faire vis à vis de toutes ces contraintes,
c'est appeler cette fonction à mettre dans un module
VB:
Function TotalFrais(DateDeb As Date, DateFin As Date)
  Dim Jour As Date
  Dim sNomF As String, MemNomF  As String, Lig As Long
  Dim Total As Single, ValD As Single, ValE As Single
  '
  Lig = 6: Total = 0
  For Jour = DateDeb To DateFin
    sNomF = Application.Proper(Format(Jour, "Mmmm yyyy"))
    If MemNomF = "" Then MemNomF = sNomF  ' Mémoriser le nom
    With Sheets(sNomF)
      ' Si on change de mois
      If MemNomF <> sNomF Then
        MemNomF = sNomF: Lig = 6
      End If
      ' Sinon
      ValD = 0: ValE = 0
      If .Range("D" & Lig) <> "" Then ValD = CSng(.Range("D" & Lig))
      If .Range("E" & Lig) <> "" Then ValE = CSng(.Range("E" & Lig))
      Total = Total + ValD + ValE
      Lig = Lig + 1
    End With
SuiteJour:
  Next Jour
  ' Retour du total
  TotalFrais = Round(Total, 2)
End Function

Et vous faites
Code:
Range("F6") = TotalFrais([F2], [F3])

Sinon, la question à peut-être déjà été posée, mais pourquoi un fichier en ".xls" et non ".xlsm" ?

Bon réveillon et Joyeux Noël ;)


A+
 
Dernière modification par un modérateur:

un internaute

XLDnaute Impliqué
Bonsoir BrunoM45
Merci merci
On y est presque
Tous les mois fonctionnent bien sauf décembre
Si on tape dans cellule F2 01/01/2023 la macro bug n'aime pas
VB:
If Target <= CDate(Range("'" & MoisPrec & "'!F3")) Then
Bon réveillon et joyeuses fêtes
Bien cordialement
 

Pièces jointes

  • toto.xls
    400 KB · Affichages: 3
Dernière édition:

un internaute

XLDnaute Impliqué
Bonjour BrunoM45
Ça se complique cette "affaire"
Si je fait du 01/01/2023 au 23/11/2023 le compte est bon 3059.20€
Mais si je fait du 09/01/2023 au 23/11/2023 c'est faux
En plus bien évidemment que le mois de décembre génère une erreur macro comme dit dans le mail précédent de hier au soir
Merci à toi pour d’éventuels retours
Cordialement
 

un internaute

XLDnaute Impliqué
Bonjour jm.andryszak
09/01/2023 au 23/11/2023 si pas d'erreur de ma part 2960 €
du 09/01/2023 au 24/12/2023 ça ne peut pas le faire car erreur macro
VB:
If Target <= CDate(Range("'" & MoisPrec & "'!F3")) Then
Comme dit dans un message de hier au soir
Merci à toi de intéresser à ce programme
Cordialement
 

Pièces jointes

  • toto.xls
    400 KB · Affichages: 1

jm.andryszak

XLDnaute Occasionnel
bonjour
C'est 2960 € que je trouve aussi.
J'ai du refaire les colonnes A avec Sub MajDate pour avoir des formats date et remanier du code.
!! je fait un exit après dans la Sub Workbook_SheetChange car je ne me suis pas intéressé au reste
Essayez pour décembre
fichier ci-joint
 

Pièces jointes

  • toto.xlsm
    173.1 KB · Affichages: 2
C

Compte Supprimé 979

Guest
Bonjour Un Internaute,

Pour moi, on mettait systématiquement le début du mois intéressé 🤔

Sinon, il faut juste apporter une petite modification à la fonction, concernant la ligne de début "Lig"

VB:
Function TotalFrais(DateDeb As Date, DateFin As Date)
  Dim Jour As Date
  Dim sNomF As String, MemNomF  As String, Lig As Long
  Dim Total As Single, ValD As Single, ValE As Single
  '
  Lig = 5 + Day(DateDeb): Total = 0
  For Jour = DateDeb To DateFin
    sNomF = Application.Proper(Format(Jour, "Mmmm yyyy"))
    If MemNomF = "" Then MemNomF = sNomF  ' Mémoriser le nom
    With Sheets(sNomF)
      ' Si on change de mois
      If MemNomF <> sNomF Then
        MemNomF = sNomF: Lig = 6
      End If
      ' Sinon
      ValD = 0: ValE = 0
      If .Range("D" & Lig) <> "" Then ValD = CSng(.Range("D" & Lig))
      If .Range("E" & Lig) <> "" Then ValE = CSng(.Range("E" & Lig))
      Total = Total + ValD + ValE
      Lig = Lig + 1
    End With
SuiteJour:
  Next Jour
  ' Retour du total
  TotalFrais = Round(Total, 2)
End Function

Je trouve bien 2.960€

Concernant le message d'erreur si saisi en décembre, cela vient du code qu'il y avait avant, pas du miens 😜
1672028026360.png

Le calcul de cette ligne n'est pas correcte
Code:
MoisPrec = MonthName(Month(DateValue(Sh.Name)) - 1) & " " & Year(DateAdd("m", 1, DateValue(Sh.Name)))
Puisqu'elle envoie en 2024 !?
Il faut donc plutôt utiliser
Code:
MoisPrec = Application.Proper(Format(DateAdd("m", -1, DateValue(Sh.Name)), "Mmmm yyyy"))
Mais ajouter peut-être un test si on se trouve sur l'onglet de Janvier de l'année 🤔

A+
 

Pièces jointes

  • 1672027988892.png
    1672027988892.png
    11.3 KB · Affichages: 13
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 358
Membres
102 874
dernier inscrit
Petro2611