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 :

Tracer des graphiques à la chaîne avec Excel/VBA


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Tracer des graphiques à la chaîne avec Excel/VBA
    Bonjour à tous,

    Je me permets d'ouvrir un nouveau sujet car je n'ai pas trouvé la réponse à ma question en faisant une recherche sur le forum. Merci à ceux qui auront la patience de lire mon sujet en entier.

    Voilà mon problème : j'ai une feuille Excel avec un certain nombre de tableaux de nombres, tous de la même taille, et je voudrais pour chaque tableau produire une représentation graphique sous forme de surface, dans une nouvelle feuille.

    Plus précisément disons que les tableaux s'appellent Tabl(A,B) (A et B sont des indices variant de 1 à 12 et 0 à 5 respectivement). Chaque tableau Tabl(A,B) s'étale sur une certaine plage de données : Cells(Ligne(A,B)+i,Colonne(A,B)+j) , pour i,j variant dans un ensemble d'indices. Je voudrais écrire un code VB avec une double boucle sur A et B qui me produise automatiquement des graphiques Graph(A,B) dans de nouvelles feuilles. Comment faire ?

    J'ai déjà enregistré une macro qui trace le premier tableau Tabl(1,0), voilà 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
    Sub DessinerSurface()
        Charts.Add
        ActiveChart.ChartType = xlSurface
        ActiveChart.SetSourceData Source:=Sheets("Resultats").Range("E4:AM82"), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Don1_Param0"
        With ActiveChart
            .HasTitle = True
            .ChartTitle.Characters.Text = "Don1_Param0"
            .Axes(xlCategory).HasTitle = False
            .Axes(xlSeries).HasTitle = False
            .Axes(xlValue).HasTitle = False
        End With
    End Sub
    OK ça marche bien pour mon premier tableau mais :
    - suis-je obligé d'utiliser la commande Range pour spécifier la source ? la commande Cells serait plus pratique vu que je connais les fonctions Ligne(A,B) et Colonne(A,B) sous forme d'entiers
    - au lieu d'écrire "Don1_Param0" comme titre, et surtout comme nom de feuille, je voudrais écrire "DonA_ParamB", où A et B sont mes indices ; comment concaténer chaînes de caractères et variables entières ? je sais le faire en C avec des %ld mais pas en VB ;
    - pour finir, l'orientation par défaut de la vue 3D ne me plaît pas trop ; j'ai des valeurs qui me plaisent pour les paramètres Hauteur, Perspective et Rotation mais je ne voudrais pas les recopier à la main pour chacun de mes 72 graphiques, comment automatiser le procédé ? il doit bien y avoir une méthode de l'objet Chart qui fait ça mais laquelle...

    Désolé si les questions sont débiles, mais je ne suis pas un pro du VB et tout ce que j'ai comme référence est un petit bouquin assez limité et plutôt orienté Access. Toute aide est la bienvenu, merci d'avance !

    Mouletabille.

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je m'auto-réponds pour la seconde question, j'ai trouvé comment concaténer des chaînes de caractères (avec &) et j'ai pu écrire une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function NomGraphique(A As Integer, B As Integer) As String
    qui produit le titre que je veux.

    D'autre part il semblerait qu'on puisse mettre des Cells dans un Range, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim matrice As Variant
    matrice = Range(Cells(1, 1), Cells(10, 10))
    mais ceci ne fonctionne pas dans ma macro de création de graphique, lorsque veux affecter un Range en tant données sources.

    Une idée ?

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je continue mon monologue..

    Une idée possible pour le Range : je peux écrire une petite fonction à base de congruence modulo 26 qui tranforme numéro de colonne en chaîne correspondante, par exemple NomColonne(13)=M, NomColonne(58)=BF, etc. Cela dit c'est une solution qui manque un peu de classe ! Et il serait étonnant que la "bonne voie" pour faire ça n'existe pas.

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon l'idée de ma procédure à base de modulo (écrire mon entier en base 26 en fait) fonctionne mais il y a plus simple dans mon cas. Je vais opter pour un Select Case sur l'entier en donnant les bonnes colonnes pour chaque cas (vu que je n'ai que 6 valeurs pour mon entier B ça va aller) ; du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Select Case B 
       Case 0 
          ColonneInitiale = "AB" 
          ColonneFinale = "BD" 
       Case 1 
         'etc...
    End Select
    Ensuite je rentre dans mon Range :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(ColonneInitiale(B) & LigneInitiale(A) & ":" & ColonneFinale(B) & LigneFinale(A))
    Donc là ça roule.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai trouvé comment modifier les propriétés de vue 3D de mon graphique, il s'agit d'aller modifier les propriétés Elevation, Rotation et Perpective de l'objet ActiveChart.

    Il me reste donc un seul problème, que je n'avais pas détecté au départ : le type de graphique "xlSurface" et ses dérivés ne fonctionnent pas ! J'obtiens Erreur d'exécution '1004': La méthode 'ChartType' de l'objet '_Chart' a échoué. Ca marche si je remplace par "xl3DArea" par exemple, mais évidemment ce n'est pas ce que je veux. Et pourtant le code de la Sub est mot-à-mot celui de la macro enregistrée.. c'est à n'y rien comprendre.

    Please help !

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Bon, et bien j'ai fini par trouver la réponse à mon problème sur un forum anglophone : on commence par créer un graphique de type xl3DArea et au dernier moment on change la propriété ChartType à la valeur xlSurface. Intuitif non ?

    Merci à tous pour votre participation discrète mais efficace !

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 19/07/2014, 14h34
  2. Problèmes pour tracer des graphiques avec une macro
    Par Margoooot dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/08/2011, 17h19
  3. [VBA] Données pour tracer des graphiques
    Par abbba dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/03/2011, 19h38
  4. Tracer des graphique à partir de vba
    Par nemesis00 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/02/2011, 17h22
  5. Graphique avec Excel VBA
    Par Clemdu77 dans le forum Excel
    Réponses: 1
    Dernier message: 09/02/2010, 13h49

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