Visualiser la tendance des données dans plusieurs feuilles par une courbe

Bonjour le forum,

j'ai un classeur contenant une série de données (nombres) dans plusieurs feuilles nommées par date

est ce que c'est possible de visualiser la tendance de ces données par une courbe (le temps (date ) en abscisse et les valeurs en ordonnées)

merci de votre aide

ci joint un modèle du classeur

7modele.xlsx (11.54 Ko)

bien cordialement

Bonjour,

Sous réserve de structurer tes données de manière plus conventionnelle, ce sera simple à réaliser. Quelque chose du genre :

Date heureN1N2N3
21/04/2020 09:0012,3210,035,21
21/04/2020 16:0012,3310,055,19
22/04/2020 09:0012,3210,035,21
22/04/2020 16:0012,3310,055,19

Bonjour Pedro22,

merci de votre réponse

en fait les feuilles contiennent d'autres données journalières et je ne peux pas modifier la structure

y-a-t-il svp une autre solution

merci beaucoup

Un essai avec une macro qui permet de compiler toutes les feuilles en une seule. Il faut au préalable créer une feuille vierge nommée "BDD" :

Sub CompilerFeuilles()

Dim F As Byte, Col As Integer, NomF As String, Dte As Long

Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
With Sheets("BDD")
    For F = 1 To Worksheets.Count 'Parcourir les feuilles
        NomF = Sheets(F).Name 'Extrait le nom de la feuille
        If NomF Like "##-##-####" Then 'Si le nom correspond à un format date
            Dte = DateSerial(Split(NomF, "-")(2), Split(NomF, "-")(1), Split(NomF, "-")(0)) 'Extrait la date
            Col = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1 'Détermine la 1ère colonne non vide en feuille BDD
            Sheets(F).Range("C6:H8").Copy .Cells(2, Col) 'Copie les données à la suite
            .Cells(1, Col) = Dte + 9 / 24 'Ajoute la date et heure d'en-tête
            .Cells(1, Col + 1) = Dte + 16 / 24 'Idem
        End If
    Next F
    .Range("A1").CurrentRegion.Copy 'Copie la plage obtenue
    .Range("A5").PasteSpecial Transpose:=True 'Collage transposé 
    .Range("1:4").Delete 'Suppression des anciennes lignes
End With
Application.Calculation = xlCalculationAutomatic

End Sub

Bonjour,

merci de votre aide

j'ai essayé la macro mais ça me retourne " l'indice n'appartient pas à la sélection"

ci joint le fichier

2512520.xlsm (97.58 Ko)

merci encore

Bonjour,

Le fichier joint est différent du premier :
- Noms d'onglet au format JJ-MM et pas JJ-MM-AAAA (à l'origine de l'erreur affichée)
- Présence d'un nombre variable de colonnes
- Position des données différente (pas en C6:H8)
- Heures des colonnes différentes de 9h et 16h

Par ailleurs, le code est à placer dans un module standard, et pas dans le module ThisWorkbook de l'éditeur VBA.
Je n'ai pas très envie de revoir entièrement le code, potentiellement pour rien. Je vous laisse vous l'approprier avec les commentaires, tester vos modifications et éventuellement revenir avec des questions ciblées. Le cas échéant, je laisse d'autres contributeurs tenter leur chance, mais je vous invite à fournir des précisions exhaustives sur vos besoins et la structure de vos données.

Bonjour,

merci pour les remarques données et désolée pour mon inexactitude

n'étant pas pro d'Excel j'ai tenté quand même ma chance en:

-copiant le code dans un module

-modifiant le format des noms des feuilles selon le format JJ-MM-AAAA

-modifiant la plage C6:H8 par la plage "E4:F20" (j'ai précisé que les données sont inscrites dans deux colonnes seulement et plusieurs lignes qui peuvent atteindre une quarantaine par le moyen des bordures du tableau dans chaque feuille) je me suis trempée en précisant les colonnes C et D au lieu des colonnes E et F et je m'excuse

-j'ai modifié le 9 par 10 dans le code (les heures)

ça me retourne un résultat qui me semble vrai sauf la première ligne mais aussi un message d'erreur

si vous pouvez me donner un coup main ça sera très gentil de votre part, j'ai essayé de me débrouiller mais je ne comprends pas d'ou l'erreur

capture capture2
0512520.xlsm (103.62 Ko)

Ok pour les modifications réalisées. La partie de la macro qui plante sert à transposer le tableau pour intervertir lignes et colonnes (ce qui correspond au final à la structure indiquée lors de mon 1er post). Je n'ai peut être pas écrit la bonne syntaxe, c'est quelque chose que j'utilise très peu. Dans ce cas, tu peux simplement supprimer ces 3 dernières lignes du code, et réaliser l'opération à la main.

Eventuellement, activer l'enregistreur de macro lors de cette opération, et t'en inspirer pour rectifier le code actuel.

je n'ai jamais utilisé l'enregistreur macro, et j'ai besoin des dates en colonne A pour visualiser les courbes des données

avez vous des suggestions à tester svp! merci

je n'ai jamais utilisé l'enregistreur macro, et j'ai besoin des dates en colonne A pour visualiser les courbes des données

avez vous des suggestions à tester svp! merci

Je vous invite à relire mon message ci dessous. Les dates sont normalement présentes en ligne 1. Une copie --> collage transposé des 4 premières lignes et les dates seront alors présentes en colonne A. Si le nombre de lignes copiées depuis les modifications que vous avez apporté au code à changé, c'est peut-être l'origine de l'erreur obtenue. Car le collage spécial est effectué en A5, qui est normalement une cellule vide située sous les lignes contenant les données.

en fait j'ai supprimé les 3 dernières lignes du code et les données dans "BDD" me semblent gravement altérées j'ai perdu leur ordonnancement

en fait j'ai supprimé les 3 dernières lignes du code et les données dans "BDD" me semblent gravement altérées j'ai perdu leur ordonnancement

Je ne peux pas vous aider avec aussi peu d'éléments, désolé.

l'erreur vient du fait que les données dépassent les 4 lignes alors la ligne 5 est non vide le collage transposé ne peut pas être exécuté

si je comprends la plage A1 c'est la totalité des données rassemblées en "BDD"

et je dois faire un collage transposé à partir de la première ligne vide qui suit le tableau considéré

puis finalement le supprimer après le collage tranposé

j'ai modifié le code comme suit en supposant que j'aurais 40 lignes de données au maximum

Sub CompilerFeuilles()

Dim F As Byte, Col As Integer, NomF As String, Dte As Long

Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
With Sheets("BDD")
    For F = 1 To Worksheets.Count 'Parcourir les feuilles
        NomF = Sheets(F).Name 'Extrait le nom de la feuille
        If NomF Like "##-##-####" Then 'Si le nom correspond à un format date
            Dte = DateSerial(Split(NomF, "-")(2), Split(NomF, "-")(1), Split(NomF, "-")(0)) 'Extrait la date
            Col = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1 'Détermine la 1ère colonne non vide en feuille BDD
            Sheets(F).Range("E4:F20").Copy .Cells(2, Col) 'Copie les données à la suite
            .Cells(1, Col) = Dte + 10 / 24 'Ajoute la date et heure d'en-tête
            .Cells(1, Col + 1) = Dte + 16 / 24 'Idem
        End If
    Next F
    .Range("A1").CurrentRegion.Copy 'Copie la plage obtenue
    .Range("A41").PasteSpecial Transpose:=True 'Collage transposé
    .Range("1:40").Delete 'Suppression des anciennes lignes
End With
Application.Calculation = xlCalculationAutomatic

End Sub

ça marche pour une première fois mais en exécutant la macro une deuxième fois (besoin alimentation du classeur pour d'autres journées à venir) ça ne marche pas

alors comment ajouter la suppression des données dans "BDD" à chaque exécution de la macro?

Je vois que tu as bien pris le code en main, tes remarques sont justes.

Pour supprimer les données existantes, il suffit d'ajouter en début de macro, juste après le With Sheets("BDD"), l'instruction suivante :

.Cells.ClearContents

Bonjour,

c'est grâce à vous que j'ai pris le code en main merci

un petit problème

en exécutant le même code j'ai remarqué que les données de quelques jours manquaient dans le "BDD"

le code suivant

Sub CompilerFeuilles()

Dim F As Byte, Col As Integer, NomF As String, Dte As Long

Application.ScreenUpdating = False: Application.Calculation = xlCalculationManual
With Sheets("BDD")
.Cells.ClearContents
    For F = 1 To Worksheets.Count 'Parcourir les feuilles
        NomF = Sheets(F).Name 'Extrait le nom de la feuille
        If NomF Like "##-##-####" Then 'Si le nom correspond à un format date
            Dte = DateSerial(Split(NomF, "-")(2), Split(NomF, "-")(1), Split(NomF, "-")(0)) 'Extrait la date
            Col = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1 'Détermine la 1ère colonne non vide en feuille BDD
            Sheets(F).Range("E4:F20").Copy .Cells(2, Col) 'Copie les données à la suite
            .Cells(1, Col) = Dte + 10 / 24 'Ajoute la date et heure d'en-tête
            .Cells(1, Col + 1) = Dte + 16 / 24 'Idem
        End If
    Next F
    .Range("A1").CurrentRegion.Copy 'Copie la plage obtenue
    .Range("A41").PasteSpecial Transpose:=True 'Collage transposé
    .Range("1:40").Delete 'Suppression des anciennes lignes
End With
Application.Calculation = xlCalculationAutomatic

End Sub

je ne vois pas ou est le problème ça donnait la totalité des données auparavant

merci de me donner vos remarques

le fichier:

4512520.xlsm (106.50 Ko)

je m'excuse il s'agit d'un espace à la fin des dates manquantes

j'aimerais maintenant ajouter un bouton commande pour faciliter l'exécution de la macro peut être en première ligne ?

merci beaucoup de votre effort fourni !

Bonjour,

C'est un plaisir d'apporter mon aide quand les demandeurs s'impliquent et s'approprient les propositions comme tu l'as fait.
L'ajout du bouton ne devrait pas te poser de problème particulier. Il faudra juste vérifier qu'il n'est pas affecté par la copie transposée + suppression des 40 premières lignes. Sinon il est possible de lier l'exécution à une action spécifique, par exemple un double clique dans n'importe quelle cellule de la feuille BDD (je pourrais te montrer comment procéder si cette solution t'intéresse).

Bonne journée !

oui votre solution me semble très pratique

le résultat dans la "BDD" commencent à partir de la 2ème ligne alors pourquoi pas lier l'exécution de la macro en double cliquant dans A1

j'ai essayé l'enregistreur des macro pour avoir une idée sur l'automatisation de changement du format des cellules en date vu qu'après exécution de la macro ça me donne des nombre dans certaines lignes

Range("A2").Select
    Range("A3:A100").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A2").Select

mais ça n'a pas marché

vos recommandations ?

merci beaucoup

et pourquoi l'heure ne s'affiche pas près de la date en premier colonne même après la modification du format en date

le résultat dans la "BDD" commencent à partir de la 2ème ligne alors pourquoi pas lier l'exécution de la macro en double cliquant dans A1

Normalement les données commencent en 1ère ligne. En tout cas, voilà un code permettant de déclencher ta macro de traitement suite à un double clique. Ce code est à placer dans le module de la feuille BDD :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

If Target.Address = "$A$1" Then 
   Call NomMacro 'Lancement macro (nom à adapter)
   Cancel = True 'Annule le double clique
End If

End Sub

j'ai essayé l'enregistreur des macro pour avoir une idée sur l'automatisation de changement du format des cellules en date vu qu'après exécution de la macro ça me donne des nombre dans certaines lignes mais ça n'a pas marché

vos recommandations ?

merci beaucoup

et pourquoi l'heure ne s'affiche pas près de la date en premier colonne même après la modification du format en date

Le code ci dessus correspond juste à une copie du format d'une cellule à une plage. Je vous conseille plutôt d'ajouter en fin de macro, avant le End With :

.Range("A:A").NumberFormat = "dd/mm/yyyy hh:mm"

A noter qu'une date ou une heure dans un tableur correspond à un nombre de jours écoulés depuis une date de référence. Une date valide est donc convertible en nombre, et la partie décimale correspond à l'heure (une fraction de jour). Le format modifie l'affichage, mais pas cette valeur qui reste la même. Le format de date proposé par défaut ne fait pas apparaitre l'heure, mais elle est bien présente dans la cellule.

je tiens à vous remercier pour votre précieuse aide

tout marche très bien

Bonne journée

Rechercher des sujets similaires à "visualiser tendance donnees feuilles courbe"