Macro faisant moyene par mois/ transfert fichier à fichier

petitpiou

XLDnaute Nouveau
Bonjour !

Je cherche à créer une macro. Je vous explique mon but !
Dans un fichier excel, j’ai une feuille contenant deux colonnes : dans la première, tous les jours de l’année, puis dans la seconde, des nombres correspondant à des relevés pour chacun des jours.
Dans le second fichier, je possède deux colonnes également : une avec les mois de l’année, et une autre comportant les moyennes des relevés par mois correspondant.
Mon problème se situe évidemment là, je n’arrive pas à faire la moyenne des données de l’autre feuille, par mois, et l’insérer dans la case du mois correspondant, car je n’arrive pas à faire la recherche par mois et année.
J’espère que vous pourrez m’éclairer !!
Je vous remercie pour l’attention que vous porterez à cette requête !
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Bonjour PetitPiou et bienvenue, bonjour le forum,

Comme tu es nouvelle parmi nous, je te recommande vivement de lire la Lien supprimé qui donne tous les bons plans pour obtenir de l'aide rapidement. Ton problème manque cruellement d'un fichier exemple que tu n'as pas daigné fournir...
Une proposition à adapter donc :
Code:
Sub Macro1()
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O2 (Onglet 2)
Dim AN As Long 'déclare la variable AN (ANnée)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim DF As Date 'déclare la variable DF (Date de Fin)
Dim RDd As Range 'déclare la variable RDd (Recherche Date de dédut)
Dim RDf As Range 'déclare la variable RDf (Recherche Date de fin)
Dim PL As Range 'déclare la variable PL (PLage)

Set O1 = Sheets("Feuil1") 'définit l'onglet O1
Set O2 = Sheets("Feuil2") 'définit l'onglet O1
AN = Year(Range("A2").Value) 'définit l'année AN
For m = 1 To 12 'boucle sur les 12 mois de l'année
    DD = DateSerial(AN, m, 1) 'définit la date de début DD
    DF = DateSerial(AN, m + 1, 1 - 1) 'définit la date de fin DF
    Set RDd = O1.Columns(1).Find(CDate(DD), , xlValues, xlWhole) 'définit la recherche RDd (recherche la date de début dans la colonne 1 (=A) de l'onglet 01
    Set RDf = O1.Columns(1).Find(CDate(DF), , xlValues, xlWhole) 'définit la recherche RDf (recherche la date de fin dans la colonne 1 (=A) de l'onglet 01
    Set PL = O1.Range(RDd.Offset(0, 1), RDf.Offset(0, 1)) 'définit la plage PL
    O2.Cells(m + 1, 2).Value = Application.WorksheetFunction.Average(PL) 'place dans l'onglet 2, ligne m+1, la moyenne de la plage pl
Next m 'prochain mois de la boucle
End Sub
Le fichier :
 

Pièces jointes

  • PetitPiou_v01.xlsm
    24.6 KB · Affichages: 22

petitpiou

XLDnaute Nouveau
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Re-bonjour et merci beaucoup pour cette réponse rapide Robert ! Je m'excuse de ne pas avoir fourni de fichiers, je le ferai à l'avenir lorsque je demanderai de l'aide.
Merci beaucoup pour les commentaires du code aussi, ça m'a beaucoup aidée à comprendre, car
je débute.
J'ai une erreur que je n'arrive pas à débugger cependant.

"Variable objet ou variable de bloc With non définie" pour la ligne
Set PL = O1.Range(RDd.Offset(0, 1), RDf.Offset(0, 1))

Savez-vous à quoi cela est du ?

Merci ,

PetitPiou
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Bonjour PetitPiou, bonjour le forum,

Oui, j'imagine que la date de début où la date de fin n'a pas été trouvée. Tu ne dois pas utiliser, je pense, toutes les dates de l'année mais seulement les jours ouvrés.
Mais si tu persistes à ne toujours pas envoyer un fichier exemple je ne pourrais pas t'aider davantage...
 

petitpiou

XLDnaute Nouveau
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Mon fichier est tout à fait similaire au tien à vrai dire..
Le voici ! :)
Et j’ai essayé sur ton fichier aussi, la même erreur apparait !
 

Pièces jointes

  • essaimacro.xlsx
    16.8 KB · Affichages: 22

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Bonjour PetitPiou, bonjour le forum,

Oui très similaire au mien mais les dates n'ont pas le même format. En pièce jointe le fichier avec le code modifié :
Code:
Sub Macro1() 'déclare la variable O1 (Onglet 1)
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O1 (Onglet 1)
Dim AN As Long 'déclare la variable O1 (Onglet 1)
Dim DD As Date 'déclare la variable O1 (Onglet 1)
Dim DF As Date 'déclare la variable O1 (Onglet 1)
Dim RDd As Range 'déclare la variable O1 (Onglet 1)
Dim RDf As Range 'déclare la variable O1 (Onglet 1)
Dim J As Byte 'déclare la variable J (incrément de Jours)
Dim PL As Range 'déclare la variable O1 (Onglet 1)

Set O1 = Sheets("Sheet1") 'définit l'onglet O1
Set O2 = Sheets("Sheet2") 'définit l'onglet O1
AN = Year(Range("A2").Value) 'définit l'année AN
For m = 1 To 12 'boucle 1 : sur les 12 mois de l'année
    DD = DateSerial(AN, m, 1) 'définit la date de début DD
    DF = DateSerial(AN, m + 1, 1 - 1) 'définit la date de fin DF
    For J = 0 To 6 'boucle 2 : sur 7 jours (de 0 à 6)
        'définit la recherche de la date de début RDd (recherche la (date de début + J jours formaté  aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
        Set RDd = O1.Columns(1).Find(Format(CDate(DD + J), "yyyy-mm-dd"), , xlValues, xlWhole)
        If Not RDd Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
    Next J 'prochain jour de la boucle 2
        'définit la recherche de la date de début RDd (recherche la (date de début + J jours formatée aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
    For J = 0 To 7 'boucle 2 : sur 7 jours (de 0 à 6)
        'définit la recherche de la date de fin RDf (recherche la (date de fin - J jours) dans la colonne 1 (=A) de l'onglet O1)
        Set RDf = O1.Columns(1).Find(Format(CDate(DF - J), "yyyy-mm-dd"), , xlValues, xlWhole)
        If Not RDf Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
    Next J 'prochain jour de la boucle 2
    Set PL = O1.Range(RDd.Offset(0, 1), RDf.Offset(0, 1)) 'définit la plage PL
    O2.Cells(m + 1, 2).Value = Application.WorksheetFunction.Average(PL) 'place la moyenne dans l'onglet O2, ligne m+1, colonne 2 (=B)
Next m 'prochain mois de la boucle 1
End Sub
Le fichier :
 

Pièces jointes

  • PetitPiou_v03.xlsm
    26.4 KB · Affichages: 10

petitpiou

XLDnaute Nouveau
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Encore merci pour tes information et ta patience mais en réalité ça ne marche pas sur mon véritable fichier. Le voici. Il y a beaucoup plus de données, et je ne sais pas pourquo, c'est toujours la même ligne qui fait du bazar.
Je en comprends pas :/
 

Pièces jointes

  • datas.xls
    63.6 KB · Affichages: 22

Robert

XLDnaute Barbatruc
Repose en paix
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Bonjour PetitPiou, bonjour le forum,

Tu vois le temps perdu à cause du fichier manquant !...

La version 04 adaptée à tes besoins avec le code :
Code:
Sub Macro1() 'déclare la variable O1 (Onglet 1)
Dim O1 As Object 'déclare la variable O1 (Onglet 1)
Dim O2 As Object 'déclare la variable O1 (Onglet 1)
Dim AN As Long 'déclare la variable AN (ANnée)
Dim MO As Byte 'déclare la variable MO (MOis)
Dim LI As Long 'déclare la variable LI (LIgne)
Dim DD As Date 'déclare la variable DD (Date de Début)
Dim DF As Date 'déclare la variable DF (Datede Fin)
Dim RDd As Range 'déclare la variable RDd (Recherche de Date du début)
Dim RDf As Range 'déclare la variable RDf (Recherche de Date de fin)
Dim J As Byte 'déclare la variable J (incrément de Jours)
Dim PL As Range 'déclare la variable PL (PLage)


Set O1 = Sheets("GasSpotIndices") 'définit l'onglet O1
Set O2 = Sheets("recoit") 'définit l'onglet O1
AN = Year(Range("A2").Value) 'définit l'année AN
MO = Month(Range("A2").Value) 'définit le mois MO
LI = 2 'initialise la variable LI
Do 'exécute
    DD = DateSerial(AN, MO, 1) 'définit la date de début DD
    DF = DateSerial(AN, MO + 1, 1 - 1) 'définit la date de fin DF
    If Year(DF + 1) <> AN Then AN = AN + 1 'redéfinit l'année
    MO = Month(DF + 1) 'redéfinit le mois
    For J = 0 To 30 'boucle 2 : sur 7 jours (de 0 à 6)
        'définit la recherche de la date de début RDd (recherche la (date de début + J jours formaté  aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
        Set RDd = O1.Columns(1).Find(Format(CDate(DD + J), "yyyy-mm-dd"), , xlValues, xlWhole)
        If Not RDd Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
    Next J 'prochain jour de la boucle 2
        'définit la recherche de la date de début RDd (recherche la (date de début + J jours formatée aaaa-mm-jj) dans la colonne 1 (=A) de l'onglet O1)
    For J = 0 To 30 'boucle 2 : sur 7 jours (de 0 à 6)
        'définit la recherche de la date de fin RDf (recherche la (date de fin - J jours) dans la colonne 1 (=A) de l'onglet O1)
        Set RDf = O1.Columns(1).Find(Format(CDate(DF - J), "yyyy-mm-dd"), , xlValues, xlWhole)
        If Not RDf Is Nothing Then Exit For 'si une occurrence de la recherche est trouvée, sort de la boucle 2
    Next J 'prochain jour de la boucle 2
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante
    Set PL = O1.Range(RDd.Offset(0, 1), RDf.Offset(0, 1)) 'définit la plage PL
    If Err <> 0 Then Err.Clear: Exit Sub 'si une erreur a été générée, annule l'erreur, sort de la procédure
    For Each CEL In Application.Intersect(O2.UsedRange, O2.Columns(1)) 'boucle sur toutes les cellules éditées CEL de la colonne 1 (=A) de l'onglet O2
        If CEL.Value = DD Then 'condition : si la valeur de la cellule est égale à la date de début DD
            CEL.Offset(0, 1).Value = Round(Application.WorksheetFunction.Average(PL), 2) 'place la moyenne (arrondie à deu chiffres) dans la cellule en colonne B
            Exit For 'sort de la boucle
        End If 'fin de la condition
    Next CEL 'prochaine cellule de la boucle
Loop While Not RDd Is Nothing 'boucle tant qu'il existe une occurrence trouvée de la recherche de la date du début
End Sub
Et le Fichier :
 

Pièces jointes

  • PetitPiou_v04.xlsm
    72.6 KB · Affichages: 20

petitpiou

XLDnaute Nouveau
Re : Macro faisant moyene par mois/ transfert fichier à fichier

Merci mille fois Robert, d’autant plus que tu commentes le codes à chaque fois, ce qui me permet de bien comprendre, et de comprendre aussi pourquoi ça ne marchait pas avant !!!
A l’avenir, j’opte pour la règle : je fournis le fichier :)
 

Discussions similaires

Réponses
21
Affichages
340

Statistiques des forums

Discussions
312 089
Messages
2 085 206
Membres
102 819
dernier inscrit
Michew13