Séparations automatiques données par semaine pour une année N

Freedomearth

XLDnaute Nouveau
Bonjour à toutes et à tous,

Alors, déjà je suis un gros novice en VBA et mes bases dans ce domaine sont quasi nulles.

J'ai actuellement des relevés journaliers de machines de production dans une industrie.

Chaque jour, les relevés sont collés dans un tableur excel. D'une année à l'autre, ces tableaux de relevés ne changeront pas (hormis pour février mais ce n'est pas le souci ici). Dans ces tableaux, j'ai les relevés électriques. Par exemple, le 3 mars j'aurai 135 000 kWh, le 4 mars 136 000 kWh, ce qui permet de savoir que le 4 mars, la machine aura consommé 1000 kWh.

J'aimerais créer un onglet où j'ai ces différences d'établies pour chaque jour d'une année N, séparés en semaines (du lundi au dimanche) afin de réaliser des statistiques (moyenne et total semaine, répartition en pourcentage par machine). Cependant, ici en 2012, la semaine 11 sera du lundi 12 au dimanche 18 mars alors qu'en 2013, elle sera du lundi 11 au dimanche 17 mars.

J'aimerais une fonction qui permettra, suivant l'année en cours, que les séparations se fassent automatiquement (car étant en stage, ils ne veulent pas devoir refaire chaque année le tableur en décalant les jours et en devant réajuster les numéros de cellules dans les formules pour les diverses sommes et moyennes hebdomadaires).

J'ai bien pensé à ce qu'il y ait juste un décalage de n-x jour par rapport à l'année précédente, mais comment créer cela? et prendre en compte que tous les 4 ans y a un décalage différent et que donc le x variera...

Voilà, je ne sais pas si j'ai été très clair.

Merci pour vos réponses .
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Séparations automatiques données par semaine pour une année N

Bonjour Freedomearth et bienvenu, bonjour le forum,

Puisque tu es tout nouveau parmi nous, je te recommande de lire la
Lien supprimé qui indique les bons plans pour obtenir une réponse rapide et adaptée à tes besoins. Ce qui fait défaut dans ton post c'est un petit fichier exemple basé sur ton fichier original (si celui-ci est trop volumineux). Avec juste une poignée de données non confidentielles relatives à ton problème et la même structure que ton original (nom des onglets, plages nommées, UserForm et/ou code posant problème).
Cela nous évite à nous d'avoir a recréer ton environnement pour essayer de résoudre ton problème. Aide-nous à t'aider !
 

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Bonjour Robert et merci pour votre réponse et vos conseils.

Je vous joins un fichier de relevés fictifs de trois machines.

A partir de ces données, j'aimerais que, dans une deuxième feuille, une différence soit effectuée afin d'avoir la consommation journalière (Conso relevée 2 mars - Conso relevée 1 mars = conso 1 mars).

Mon problème est le suivant : je ne vois pas comment demander à Excel que, dès qu'une semaine se termine, deux lignes s'insèrent (une pour le total semaine et une pour la moyenne), puis qu'il reprenne le calcul de différence... puis qu'il réinsère deux lignes, etc. J'aimerais que deux lignes s'insèrent également en fin de mois, pour une moyenne et un total mensuels.

Je l'ai fait manuellement pour l'année 2012, mais ce n'est pas valable pour l'année 2013 par exemple, puisque les semaines seront décalées de x jours et qu'il faudra alors décaler toutes les formules de calculs de moyennes et totaux hebdomadaires et mensuels, manuellement. C'est pourquoi on me demande d'automatiser les calculs.

Voilà, merci beaucoup.
 

Pièces jointes

  • exemple tableur.xls
    47 KB · Affichages: 60
  • exemple tableur.xls
    47 KB · Affichages: 59
  • exemple tableur.xls
    47 KB · Affichages: 61

Robert

XLDnaute Barbatruc
Repose en paix
Re : Séparations automatiques données par semaine pour une année N

Bonjour Freedomearth, bonjour le forum,

Tes explications sont claires mais c'est moi qui doit être bouché car je ne saisis pas bien ce que tu désires. Désolé mais l'idéal serait que dans le fichier exemple tu mettes en évidence ce que tu as avant et ce que tu voudrais après traitement. Ça sera plus clair pour tout le monde.
 

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Bonjour Robert, Bonjour le forum,

la première feuille contient les relevés effectués par les compteurs.
la deuxième fait la différence entre le relevé J+1 et le relevé J pour obtenir la consommations au jour J.
la troisième feuille donne ce que j'aimerais avoir comme séparation automatique.

Merci.
 

Pièces jointes

  • exemple tableur.xls
    161.5 KB · Affichages: 55
  • exemple tableur.xls
    161.5 KB · Affichages: 51
  • exemple tableur.xls
    161.5 KB · Affichages: 48

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Bonsoir à tous, Bonsoir JHA,

Pouvez-vous m'expliquer comment vous avez procédé? afin que j'essaie la même chose pour les moyennes?
Par contre, je ne vois pas comment je pourrai (pour l'année 2012 mais ça vaudra pour les autres), aller réellement du lundi au dimanche (car là par exemple ça va du dimanche 1er janvier au samedi 7 janvier).

Est-ce qu'il est possible d'éviter le recours à une macro? (car je ne maîtrise absolument pas ce domaine).

Merci beaucoup :).
 

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Pas de souci, je vous remercie d'avoir consacré du temps à me répondre. Je parais impatient car je réponds vite, mais c'est juste que j'ai les notifications par mail, dont ma boîte est toujours ouverte, ce qui me permet de répondre le plus rapidement possible ;).

Merci.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Séparations automatiques données par semaine pour une année N

Bonsoir le fil, bonsoir le forum,

J'ai récupéré sur le forum une formule de Tototiti (merci pour lui) pour le numéro de la semaine et je l'ai placé en colonne F (cette colonne pourra éventuellement être masquée). Grâce à cette formule le code ci-dessous semble fonctionner correctement. Comme la position de la première ligne est aléatoire selon l'année. Il ne restera plus qu'à compléter les formules pour la première insertion (j'ai eu la flemme de calculer en fonction du cas...)
le code :
Code:
Sub Macro1()
Dim dl As Long 'déclare la variable dl (dernière Ligne)
Dim i As Long 'déclare la varialbe i (Incrément)

Application.ScreenUpdating = False 'masque les changements à l'écran
With Sheets("relevés compteurs EDF") 'prend en compte l'onglet "relevés compteurs EDF"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl
    For i = dl To 2 Step -1 'boucle inversée sur toutes les cellules en colonne A des lignes dl à 2
        If Application.WorksheetFunction.Weekday(Cells(i, 1)) = 1 Then 'condition 1 : si la jour de la date de la cellule est une dimanche
            .Rows(i + 1).Insert shift:=xlShiftDown 'insère une ligne une ligne en dessous de la cellule
            .Cells(i + 1, 1).Value = "Total Semaine " & .Cells(i, 6).Value 'place l'étiquette "Total Semaine..." en colonne A
            If i > 8 Then 'condition 2 : si la ligne est supérieure à 8
                .Cells(i + 1, 2).FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 'place la formule de la somme en colonne B
                .Cells(i + 1, 3).FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 'place la formule de la somme en colonne C
                .Cells(i + 1, 4).FormulaR1C1 = "=SUM(R[-7]C:R[-1]C)" 'place la formule de la somme en colonne D
            End If 'fin de la condition 2
            .Range(.Cells(i + 1, 1), .Cells(i + 1, 4)).Interior.ColorIndex = 15 'colore la ligne de gris
            .Rows(i + 2).Insert shift:=xlShiftDown 'insère une ligne deux lignes en dessous de la cellule
                .Cells(i + 2, 1).Value = "Moyenne Semaine " & .Cells(i, 6).Value 'place l'étiquette "Moyenne Semaine..." en colonne A
            If i > 8 Then 'condition 3 : si la ligne est supérieure à 8
                .Cells(i + 2, 2).FormulaR1C1 = "=AVERAGE(R[-8]C:R[-2]C)" 'place la formule de la moyenne en colonne B
                .Cells(i + 2, 3).FormulaR1C1 = "=AVERAGE(R[-8]C:R[-2]C)" 'place la formule de la moyenne en colonne C
                .Cells(i + 2, 4).FormulaR1C1 = "=AVERAGE(R[-8]C:R[-2]C)" 'place la formule de la moyenne en colonne D
            End If 'fin de la condition 3
        End If 'fin de la condition 1
    Next i 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "relevés compteurs EDF"
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub

la Macro 2 permet de supprimer les lignes insérées. J'en ai eu besoin pour les tests et la voici au cas où... :
Code:
Sub Macro2()

Dim dl As Long 'déclare la variable dl (dernière Ligne)
Dim i As Long 'déclare la varialbe i (Incrément)
Application.ScreenUpdating = False 'masque les changements à l'écran
With Sheets("relevés compteurs EDF") 'prend en compte l'onglet "relevés compteurs EDF"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl
    For i = dl To 2 Step -1 'boucle inversée sur toutes les cellules en colonne A des lignes dl à 2
        'si le debut de la cellule est "Moyenne" ou "Total", efface la ligne
        If Left(.Cells(i, 1).Value, 7) = "Moyenne" Or Left(.Cells(i, 1).Value, 5) = "Total" Then .Rows(i).Delete
    Next i 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "relevés compteurs EDF"
End Sub
Le fichier :
 

Pièces jointes

  • Freedomearth_v01.xls
    233.5 KB · Affichages: 66

JHA

XLDnaute Barbatruc
Re : Séparations automatiques données par semaine pour une année N

Bonjour à tous,

En reprenant l'idée de robert pour le N° de semaine

JHA
 

Pièces jointes

  • exemple tableur TCD avec numero semaine.xls
    214.5 KB · Affichages: 46
Dernière édition:

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Bonjour le forum,

Je ne réponds que maintenant car j'étais en visite d'usine. Je vous remercie beaucoup pour votre effort et je vais me débrouiller pour comprendre le système de TCD et adapter les programmes pour les 20 prochaines années (s'il n'y a que quelques éléments à modifier, ça ira très bien).

Merci beaucoup, c'est bon de voir que la solidarité existe!
 

Freedomearth

XLDnaute Nouveau
Re : Séparations automatiques données par semaine pour une année N

Bonjour le forum, Bonjour le fil,

Alors, je suis reparti du TCD et il me reste un seul souci pour obtenir ce que je souhaite.

Dans la feuille "TCD conso journalières", vous pouvez remarquer que la semaine 52 et la semaine 1, pour le mois de janvier, sont situées au-dessous de la semaine 5, ce qui est problématique.

Le souci est que j'ai également un bout de semaine 1 et de semaine 52 en fin d'année. De ce fait, lorsque je décale la 52 et la 1 de janvier pour les mettre avant la semaine 2, la semaine 1 et la semaine 52 de fin d'année décalent aussi et ce sont elles, du coup, qui se retrouvent décalées par rapport à la réalité.

Auriez-vous par hasard une astuce pour pouvoir décaler celles de janvier sans que celles de décembre décalent?

Merci!

PS : il est au format 2010 car en format 1997/2003, le fichier dépasse le poids autorisé par le forum.
 

Pièces jointes

  • exemple tableur TCD avec numero semaine.xlsx
    100.3 KB · Affichages: 44

Discussions similaires

Réponses
4
Affichages
781

Statistiques des forums

Discussions
312 294
Messages
2 086 895
Membres
103 404
dernier inscrit
sultan87