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 :

Créer un graph à partir de tableaux dynamique [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Bonjour,
    Je souhaite créer un graphique à partir de tableaux dynamique, j'ai donc donc suivi le tuto du site qui dit ceci
    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
    Sub creationGraphiqueParTableau()
        Dim i As Byte
        Dim Tableau(10) As Integer, Tableau2(10) As Integer
     
        'Création du tableau pour les Abscisses
        For i = 1 To 10
            Tableau(i) = i * 2
        Next i
     
        'Création d'un tableau pour les Ordonnées
        For i = 1 To 10
            'Le tableau est rempli par des valeurs aléatoires pour
            'cet exemple
            Tableau2(i) = Int((50 * Rnd) + 1)
        Next i
     
        'Création graphique
        Charts.Add
        'Définit la localisation du graphique:
        'dans la feuille de calcul Feuil1 pour cet exemple
        ActiveChart.Location _
        Where:=xlLocationAsObject, Name:="Feuil1"
     
        'Ajoute une série dans le graphique
        With ActiveChart
            .SeriesCollection.NewSeries
            .SeriesCollection(1).XValues = Tableau() 'Abscisses
            .SeriesCollection(1).Values = Tableau2() 'Ordonnées
            'Définit le type (Courbe)
            .ChartType = xlLine
        End With
    End Sub
    Je l'ai adapté à mon code comme ceci
    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
    ' Activer la feuille de données
        Sheets("Import de données").Activate
     
    ' Redimensionner les tableaux
        ReDim TabTemps(xx)
        ReDim TabVmoy(xx)
     
    'Création du tableau pour les Abscisses
        For n = 2 To xx
            TabTemps(n) = Cells(n, 1)
        Next n
     
        'Création d'un tableau pour les Ordonnées
        For n = 2 To xx
            'Le tableau est rempli par des valeurs aléatoires pour
            'cet exemple
            TabVmoy(n) = Cells(2, n)
        Next n
     
        'Création graphique
        Charts.Add
        'Définit la localisation du graphique:
        'dans la feuille de calcul Test
        ActiveChart.Location _
        Where:=xlLocationAsObject, Name:="Test"
     
       'Ajoute une série dans le graphique
        With ActiveChart
            .SeriesCollection.NewSeries
            .SeriesCollection(1).XValues = TabTemps() 'Abscisses
            .SeriesCollection(1).Values = TabVmoy() 'Ordonnées
            'Définit le type (Courbe)
            .ChartType = xlLine
        End With
    et j'ai une erreur au niveau de la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .SeriesCollection(1).XValues = TabTemps()
    qui me dit :"erreur définit par l'application ou par l'objet"
    Je ne comprend pas pourquoi mon code ne fonctionne pas alors que celui de base fonctionne très bien.

    Merci d'avance

    Pardon l'erreur produite est :"impossible de définir la propriété XValues de la classe Series."

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Où est défini la variable "xx" ?

  3. #3
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Elle est définit plus dans mon programme en tant que Long, elle correspond à la hauteur du tableau de donnée

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Au temps pour moi. Je voulais dire où est-elle initialisée ?

  5. #5
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Voici le code
    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
    Sub Transfer_Enregistrements_vers_Excel()
     
     
    Dim TheTemporaryArray 'défini un tableau unidmensionel pour la capture des lignes du fichier texte
    Dim TheFinalArray() As Variant 'défini un tableau bidmensionel pour l'enregistrement informatique du fichier texte
    Dim FileName As Variant 'defini une variable qui contiendra le nom du fichier texte a ouvrir
    Dim strRec As String 'defini une variable qui contiendra une ligne du fichier texte
    Dim j As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim i As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim m As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim k As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim xx As Long 'Defini une variable qui contiendra la limite haute du tableau bidimensionel
     
    '*******************************************************
        Dim n As Long
        Dim TabTemps() As Variant, TabVmoy() As Variant
    '*******************************************************
     
    FileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Select Text Data File") 'Ouvre une fentre de selection de fichier qui permet a l'utilisateur de selectionner le fichier a importer. exclusivement des fichiers texte
     
    If FileName = False Then 'Si l'utilisateur n'a pas sélectionner de fichier
     
        Exit Sub 'alors fin de la procedure
     
    ElseIf FileName <> False Then 'Si l'utilisateur à sélectionner un fichier
     
        Open FileName For Input As #1 'Ouvre le fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, Chr(9)) 'Enregistre chaque element de la ligne séparé par un "tab" dans un tableau unidimensionel appellé TheTemporaryArray
        ReDim TheFinalArray(UBound(TheTemporaryArray), LBound(TheTemporaryArray)) 'Précise la dimension du tableau.
        xx = UBound(TheFinalArray) 'enregistre dans une variable la limite haute du tableau - normalement le nombre de "colonnes" du fichier texte  moins 1 car le tableau commence a zero et non pas 1
        Close #1 'ferme le fichier texte. Cela est necessaire pour une future redimension du tableau TheFinalArray
     
        i = 1 'donne la valeur 1 a une variable qui servira dans la definition d'un tableau bidimensionel
     
        Open FileName For Input As #1 'Réouvre le fichier texte
     
        '****** l'étape suivante va etre repetée pour chaque ligne du fichier grace à la commande "Do While...Loop"  *****
     
        Do While Not EOF(1) 'Faire quelque chose jusqu'à temps que l'on arrive à la fin du fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, vbTab) 'Enregistre chaque element de la ligne séparé par un "tab" dans un tableau unidimensionel appellé TheTemporaryArray
     
        For j = LBound(TheTemporaryArray) To UBound(TheTemporaryArray) 'Pour chaque élément du tableau unidimensionel
     
            TheFinalArray(j, i - 1) = TheTemporaryArray(j) 'l'élément du tableau unidimensionel est entré dans un tableau bidimensionel
     
        Next j 'tourne jusqu'à temps qu'il n'y ai plus d'elements dans le tableau unidimensionel
     
        ReDim Preserve TheFinalArray(xx, i) 'Redimensionne le tableau bidimensionel en y ajoutant une "ligne"
        i = i + 1 'augmemte la variable comptable qui aide a la redimension du tableau bidimensionel
     
        Loop 'repete les etapes precedente pour chaque "ligne" du ficher texte
     
        Close #1 'Ferme le fichier texte
     
        '**** L'etape suivante transfer les données dans EXCEL ****
        'Jusqu'ici toutes les données ont été transferées dans un tableau multidimensionel et non pas diretement dans Excel
     
     
        Sheets("Import de données radar").Activate 'sélectionne l'onglet où les données seront transcrites
        Cells.Select 'selectionne toutes les cellule de l'onglet
        Selection.ClearContents 'efface le contenu des cellules seletionnées
        Cells(1, 1).Select 'retire la selection de toutes les cellules
     
        For k = 0 To xx 'Pour chaque "colonne" du tableau bidimensionel faire....
     
            For m = 0 To (i - 1) 'Pour chaque "ligne" du tableau bidimentionel faire...
     
                Cells(m + 1, k + 1) = TheFinalArray(k, m) 'un transfer de l'element du tableau bidimensionel vers Excel
     
            Next m 'repeter pour chaque "ligne" du tableau bidimensionel
     
        Next k 'repeter pour chaque "colonne" du tableau bidimensionel
     
        Sheets("Menu").Activate 'reselectionne l'onglet avec le bouton
     
    End If 'ferme la condition d'execution de la procedure liée à la trouvaille du nom de fichier
     
    '*******************************************************************
    ' Activer la feuille de données
        Sheets("Import de données").Activate
     
    ' Redimensionner les tableaux
        ReDim TabTemps(xx)
        ReDim TabVmoy(xx)
     
    'Création du tableau pour les Abscisses
        For n = 2 To xx
            TabTemps(n) = Cells(n, 1)
        Next n
     
        'Création d'un tableau pour les Ordonnées
        For n = 2 To xx
            'Le tableau est rempli par des valeurs aléatoires pour
            'cet exemple
            TabVmoy(n) = Cells(2, n)
        Next n
     
        'Création graphique
        Charts.Add
        'Définit la localisation du graphique:
        'dans la feuille de calcul Test
        ActiveChart.Location _
        Where:=xlLocationAsObject, Name:="Test"
     
     
       'Ajoute une série dans le graphique
        With ActiveChart
     
     
            .SeriesCollection.NewSeries
            .SeriesCollection(1).XValues = TabTemps() 'Abscisses
            .SeriesCollection(1).Values = TabVmoy() 'Ordonnées
            'Définit le type (Courbe)
            .ChartType = xlLine
        End With
    '*******************************************************************
     
    End Sub 'fin de la procedure

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Mets une ligne :

    avant la ligne (ligne 89) :

    et poste ici la valeur affichée.

  7. #7
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Merci.
    C'est vrai que l'ajustement est mieux que dans la version précédente.
    Je teste si je peux traiter suffisamment de données avec cette méthode et te tiens au courant.

    Je viens de tester, je ne gagne qu'une seule ligne? ce qui me fait 15. J'ai besoin de beaucoup plus, de l'ordre de 20 000 lignes à mettre en graphe

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Remets un nouveau fichier texte avec plus de lignes en pièce jointe s'il te plaît.

  9. #9
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    essaiCSVtext.txt

    Merci encore

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Cette macro semble fonctionner :

    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
    Sub Transfer_Enregistrements_vers_Excel()
     
     
    Dim TheTemporaryArray 'défini un tableau unidmensionel pour la capture des lignes du fichier texte
    Dim TheFinalArray() As Variant 'défini un tableau bidmensionel pour l'enregistrement informatique du fichier texte
    Dim FileName As Variant 'defini une variable qui contiendra le nom du fichier texte a ouvrir
    Dim strRec As String 'defini une variable qui contiendra une ligne du fichier texte
    Dim j As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim i As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim m As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim k As Long 'defini une variable qui sera utilisée dans un "compteur" de données
    Dim xx As Long 'Defini une variable qui contiendra la limite haute du tableau bidimensionel
    Dim DerLig As Long
    Dim Plage As Range
     
    '*******************************************************
        Dim n As Long
        Dim TabTemps As Variant, TabVmoy As Variant
    '*******************************************************
     
    FileName = Application.GetOpenFilename("Text Files (*.txt),*.txt", , "Select Text Data File") 'Ouvre une fentre de selection de fichier qui permet a l'utilisateur de selectionner le fichier a importer. exclusivement des fichiers texte
     
    If FileName = False Then 'Si l'utilisateur n'a pas sélectionner de fichier
     
        Exit Sub 'alors fin de la procedure
     
    ElseIf FileName <> False Then 'Si l'utilisateur à sélectionner un fichier
     
        Open FileName For Input As #1 'Ouvre le fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, Chr(9)) 'Enregistre chaque element de la ligne séparé par un "tab" dans un tableau unidimensionel appellé TheTemporaryArray
        ReDim TheFinalArray(UBound(TheTemporaryArray), LBound(TheTemporaryArray)) 'Précise la dimension du tableau.
        xx = UBound(TheFinalArray) 'enregistre dans une variable la limite haute du tableau - normalement le nombre de "colonnes" du fichier texte  moins 1 car le tableau commence a zero et non pas 1
        Close #1 'ferme le fichier texte. Cela est necessaire pour une future redimension du tableau TheFinalArray
     
        i = 1 'donne la valeur 1 a une variable qui servira dans la definition d'un tableau bidimensionel
     
        Open FileName For Input As #1 'Réouvre le fichier texte
     
        '****** l'étape suivante va etre repetée pour chaque ligne du fichier grace à la commande "Do While...Loop"  *****
     
        Do While Not EOF(1) 'Faire quelque chose jusqu'à temps que l'on arrive à la fin du fichier texte
        Line Input #1, strRec 'Lit une ligne du fichier et enregistre la ligne
        TheTemporaryArray = Split(strRec, vbTab) 'Enregistre chaque element de la ligne séparé par un "tab" dans un tableau unidimensionel appellé TheTemporaryArray
     
        For j = LBound(TheTemporaryArray) To UBound(TheTemporaryArray) 'Pour chaque élément du tableau unidimensionel
     
            TheFinalArray(j, i - 1) = TheTemporaryArray(j) 'l'élément du tableau unidimensionel est entré dans un tableau bidimensionel
     
        Next j 'tourne jusqu'à temps qu'il n'y ai plus d'elements dans le tableau unidimensionel
     
        ReDim Preserve TheFinalArray(xx, i) 'Redimensionne le tableau bidimensionel en y ajoutant une "ligne"
        i = i + 1 'augmemte la variable comptable qui aide a la redimension du tableau bidimensionel
     
        Loop 'repete les etapes precedente pour chaque "ligne" du ficher texte
     
        Close #1 'Ferme le fichier texte
     
        '**** L'etape suivante transfer les données dans EXCEL ****
        'Jusqu'ici toutes les données ont été transferées dans un tableau multidimensionel et non pas diretement dans Excel
     
     
        Sheets("Import de données radar").Activate 'sélectionne l'onglet où les données seront transcrites
        Cells.Select 'selectionne toutes les cellule de l'onglet
        Selection.ClearContents 'efface le contenu des cellules seletionnées
        Cells(1, 1).Select 'retire la selection de toutes les cellules
     
        For k = 0 To xx 'Pour chaque "colonne" du tableau bidimensionel faire....
     
            For m = 0 To (i - 1) 'Pour chaque "ligne" du tableau bidimentionel faire...
     
                Cells(m + 1, k + 1) = TheFinalArray(k, m) 'un transfer de l'element du tableau bidimensionel vers Excel
     
            Next m 'repeter pour chaque "ligne" du tableau bidimensionel
     
        Next k 'repeter pour chaque "colonne" du tableau bidimensionel
     
        Sheets("Menu").Activate 'reselectionne l'onglet avec le bouton
     
    End If 'ferme la condition d'execution de la procedure liée à la trouvaille du nom de fichier
     
    '*******************************************************************
    ' Activer la feuille de données
        Sheets("Import de données radar").Activate
        DerLig = Cells(Rows.Count, 1).End(xlUp).Row
        Set Plage = Range("A2:A" & DerLig)
        Set Plage = Union(Plage, Plage.Offset(, 4))
        Var = Plage.Address
    ' Redimensionner les tableaux
        'TabTemps = Application.Transpose(Range([A2], Cells(Rows.Count, 1).End(xlUp)))
     
    'Création du tableau pour les Abscisses
     
        'Création d'un tableau pour les Ordonnées
        'TabVmoy = Application.Transpose(Range([E2], Cells(Rows.Count, 5).End(xlUp)))
     
        'Création graphique
        Charts.Add
        With ActiveChart
            .ChartType = xlLine
            .SetSourceData Source:=Plage, PlotBy:=xlColumns
            .Location Where:=xlLocationAsObject, Name:="Test"
        End With
    '*******************************************************************
     
    End Sub 'fin de la procedure

  11. #11
    Membre averti
    Homme Profil pro
    Technicien R&D électronique
    Inscrit en
    Novembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Technicien R&D électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 33
    Par défaut
    Effectivement, j'ai testé avec un nombre de données plus important et ce la ne pose pas de souci pour afficher les graphes.

    Un grand merci pour ton aide

    Si ce n'est pas abusé j'aurais une autre question.
    Comment faire pour afficher plusieurs courbes sur le même graphe en fonctions du temps avec les fonctions tu as trouvé ?
    Pour mon cas ce serait pour comparer la vitesse min et max sur un même graphe par exemple.

    Si tu as des liens sur ces fonctions cela m’intéresse !

    Merci encore

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Artichow] Comment créer un graphe à partir d'une table mysql avec deux colonnes
    Par Amel_B dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 24/12/2013, 15h50
  2. Graphiques à partir de tableaux dynamiques
    Par raziel33 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/07/2008, 10h58
  3. Réponses: 7
    Dernier message: 05/06/2007, 10h12
  4. Créer un graph Excel à partir d'un fichier
    Par kult dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/11/2005, 14h06

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