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 :

problème macro avec nuage de point


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut problème macro avec nuage de point
    Bonjour,

    J'avais fait une demande afin de connaitre les commandes à mettre pour traiter 365 fichiers dans un même dossier automatiquement avec une macro mais je n'ai pas eu de réponse...

    Donc je vais traiter mes fichiers un a un en enregistrant une macro. Dans celle ci je supprime des colonnes, changes les . en , et je sélectionne 2 colonnes et choisit nuage de point.
    Une fois ces étapes faites j'enregistre la macro faite sur le fichier "2010-04-01.csv"

    J'ouvre le fichier "2010-04-02.csv"
    La suppression des colonnes et le changement . en , se fait bien mais j'ai une erreur sur le graphique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        [...]
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveWindow.SmallScroll ToRight:=-6
        ActiveWindow.SmallScroll Down:=-30
        Range("A7:B58").Select
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.SetSourceData Source:=Range("'2010-04-01'!$A$7:$B$58")
    End Sub
    Dans l'attente de vos réponses, merci d'avance.

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveChart.SetSourceData Source:=Range("A7:B58")

    EDIT

    Le mieux est de travailler avec les objets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Grf As ChartObject
     
    With ActiveSheet
        Set Grf = .ChartObjects.Add(100, 50, 400, 200)
        Grf.Chart.ChartType = xlXYScatterSmooth
        Grf.Chart.SetSourceData Source:=.Range("A7:B58")
        Set Grf = Nothing
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    ok, merci pour ta réponse,
    je teste sa et je te tiens au courant.

    Encore merci

    PS: tu n'aurais pas une idée pour une ouverture automatique de fichiers...

    alors je viens de tester et maintenant l'erreur se trouve ailleurs...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    End With
        Range("L11").Select
        ActiveWindow.SmallScroll ToRight:=-5
        ActiveWindow.SmallScroll Down:=0
        Range("A7:A71").Select
        ActiveWindow.SmallScroll Down:=-120
        Range("A7:A71,B7:B71").Select
        Range("B7").Activate
        ActiveWindow.SmallScroll Down:=-102
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.SetSourceData Source:=Range( _
            "'13-05-2011'!$A$7:$A$71;'13-05-2011'!$B$7:$B$71")
    End Sub
    J'ai bien configuré excel en point dans Paramètres régionaux...
    Je cherche sur le net mais je ne trouve pas encore de réponse, donc si tu peux m'aider encore une fois, c'st avec plaisir.

    Merci d'avance

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    On te donne des codes pour les tester.
    Travaille avec les objets comme proposé dans le code précédent.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    ralala excuse moi, j'ai lu trop vite...
    J'ai lu, travail avec des points, autant pour moi. Je teste

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    j'avais donc sa

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Range("L11").Select
        ActiveWindow.SmallScroll ToRight:=-5
        ActiveWindow.SmallScroll Down:=0
        Range("A7:A71").Select
        ActiveWindow.SmallScroll Down:=-120
        Range("A7:A71,B7:B71").Select
        Range("B7").Activate
        ActiveWindow.SmallScroll Down:=-102
        ActiveSheet.Shapes.AddChart.Select
        ActiveChart.ChartType = xlXYScatterSmooth
        ActiveChart.SetSourceData Source:=Range( _
            "'13-05-2011'!$A$7:$A$71;'13-05-2011'!$B$7:$B$71")
    j'ai modifié grace à ton code mais je n'ai aucune base en VBA malheureusement. j'ai juste fait la macro puis je suis allé voir ou était le problème dans la macro...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With ActiveSheet
        Set Grf = .ChartObjects.Add("A7:A71,B7:B71")
        Grf.Chart.ChartType = xlXYScatterSmooth
        Grf.Chart.SetSourceData Source:=.Range( _
            "'13-05-2011'!$A$7:$A$71;'13-05-2011'!$B$7:$B$71")
        Set Grf = Nothing
        End With
    l'erreur doit se trouver dans la facon d'écrire les colonnes sélectionnées pour le graphe :/

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Non
    utilise F1 pour comprendre les paramètres de add
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Grf As ChartObject
     
    With Sheets("13-05-2011")
        Set Grf = .ChartObjects.Add(100, 50, 400, 200)      'ici se sont la top, left, width et height de la zone graphique
        Grf.Chart.ChartType = xlXYScatterSmooth             'Ici type de graphique
        Grf.Chart.SetSourceData Source:=.Range("A7:B71")    'ici la plage de données source
        Set Grf = Nothing                                   'Ici on libère la variable objet Grf
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    ha oui j'avais carrément mal compris les données à mettre.

    Super ca a marché ^^ Un grand merci.
    Donc si je veux rajouter d'autre graphique à tracer automatiquement, il me suffit de rajouter ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Grf As ChartObject
     
    With Sheets("13-05-2011")
        Set Grf = .ChartObjects.Add(100, 50, 400, 200)     
        Grf.Chart.ChartType = xlXYScatterSmooth             
        Grf.Chart.SetSourceData Source:=.Range("A7:B71")    
        Set Grf = Nothing                                  
    End With
    en ne modifiant que la plage de données (ligne 3)?

    dans le cas ou les colonnes à prendre en compte ne sont pas cote à cote comme dans ce cas ("A7:B71") mais plutôt 3 colonnes (une en X et deux en Y) "A7:A71,D771,G7:G71"

    Tu m'as bien aidé en tout cas je te remercie encore


    Bon en faite je viens de tester et ca fonctionne, c'est magique.
    Aurais tu un tutoriel à me conseiller expliquant comment je peux écrire le titre, légendes...

    bon j'ai tenté de perfectionner le graph mais je rame avec tout ce que je lis :/

    La seule chose que je souhaiterais c'est pouvoir mettre un titre, modifier les axes, et données un nom aux séries.
    j'ai trouver sa:

    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
    Charts.Add
     
    With ActiveChart
        .ChartType = xlXYScatterSmooth
        .SetSourceData Source:=rgData, PlotBy:=xlColumns
        .HasTitle = True
        .ChartTitle.Characters.Text = titre
        .Axes(xlCategory, xlPrimary).HasTitle = True
        .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = labelX
        .Axes(xlValue, xlPrimary).HasTitle = True
        .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = labelY
        .Axes(xlValue).MinimumScale = YMin
        .Axes(xlValue).MaximumScale = YMax 
        .Axes(xlValue).TickLabels.NumberFormat = "0.00"
        .Axes(xlCategory).MinimumScale = XMin
        .Axes(xlCategory).MaximumScale = XMax
        .Axes(xlCategory).TickLabels.NumberFormat = "0.00"
        .PlotArea.Interior.ColorIndex = xlNone
        .SeriesCollection(1).Name = rg.Columns(2).Rows(0)
        .Location Where:=xlLocationAsObject, Name:=feuilleDonnees
    End With
    mais je n'arrive pas à l'appliquer au code que tu m'as fournit.
    de même pour que le graph se créer dans une nouvelle feuille ou alors en tant qu'image...

    pour une feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets.Add After:=Sheets(Sheets.Count)

    Un truc me chiffone. Vu que ton code marchais j'ai décidé de refaire une macro plus proprement (càd juste suppression de colonnes et de lignes, mise en couleur, insertion de 4colonnes avec des formules).
    J'ai donc ajouter le code et la j'ai une erreur

    la méthode "add" de l'objet "ChartObjects" a échoué
    maintenant j'ai une erreur à la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Grf As ChartObject
     
    With Sheets("13-05-2011")
        Set Grf = .ChartObjects.Add(100, 50, 400, 200)
        Grf.Chart.ChartType = xlXYScatterSmooth
        Grf.Chart.SetSourceData Source:=.Range("A7:B69,D7:D69,Q7:Q69,R7:R69")
        Set Grf = Nothing
    End With
    si tu peux encore m'aider pour sa c'est cool, après j'arrête de t'embeter

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Un exemple commenté et formalisé
    à toi d'analyser et d'adapter
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    Dim Xmin As Double, Xmax As Double, Ymin As Double, Ymax As Double
    Dim FeuilleDonnees As String, Titre As String, LabelX As String, LabelY As String
    Dim Grf As ChartObject
     
    'Ici initialisation des variables (pour l'exemple en dur, mais rien ne t'empêche d'initialiser ces variables à partir de cellules de ta feuille)
    FeuilleDonnees = "Feuil2"
    Titre = "Le titre du graphique"
    LabelX = "Label axe X"
    LabelY = "Label axe Y"
    Xmin = 0
    Xmax = 105
    Ymin = -10
    Ymax = 135
     
    With Sheets("13-05-2011")
        'ajout  du graphique avec les dimensions
        Set Grf = .ChartObjects.Add(50, 10, 800, 400)
        'choix du type du graphique
        Grf.Chart.ChartType = xlXYScatterSmooth
        'choix de la source de données
        Grf.Chart.SetSourceData Source:=.Range("A7:B69")
        With Grf.Chart
            'graphique avec titre
            .HasTitle = True
            'le texte du titre avec mise en forme de la police
            With .ChartTitle.Characters
                .Text = Titre
                With .Font
                    .Bold = True
                    .ColorIndex = 3
                    .Size = 24
                End With
            End With
            'L'axe horizontal
            With .Axes(xlCategory)
                .HasTitle = True
                .AxisTitle.Characters.Text = LabelX
                .MinimumScale = Xmin
                .MaximumScale = Xmax
                .TickLabels.NumberFormat = "0.00"
            End With
            'l'axe vertical
            With .Axes(xlValue)
                .HasTitle = True
                .AxisTitle.Characters.Text = LabelY
                .MinimumScale = Ymin
                .MaximumScale = Ymax
                .TickLabels.NumberFormat = "0.00"
            End With
            'la zone de traçage
            .PlotArea.Interior.ColorIndex = xlNone
            'Déplacement du graphiqe comme objet dans la feuille FeuilleDonnees (ici Feuil2 pour l'exemple)
            'Supprime cette ligne si tu veux laisser le graphique dans la feuille "13-05-2011"
            .Location Where:=xlLocationAsObject, Name:=FeuilleDonnees
        End With
        Set Grf = Nothing
    End With
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    je ne sais pas quoi te dire, j'ai l’impression qu'un merci c'est peu..

    J'ai pu testé et mettre à ma sauce les paramètres du graphique.
    Par contre j'ai toujours cette même erreur qui reviens ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Location Where:=xlLocationAsObject, Name:=FeuilleDonnees
    avec l'erreur
    erreur d'execution "1004"
    La méthode 'location' de l'objet '_chart' a échoué
    Sinon après plusieurs test j'ai réussi à donner un nom aux 4 séries de données tracer. C'est déjà sa

    Sinon comme je te disais plus haut, quand je veux appliquer cette macro au fichier "14-05-2011" j'ai un problème de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    With Sheets("13-05-2011")
        Set Grf = .ChartObjects.Add(100, 50, 400, 200)
    au début du graphique...

    avec le message erreur
    erreur d'execution "9"
    l'indice n'appartient pas à la sélection

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonjour
    A ce stade, tu as tous les ingrédients pour pouvoir adapter à ton besoin, sinon, tu devra t'appliquer davantage à expliquer ton souci.
    Tu applique cette macro sur plusieurs feuilles de ton classeur ou bien sur plusieurs classeurs.
    Le nom de la feuille est toujours au format de date ou tu applique le code à la feuille active.
    .Location Where:=xlLocationAsObject, Name:=FeuilleDonnees
    Comme indiqué dans le commentaire, cette ligne n'est pas nécessaire si tu veux que ton graphique soit inséré sur la feuille même. Encore sinon, que contient ta variable FeuilleDonnees?
    ...etc
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Chaque jour correspond à un fichier .csv donc si j'ai bien compris chaque fichier est un classeur.

    je n'ai pas de fichier .csv unique à l'intérieur duquel une feuille correspond à un jour malheureusement.

    Ce que je souhaitais c'était donc faire la macro (que tu as faites et je t'en remercie grandement) pour un classeur et que celle ci s'applique pour tous les autres classeurs.

    en revanche pour un classeur j'aimerais que les graphique s'affiche sur une autre feuille que celle ou sont présentes toutes les données.

    Est ce que tu va pouvoir m'aider pour cette dernière chose.
    Sache que je passe mon aprèm à chercher sur le net, je n'attends pas que la réponse tombe tout cru, mais je pense que pour faire un tel code sans toi il aurait fallut que j'y passe le mois et que j'apprenne de A à Z le VBA.

  13. #13
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Et comment tu fais pour appliquer le code à tous les classeurs?
    Pour chaque classeur tu copie le code que tu exécute sur la feuille active?
    Si c'est ça, remplace le nom de la feuille par Sinon, quel est le nom de la feuille où tu veux insérer ton graphique?
    PS: Il serait judicieux de mettre ici ton code en tier avec une description de ton classeur (noms de feuille en particulier)
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    merci de prendre du temps pour me répondre.

    Tous les codes et macro sont enregistrés dans excel/visualbasic/VBAProject(PersonalXLSB)

    Pour l'instant j'ai deux macro: la premiere je sélectionne toutes mes données. ca sa marche pour tous les fichiers.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    Sub SelectionDonnées()
    '
    ' SelectionDonnées Macro
    '
     
    '
        Range("B:B,D:D,G:G,I:I,J:J,O:O").Select
        Range("O1").Activate
        ActiveWindow.SmallScroll ToRight:=8
        Range("B:B,D:D,G:G,I:I,J:J,O:O,Q:Q,R:R,S:S").Select
        Range("S1").Activate
        ActiveWindow.SmallScroll ToRight:=4
        ActiveWindow.SmallScroll Down:=-6
        Range("B:B,D:D,G:G,I:I,J:J,O:O,Q:Q,R:R,S:S,X:X,Y:Y").Select
        Range("Y1").Activate
        ActiveWindow.SmallScroll ToRight:=9
        Range("B:B,D:D,G:G,I:I,J:J,O:O,Q:Q,R:R,S:S,X:X,Y:Y,AD:AD,AF:AF,AG:AG,AH:AH"). _
            Select
        Range("AH1").Activate
        Selection.Delete Shift:=xlToLeft
        ActiveWindow.SmallScroll ToRight:=-21
        Columns("J:J").Select
        Selection.Cut
        Columns("F:F").Select
        Selection.Insert Shift:=xlToRight
        ActiveWindow.SmallScroll ToRight:=6
        Columns("S:S").Select
        Selection.Cut
        Columns("O:O").Select
        Selection.Insert Shift:=xlToRight
        ActiveWindow.SmallScroll ToRight:=-6
        Rows("7:30").Select
        Selection.Delete Shift:=xlUp
        Columns("B:D").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = -0.149998474074526
            .PatternTintAndShade = 0
        End With
        Columns("E:M").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorLight2
            .TintAndShade = 0.799981688894314
            .PatternTintAndShade = 0
        End With
     
        'dernière modifications de mise en forme
        Columns("N:V").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        Range("G:G,H:H,J:J,M:M,P:P,Q:Q").Select
        Range("Q1").Activate
        ActiveWindow.SmallScroll ToRight:=8
        Range("G:G,H:H,J:J,M:M,P:P,Q:Q,S:S,V:V").Select
        Range("V1").Activate
        Selection.Delete Shift:=xlToLeft
        ActiveWindow.SmallScroll ToRight:=-8
        ActiveCell.FormulaR1C1 = ""
        Range("E3").Select
     
        'intervertion Irradiance et Tmodule
        Columns("D:D").Select
        Selection.Cut
        Columns("B:B").Select
        Selection.Insert Shift:=xlToRight
     
        'mise en place des formules pour Pac-Total et E-Total
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        ActiveCell.FormulaR1C1 = "Pac-Total"
        Range("O6").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        ActiveCell.FormulaR1C1 = "W"
        Range("O7").Select
        ActiveCell.FormulaR1C1 = "=RC[-9]+RC[-4]"
        Range("O7").Select
        Selection.AutoFill Destination:=Range("O7:O69"), Type:=xlFillDefault
        Range("O7:O69").Select
        ActiveWindow.SmallScroll Down:=-72
        Range("P5").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        ActiveCell.FormulaR1C1 = "E-Total"
        Range("P6").Select
        With Selection.Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent1
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        ActiveCell.FormulaR1C1 = "Wh/15min"
        Range("P11").Select
        ActiveCell.FormulaR1C1 = "=((RC[-11]+RC[-6])-(R[-1]C[-11]+R[-1]C[-6]))*1000"
        Range("P11").Select
        Selection.AutoFill Destination:=Range("P11:P69"), Type:=xlFillDefault
        Range("P11:P69").Select
        ActiveWindow.SmallScroll Down:=-54
        Range("O:O,P:P").Select
        Range("P1").Activate
        With Selection.Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorAccent2
            .TintAndShade = 0.599993896298105
            .PatternTintAndShade = 0
        End With
        ActiveCell.FormulaR1C1 = ""
        Range("Q2").Select
     
     
     
    End Sub
    La deuxième est le code que tu m'as donné pour le graphique. Celui ci marche aussi pour chaque fichier mais je suis obligé de changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With Sheets("13-05-2011")
    le nom à chaque fois.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Sub graphique()
    '
    ' graphique Macro
    '
     
    '
        'Graphique récapitulatif de la journée
        Dim Xmin As Double, Xmax As Double, Ymin As Double, Ymax As Double
    Dim FeuilleDonnees As String, Titre As String, LabelX As String, LabelY As String
    Dim Grf As ChartObject
     
    'Ici initialisation des variables (pour l'exemple en dur, mais rien ne t'empêche d'initialiser ces variables à partir de cellules de ta feuille)
    FeuilleDonnees = "Courbes"
    Titre = "Compte rendu 14-05-2011"
    LabelX = "Temps"
    LabelY = "°C/Wh/W.m^-2/W"
    Xmin = 0
    Xmax = 105
    Ymin = -10
    Ymax = 135
     
    With Sheets("14-05-2011")
        'ajout  du graphique avec les dimensions
        Set Grf = .ChartObjects.Add(50, 10, 800, 400)
        'choix du type du graphique
        Grf.Chart.ChartType = xlXYScatterSmooth
        'choix de la source de données
        Grf.Chart.SetSourceData Source:=.Range("A7:C69,O7:O69,P7:P69")
        With Grf.Chart
            'graphique avec titre
            .HasTitle = True
            'le texte du titre avec mise en forme de la police
            With .ChartTitle.Characters
                .Text = Titre
                With .Font
                    .Bold = True
                    .ColorIndex = 11
                    .Size = 18
                End With
            End With
            .SeriesCollection(1).Name = "=""température du module"""
            .SeriesCollection(2).Name = "=""irradiance"""
            .SeriesCollection(3).Name = "=""puissance totale"""
            .SeriesCollection(4).Name = "=""énergie totale"""
            'L'axe horizontal
            With .Axes(xlCategory)
                .HasTitle = True
                .AxisTitle.Characters.Text = LabelX
                .MinimumScale = 0
                .MaximumScale = 1
                .TickLabels.NumberFormat = "0.00"
            End With
            'l'axe vertical
            With .Axes(xlValue)
                .HasTitle = True
                .AxisTitle.Characters.Text = LabelY
                .MinimumScale = 0
                .MaximumScale = 1900
                .TickLabels.NumberFormat = "0.00"
            End With
            'la zone de traçage
            .PlotArea.Interior.ColorIndex = xlNone
            'Déplacement du graphiqe comme objet dans la feuille FeuilleDonnees (ici Feuil2 pour l'exemple)
            'Supprime cette ligne si tu veux laisser le graphique dans la feuille "13-05-2011"
        End With
        Set Grf = Nothing
    End With
    End Sub
    je t'ai mis en pièce jointe un fichier avant traitement "13-05-2011" et un fichier après traitement "14-05-2011"

    dans chaque classeur, j'ai une feuille1 où il y a toutes les données et j'aimerais que le graphique se trace dans la feuille2. car je compte faire plusieurs graphique après.
    Fichiers attachés Fichiers attachés

  15. #15
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Lance la macro à partir de la feuille active (qui doit porter un nom sous forme de date)
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub Graphique()
    Dim Xmin As Double, Xmax As Double, Ymin As Double, Ymax As Double
    Dim FeuilleDonnees As String, Titre As String, LabelX As String, LabelY As String
    Dim Grf As ChartObject
    Dim Sh As Worksheet
     
    'Ici initialisation des variables (pour l'exemple en dur, mais rien ne t'empêche d'initialiser ces variables à partir de cellules de ta feuille)
    FeuilleDonnees = "Courbes"
    Titre = "Compte rendu du " & ActiveSheet.Name
    LabelX = "Temps"
    LabelY = "°C/Wh/W.m^-2/W"
    Xmin = 0: Xmax = 105
    Ymin = -10: Ymax = 135
    With ActiveSheet
        If IsDate(.Name) Then
            'ajout  du graphique avec les dimensions
            Set Grf = .ChartObjects.Add(50, 10, 800, 400)
            'choix du type du graphique
            Grf.Chart.ChartType = xlXYScatterSmooth
            'choix de la source de données
            Grf.Chart.SetSourceData Source:=.Range("A7:C69,O7:O69,P7:P69")
            With Grf.Chart
                'graphique avec titre
                .HasTitle = True
                'le texte du titre avec mise en forme de la police
                With .ChartTitle.Characters
                    .Text = Titre
                    With .Font
                        .Bold = True
                        .ColorIndex = 11
                        .Size = 18
                    End With
                End With
                .SeriesCollection(1).Name = "Température du module"
                .SeriesCollection(2).Name = "Irradiance"
                .SeriesCollection(3).Name = "Puissance totale"
                .SeriesCollection(4).Name = "Energie totale"
                'L'axe horizontal
                With .Axes(xlCategory)
                    .HasTitle = True
                    .AxisTitle.Characters.Text = LabelX
                    .MinimumScale = 0
                    .MaximumScale = 1
                    .TickLabels.NumberFormat = "0.00"
                End With
                'l'axe vertical
                With .Axes(xlValue)
                    .HasTitle = True
                    .AxisTitle.Characters.Text = LabelY
                    .MinimumScale = 0
                    .MaximumScale = 1900
                    .TickLabels.NumberFormat = "0.00"
                End With
                'la zone de traçage
                .PlotArea.Interior.ColorIndex = xlNone
            End With
            'Ajout d'une feuille Courbe
            On Error Resume Next
            Set Sh = Sheets(FeuilleDonnees)
            On Error GoTo 0
            If Sh Is Nothing Then
                Set Sh = Worksheets.Add(After:=Worksheets(1))
                Sh.Name = FeuilleDonnees
            End If
            Grf.Chart.Location Where:=xlLocationAsObject, Name:=FeuilleDonnees
            Set Grf = Nothing
        End If
    End With
    End Sub
    Certes, les Xmin, Xmax, Ymin et Ymax, ne devraient pas être transcrites en dur dans le code (sauf exigence explicite).

    PS: Le premier code c'est du n'importe quoi; Trop de déchets.
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    WAOU

    C'est juste super. Ca marche nikel.
    Tu as fait pas mal de modif au final. Moi je cherchais juste sur l'ajout d'une feuille. De ce que j'ai pu testé j'étais loin du compte...

    Le premier code c'est du n'importe quoi; Trop de déchets.

    J'ai enregistré la macro avec excel, puis je suis allé dans le VBA c'est tout. J'avais fait la meme chose pour les graphes...

    A chaque fois je me dis que j'ai vais enfin pouvoir faire le reste tout seul mais....non.
    Comme je t'avais dis je voulais ajouter d'autre graphique après.

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    'essai deuxième courbe
     
        FeuilleDonnees = "I=f(T)"
    Titre = "I=f(T) du " & ActiveSheet.Name
    LabelX = "Température module °C"
    LabelY = "W.m^-2"
    Xmin = 0: Xmax = 105
    Ymin = -10: Ymax = 135
    With ActiveSheet
        If IsDate(.Name) Then
            'ajout  du graphique avec les dimensions
            Set Grf = .ChartObjects.Add(50, 10, 400, 200)
            'choix du type du graphique
            Grf.Chart.ChartType = xlXYScatterSmooth
            'choix de la source de données
            Grf.Chart.SetSourceData Source:=.Range("B7:C69")
            With Grf.Chart
                'graphique avec titre
                .HasTitle = True
                'le texte du titre avec mise en forme de la police
                With .ChartTitle.Characters
                    .Text = Titre
                    With .Font
                        .Bold = True
                        .ColorIndex = 11
                        .Size = 18
                    End With
                End With
                'L'axe horizontal
                With .Axes(xlCategory)
                    .HasTitle = True
                    .AxisTitle.Characters.Text = LabelX
                    .MinimumScale = 0
                    .MaximumScale = 60
                    .TickLabels.NumberFormat = "0.00"
                End With
                'l'axe vertical
                With .Axes(xlValue)
                    .HasTitle = True
                    .AxisTitle.Characters.Text = LabelY
                    .MinimumScale = 0
                    .MaximumScale = 1100
                    .TickLabels.NumberFormat = "0.00"
                End With
                'la zone de traçage
                .PlotArea.Interior.ColorIndex = xlNone
            End With
            'Ajout d'une feuille Courbe
            On Error Resume Next
            Set Sh = Sheets(FeuilleDonnees)
            On Error GoTo 0
            If Sh Is Nothing Then
                Set Sh = Worksheets.Add(After:=Worksheets(1))
                Sh.Name = FeuilleDonnees
            End If
            Grf.Chart.Location Where:=xlLocationAsObject, Name:=FeuilleDonnees
            Set Grf = Nothing
        End If
    End With
    faut il que je mette FeuilleDonnees1?
    Sais tu a quelle ligne de ton code je pourrais faire le choix de la position du graphe dans la nouvelle feuille?

    Ca ne t'embête pas de m'aider au moins?

  17. #17
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Bonsoir
    1. Le nom n'a aucune importance du moment que chaque variable a une porté de la procédure dans laquelle elle est déclarée. FeuilleDonnees ou FeuilleDonnees1 ou X, aucune incidence sur les autres variables.

    2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            'ajout  du graphique avec la position les dimensions (Gauche, Haut, Largeur, Hautur)
            Set Grf = .ChartObjects.Add(500, 10, 800, 400)
    500 désigne la position gauche du graphique, 10: Haut, 800: Largeur et 400 la hauteur!
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    je pensais que ca définissait la taille du cadre du graphe...
    Si ca définit les positions, c'est les positions mais par rapport a quoi? 500iè lignes, colonnes?

    et pour pouvoir mettre une autre courbe pourquoi le code que j'ai dupliqué ne fonctionne pas?
    Du moins je n'ai pas d'erreur quand je lance le code mais je n'ai pas de deuxième courbe de créer...

  19. #19
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu utilise l'enregistreur de macro tel quel mais tu oublies la touche F1
    Voilà l'aide sur la méthode Add appliquée à un ChartObject
    Référence du développeur Excel ChartObjects.Add, méthode
    Cette méthode crée un graphique incorporé. Syntaxe
    expression.Add(Left, Top, Width, Height)
    expression Variable qui représente un objet ChartObjects.
    Paramètres
    Nom Obligatoire/Facultatif Type de données Description Left Obligatoire Double Coordonnées initiales du nouvel objet (en points), par rapport au coin supérieur gauche de la cellule A1 d'une feuille de calcul ou du coin supérieur gauche d'un graphique. Width Obligatoire Double Taille initiale du nouvel objet, en points.
    Ton code devra fonctionner Si et Seulement Si la feuille active est celle des données avec comme nom une date.!
    Relis les remarques
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 54
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Ton code devra fonctionner Si et Seulement Si la feuille active est celle des données avec comme nom une date.!
    Relis les remarques
    Merci. j'ai juste eu au final à changer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With ActiveSheet
        If IsDate(.Name) Then
            'ajout  du graphique avec les dimensions
            Set Grf = .ChartObjects.Add(50, 10, 800, 400)
    en celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets(1)
            'ajout  du graphique avec les dimensions
            Set Grf = .ChartObjects.Add(10, 10, 500, 320)
    en ce qui concerne la position c'est pas très facile d'anticiper où le graphique va être... N'est il pas possible de lui définir .ChartObjects.Add(10, 10, 500, 320) mais de placer le graphique à la cellule (C12=coin supérieur gauche du graph)?

    En revanche pour qu'apparaisse en abscisse une échelle en heure et non pas de 0à1 j'ai changé le ticklabels
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    .TickLabels.NumberFormat = "hh-mm"
                    .TickLabelSpacing = 10
    et d'après mes recherches c'est avec TickLabelSpacing que je définit l'écart. J'aimerais qu'il se fasse toutes les heures ou deux heures mais je n'arrive pas à le définir...
    Sais tu comment je peux faire?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Valeurs concurrentes dans un graphique avec nuage de points
    Par hirdev01 dans le forum Excel
    Réponses: 4
    Dernier message: 12/06/2015, 09h14
  2. Macro pour nuage de points comprenant deux séries
    Par lhuuna dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/08/2011, 09h49
  3. [2K8] Problème avec un graphique de type nuage de point
    Par la_fouine1806 dans le forum SSRS
    Réponses: 0
    Dernier message: 07/10/2010, 14h37
  4. [XL-2007] Problème macro avec If
    Par Jay29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/10/2009, 16h47
  5. Macro avec pb de point
    Par Tof XXX dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 25/01/2008, 19h49

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