IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Calcul répété avec utilisation de Date


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Par défaut Calcul répété avec utilisation de Date
    Bonjour,

    Je vous explique mon problème.
    J'ai sur une feuille des données composées de 3 colonnes avec 12 lignes
    Voir mon fichier joint: http://cjoint.com/data/0AmuxscDVMp.htm

    Dans cet exemple on imagine que le total des coefficients fait 1.

    J'ai maintenant 2 variables au format Date: DateM (01/01/2013) et DateV(01/05/2013)

    j'aimerai calculer la différence entre les 2 dates(encore cela ca va) et additionner les coefficients qui se trouvent entre DateM et date V en prenant en compte mois par mois.
    on aura:
    Total = coefJanvier + coefFévrier+ coefMars + CoefAvril + CoefMai ( en prennant en compte que dateV n'est que au début du mois)

    J'ai d'abord commencé par utilisé For Each Cell in Range A1:A12
    Mais je suis totalement perdu. Je pense que je suis partit trop loin que sa être hyper simple

    Es ce que quelqu'un a une idée. Toujours en utilisant une macro ??

    Merci à vous et bonne soirée.

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Une solution parmi d'autres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Option Explicit
    Sub TestCalculTotal()
      MsgBox CalculTotal(Range(Cells(2, 3), Cells(13, 3)), Cells(20, 3), Cells(21, 3))
    End Sub
    Function CalculTotal(Pl As Range, Date1 As Date, Date2 As Date)
    Dim Cell As Range
    Dim RowNo As Long
    Dim Mois As Integer, Mois1 As Integer, Mois2 As Integer
      Mois1 = Format(Date1, "m")
      Mois2 = Format(Date2, "m")
      CalculTotal = 0
      For Each Cell In Pl
        RowNo = Cell.Row
        Mois = Cells(RowNo, 1)
        If Mois >= Mois1 And Mois <= Mois2 Then
          CalculTotal = CalculTotal + Cells(RowNo, Pl.Column)
        End If
      Next
    End Function

  3. #3
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Par défaut
    Bonjour defluc,

    Merci pour ta réponse ta fait en 20 lignes ce que j'ai fait en 50 lignes


    J'ai deux questions:
    -Penses tu pouvoir prendre en compte si DateM=01/01/2013 et DateV=01/05/2015 ? soit 2 ans et 4 mois de différence ?
    -Penses tu que l'on pourra prendre en compte un ratio de DateM/Nbrdejourdanslemois(Mois(DateM)) et DateV/Nbrdejourdanslemois(Mois(DateV)) pour avoir un ratio du coefficient si par exemple DateV=01/05/2015 cela va prendre le coef du mois de mai à 100%

    Je t'ai fait quelques exemples pour bien comprendre mes explications
    J'y ai ajouté ton beau petit code

    http://cjoint.com/data/0Anww5Ehz84.htm

    Merci beaucoup pour ton aide.

  4. #4
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Hello toniob44,
    -Penses tu pouvoir prendre en compte si DateM=01/01/2013 et DateV=01/05/2015 ? soit 2 ans et 4 mois de différence ?
    -Penses tu que l'on pourra prendre en compte un ratio de DateM/Nbrdejourdanslemois(Mois(DateM)) et DateV/Nbrdejourdanslemois(Mois(DateV)) pour avoir un ratio du coefficient si par exemple DateV=01/05/2015 cela va prendre le coef du mois de mai à 100%
    Mon maitre mot : en programmation, TOUT est possible.

    Et ce principe posé, quel bonheur de creuser pour trouver une solution, l'améliorer, la peaufiner.
    Mais il faut préserver ses neurones et je vais donc dormir en te laissant sur tes rêves.

    Dodoooo et à +

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mon maitre mot : en programmation, TOUT est possible.

    C'est ce que je répète depuis plus de 25 ans.
    Quand on me pose la question Est-possible ?, je répond "On peut tout faire en programmation, même allumer votre machine à café. C'est une question de temps et d'argent"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2009
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 112
    Par défaut
    Merci pour vos réponses

    alors j'ai fait évoluer la macro, pas de beaucoup pour vous mais moi c'est énorme: http://cjoint.com/data/0Aokm1iaKxF.htm

    J'arrive à définir le ratioM et RatioV pour éviter de prendre le Coef du mois en entier pour avoir un calcultotal plus précis.

    Egalement je peux boucler sur chaque année.
    Seulement il manque le total des coeffs 06 à 12. Si DateM=01/01/2013 et DateV=01/05/2015.


    Avez-vous une idée pour régler ce problème ?
    Le ratioV ne fonctionne pas n'ont plus mais je pense le calculer à la fin et le déduire de Calcultotal. Sa fera pareil.

    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     
    Option Explicit
     
    Sub TestCalculTotal()
      MsgBox CalculTotal(Range(Cells(2, 3), Cells(13, 3)), Cells(20, 3), Cells(21, 3))
    End Sub
    Function CalculTotal(Pl As Range, DateM As Date, DateV As Date) As Currency
    Dim Cell As Range
    Dim RowNo As Long
    Dim Mois As Integer, MoisM As Integer, MoisV As Integer
    Dim RatioM, RatioV As Currency
    Dim Annee As Integer
      MoisM = Format(DateM, "m")
      MoisV = Format(DateV, "m")
      RatioM = (DaysInMonth(Month(DateM), Year(DateM)) - Day(DateM)) / DaysInMonth(Month(DateM), Year(DateM))
      RatioV = (Day(DateV)) / DaysInMonth(Month(DateV), Year(DateV))
      CalculTotal = 0
    For Annee = Year(DateM) To Year(DateV)
      For Each Cell In Pl
        RowNo = Cell.Row
        Mois = Cells(RowNo, 1)
     
            If Mois >= MoisM And Mois <= MoisV Then
            CalculTotal = CalculTotal + Cells(RowNo, Pl.Column) * RatioV * RatioM
            RatioM = 1
            RatioV = 1
            End If
     
      Next
      Next Annee
    End Function
     
     
     
    Public Function DaysInMonth(ByVal nMonth As Integer, ByVal nYear As Integer) As Integer
     
        DaysInMonth = Day(DateAdd("d", -1, DateAdd("m", 1, DateSerial(nYear, nMonth, 1))))
     
    End Function
    Merci à vous Dieus de la programmation.
    Philippe Tulliez, si tu peux me faire démarrer ma cafetière tous les matins avec une macro je suis preneur

Discussions similaires

  1. Calcul arithmétique avec un format date
    Par xavdore dans le forum Excel
    Réponses: 6
    Dernier message: 16/08/2013, 11h58
  2. Utilisation de Date avec Timer.schedule
    Par alamako dans le forum Général Java
    Réponses: 3
    Dernier message: 26/08/2011, 09h53
  3. [PEAR] Date avec utilisation de Spreadsheet excel writer
    Par xianxian620 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/06/2008, 11h03
  4. [MySQL]Trigger avec condition utilisant la date du jour
    Par Irish dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 21/12/2006, 22h17
  5. [VBA-E]Calculer nbre de Jrs avec chevauchement de dates
    Par YoungBlood dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/06/2006, 20h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo