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 :

Sélection d'un graphique


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 30
    Par défaut Sélection d'un graphique
    Bonjour à tous,

    Je réalise actuellement une macro chargée d'aller récupérer des données dans un fichier et les inscrire dans un nouveau afin de réaliser en quelques sorte un fichier "bilan" qui regroupe toutes mes données.

    Dans le même temps que je copie ces données, je souhaite les ajouter sur un graphique. Je peux ajouter les données de 20 fichiers au maximum. Je réalise donc une boucle afin de faire ces copies au fur et à mesure. La copie de mes fichiers.

    Mon problème actuellement se pose au niveau de la conception du graphique. Voici mon idée :

    - sur ma 1ère itération, je créé les 3 graphique qui m'intéressent
    - par la suite, pour les n itérations je rajoute une série dans chacune des graphiques avec les données correspondantes

    Pour l'instant, j'arrive à créer mes graphiques, à leur donner une légende. Le problème se pose pour l'instant lorsque je souhaite accéder à ces graphiques pour pouvoir ajouter mes séries. J'ai l'erreur 9 qui apparaît ("L'indice n'appartien pas à la sélection").

    Je ne comprends pas pourquoi car pour moi, la déclaration me semble correct. Je vous joins mon code ci-dessous en espérant que l'un de vous pourra m'aider. L'erreur se produit dès que j'essaie de ré accéder au graphique pour lui entrer une série sur la sub New_plot.

    Merci d'avance

    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
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    Option Explicit
     
    Dim i As Integer
     
    Dim fichier_courant As String        'Nom du classeur dans lequel on se trouve
     
    Dim Nom_Fichier As Variant           'Récupère le nom du fichier à importer
     
    Dim nb_file As Integer, ligne As Integer, colonne As Integer
     
    Dim awbk As Workbook, wbk As Workbook
     
    Dim list_Range As Range
     
    Dim Nom_Graphique As String, legende_abscisses As String, legende_ordonnees As String
    Dim Nom_Graphique1 As String, Nom_Graphique2 As String, Nom_Graphique3 As String
     
    Public Sub CommandButton1_Click()
     
    'Affectation à la variable awbk (ActiveWorkBook) du nom du classeur courant
    Set awbk = ActiveWorkbook
     
    awbk.Protect Structure:=False, Windows:=False
     
    'Sélection de la plage d'inscription du listing de fichier importés
    Set list_Range = Worksheets("Listing").Range("a3:a23")
     
    'Nettoyage de la plage d'affichage
    list_Range.ClearContents
     
    'Choix de la ligne de départ de l'affichage (mis à 18 pour être conforme à l'emplacement
    'des données dans le fichier d'origine, plus facile pour faire des comparaisons, possible
    'de copier toute la colonne)
     
    ligne = 18
     
    'Non mise à jour de l'écran en temps réel afin de diminuer le temps de calcul
    Application.ScreenUpdating = False
     
    'Nettoyage de la plage d'affichage
    awbk.Worksheets("Affichage").Range("a16:ff5000").ClearContents
     
    'Récupération du nombre de fichier à copier
    nb_file = awbk.Sheets("Lancement").Range("D6").Value
     
    legende_abscisses = "Temps [s]"
    Nom_Graphique1 = "Pression"
    Nom_Graphique2 = "Débits"
    Nom_Graphique3 = "Température"
     
    'Boucle de récupération des données
    If nb_file > 0 Then
     
        'Choix de la ligne où commencer à inscrire les valeurs
        ligne = 18
     
        For i = 1 To nb_file
     
            'Boucle conditionnelle qui permet de décaler la première colonne de réinscription à chaque nouveau fichier
            If i = 1 Then
                colonne = i
     
                Nom_Graphique = "Pression"
                legende_ordonnees = "Pression [bar]"
                Call New_Graphique(Nom_Graphique1, legende_abscisses, legende_ordonnees)
     
                Nom_Graphique = "Débits"
                legende_ordonnees = "Débit [kg/s]"
                Call New_Graphique(Nom_Graphique2, legende_abscisses, legende_ordonnees)
     
                Nom_Graphique = "Température"
                legende_ordonnees = "Température [°C]"
                Call New_Graphique(Nom_Graphique3, legende_abscisses, legende_ordonnees)
     
            Else
                colonne = 1 + 4 * i - 4
            End If
     
            'Récupération du nom du fichier à rappatrier
            Nom_Fichier = Application.GetOpenFilename(, , "Sélectionnez la sensibilité à extraire")
     
            If Nom_Fichier <> False Then
     
                'Affectation du nom du fichier à la variable wbk (WorkBook)
                Set wbk = Workbooks.Open(Nom_Fichier)
     
                    'Copie des valeurs de temps
                    wbk.Sheets("Onglet_1").Range("B18:B3000").Copy awbk.Sheets("Affichage").Cells(ligne, colonne)
     
                    'Copie des valeurs de pression DC
                    wbk.Sheets("Onglet_1").Range("C18:C3000").Copy awbk.Sheets("Affichage").Cells(ligne, colonne + 1)
     
                    'Copie des valeurs de débit DC
                    wbk.Sheets("Onglet_1").Range("L18:L3000").Copy awbk.Sheets("Affichage").Cells(ligne, colonne + 2)
     
                    'Copie des valeurs de Température CREARE
                    wbk.Sheets("Onglet_1").Range("P18:P3000").Copy awbk.Sheets("Affichage").Cells(ligne, colonne + 3)
     
                    'Inscription de l'entête pour chacune des colonnes
                    awbk.Sheets("Affichage").Cells(ligne - 1, colonne).Value = "Temps [s]"
                    awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 1).Value = "Pression [bar]"
                    awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 2).Value = "Débit [kg/s]"
                    awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 3).Value = "Température [°C]"
     
                    Call New_plot
     
                    'Ferme le fichier qui a été ouvert pour y recopier les valeurs
                    wbk.Close
     
                'Vide la variable wbk
                Set wbk = Nothing
     
            End If
     
            'Inscription du nom du fichier utilisé afin de réaliser une traçabilité des données
            list_Range.Cells(i) = Nom_Fichier
     
        Next i
    End If
     
    awbk.Protect Structure:=True, Windows:=True
     
    'Vide la variable awbk afin de ne pas surcharger la mémoire
    Set awbk = Nothing
     
    'Mise à jour de l'affichage
    Application.ScreenUpdating = True
     
    End Sub
     
    Public Sub New_Graphique(Nom_Graphique, legende_abscisses, legende_ordonnees)
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
        ActiveChart.Location Where:=xlLocationAsNewSheet, Name:=Nom_Graphique
     
        With ActiveChart
            .HasTitle = True
            .Axes(xlCategory, xlPrimary).HasTitle = True
            .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = legende_abscisses
            .Axes(xlValue, xlPrimary).HasTitle = True
            .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = legende_ordonnees
        End With
     
    End Sub
     
    Public Sub New_plot()
     
        Sheets(Nom_Graphique1).Select
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(i).XValues = awbk.Sheets("Affichage").Cells(ligne - 1, colonne)
        ActiveChart.SeriesCollection(i).Values = awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 1)
     
        Sheets(Nom_Graphique2).Select
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(i).XValues = awbk.Sheets("Affichage").Cells(ligne - 1, colonne)
        ActiveChart.SeriesCollection(i).Values = awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 2)
     
        Sheets(Nom_Graphique3).Select
        ActiveChart.PlotArea.Select
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(i).XValues = awbk.Sheets("Affichage").Cells(ligne - 1, colonne)
        ActiveChart.SeriesCollection(i).Values = awbk.Sheets("Affichage").Cells(ligne - 1, colonne + 3)
     
    End Sub

  2. #2
    Membre éprouvé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Par défaut
    Peut-être pourrais tu mettre ton fichier en ligne?

    Merci !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 30
    Par défaut
    Je ne peux pas mettre mes fichiers en pièces jointes, ils ont une taille trop importante. Je ne peux accéder à site d'hébergement de fichiers depuis mon poste.

    Quelqu'un pourrait-il m'aider simplement à partir de ma macro ? Merci d'avance

Discussions similaires

  1. Réponses: 3
    Dernier message: 14/03/2014, 10h34
  2. Sélections feuilles et graphiques
    Par Regor dans le forum Excel
    Réponses: 0
    Dernier message: 29/11/2011, 12h10
  3. Empêcher la sélection de composants graphiques
    Par Invité dans le forum Composants VCL
    Réponses: 3
    Dernier message: 29/06/2010, 09h54
  4. [XL-2003] sélection séries pour graphique
    Par tremens dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/02/2010, 06h46
  5. Réponses: 1
    Dernier message: 04/05/2006, 16h45

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