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 :

Graphiques en VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Graphiques en VBA
    Bonjour,
    courte présentation : 57 ans, programmeur ayant étudié COBOL (ans 74), il me faut maintenant travailler en VBA pour Excel.
    Je n'y excelle pas. En fait, je suis inscrit à une formation, je l'attends depuis un an, je ne l'aurai que dans 18 mois au plus tôt. Et le travail n'attend pas.

    Voici le problème.

    J'ai un classeur qui ne contient que des relevés de données pour 27 sites, les seuls calculs sont des totaux.
    Une feuille par année plus une feuille "général" qui reprend simplement les valeurs. Une feuille par an pour avoir une présentation lisible et imprimable, un récapitulatif que je n'ai créé que pour avoir des graphiques.

    Une image de la page :

    www.flickr.com/photos/brischri/8957799354/

    En abscisse, les années (et les mois), en ordonnée, les sites (et les 5 types de données).
    Chaque rectangle contient 60 valeurs.

    J'aimerais sortir des graphiques semblables pour le nombre de dossiers (D), le nombre de pièces (P) et le volume de données (V) sur une page par site.
    Plusieurs boutons devraient lancer plusieurs macros : 1 site 1 an (celui en cours), tous les sites 13 mois (de mai 2012 à mai 2013, par ex.) et tous les sites 24 mois (en 2 colonnes par mois : janvier 2012, janvier 2013, février 2012, février 2013, etc.)

    Les macros à créer auront une structure semblable (je pense) :
    • Créer un tableau des premières lignes de titres (aTitres).
      • aTitre(0)=nombre de données (1 ou 27)
      • aTitre(1)="ANT" -> "VEU" ou "BRG"
    • Créer un tableau (aTitresGraph) des titre de graphiques (Dossiers, Pièces, Volume)
    • Créer sa deuxième ligne de titre dans une variable.
    • Créer un classeur temporaire ayant aTitre(0) feuilles
    • Renommer les feuilles : aTitre(n) => NomFeuille(n)
    • Répéter n=0 -> aTitre(0)
      • Ouvrir Feuille(n)
      • Placer les 2 lignes de titre de la page
      • Répéter 3 fois pour
        • créer le graphique D
        • créer le graphique P
        • créer le graphique V
    • Écraser les graphiques pour en faire une image (gain de place et impossibilité de modifier par après sans avoir accès au classeur original)


    Des petites questions :
    - Cette façon de penser doit être correcte pour une colonne par mois, je ne sais pas si ça convient pour deux colonnes par mois et, si oui, comment présenter les données de manière à n'avoir qu'une macro à écrire (et maintenir).
    - Comment passer les coordonnées des graphiques ?
    - Comment remplacer les nombres des mois par leurs valeurs (Janvier àld 1, Février àld 2, etc.) ?
    - Faut-il vraiment un classeur temporaire ? Ou un classeur par macro ? (Stats.1.1.xlsx, Stats.1.13.xlsx, Stats.27.1.xlsx, Stats.27...)

    Christian


    édit : l'image ne s’affiche pas comme à la prévisualisation, je verrai plus tard comment régler ce petit problème.
    Dernière modification par Invité ; 14/06/2013 à 11h37.

  2. #2
    Expert éminent 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
    Par défaut
    Bonjour
    Vous êtes sur la bonne voie néanmoins avec plus de précisions nécessaires
    Une explication de la présentation des données (le cas échéant un petit classeur exemple avec des données non confidentielles)
    Vous n'aurez pas besoins de classeurs temporaires.

    PS: Il est possible de faire beaucoup de choses avec excel sans macros

  3. #3
    Invité
    Invité(e)
    Par défaut
    Rien de confidentiel dans une série de chiffres...

    brischri.angelfire.com/textes/statistiques.xlxs

    Macro stat.01.12 (1 site, 1 an)
    Sélectionner une cellule, cliquer sur le bouton (pas encore créé le bouton, bah, la macro non plus).

    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
     
    Option Explicit
        ' Constantes
        Const nColPrec As Integer = 2 ' nombre de colonnes avant le tableau
        Const nRowPrec As Integer = 3 ' nombre de lignes avant le tableau
     
        ' Variables
        Public nRow As Integer
        Public nCol As Integer
     
        ' Adresse du range
        Public nTop As Integer
        Public nLeft As Integer
        Public nBottom As Integer
        Public nRight As Integer
     
        ' Index et autres
        Public n As Integer
     
    Sub StatS01D12()
        '
        ' S01D12
        '             Site : 1
        '            Durée : 12 mois, de janvier à décembre
        '
        nRow = ActiveCell.Row
        nCol = ActiveCell.Column
     
        ' Calcul de nTop & nBottom
        nRow = nRow - nRowPrec ' enlever les titres de colonnes
        nTop = Int((nRow - 1) / 5)
        nTop = (nTop * 5) + 1
        nTop = nTop + nRowPrec ' remettre les lignes du titre
        nBottom = nTop + 4
     
        ' Calcul de nLeft & nRight
        nCol = nCol - nColPrec ' enlever les lignes du titre
        nCol = Int((nCol - 1) / 12)
        nCol = (nCol * 12) + 1
        nLeft = nCol + nColPrec ' remettre les lignes du titre
        nRight = nLeft + 11
     
     ' Vérification
     Range(Cells(nTop, nLeft), Cells(nBottom, nRight)).Select
    End Sub
    Je ne sais pas quelles valeurs je dois passer à la macro qui créera les graphiques, j'attends un peu mais, normalement, cette macro devrait fonctionner.
    Il faudra ajouter une ligne avant le tableau, au-dessus des titres de colonnes pour mettre les boutons. Et adapter la valeur de nRowPrec en conséquence.

    Je ne suis pas certain que la définition des variables soit correcte, il me semble avoir eu quelques problèmes la dernière fois que j'ai utilisé cette façon de faire (mais c'était il y a un an au moins).

    Pour vérifier que le range calculé soit correct, le sélectionner. D'où le
    Range(Cells(nTop, nLeft), Cells(nBottom, nRight)).Select
    qui me semble grammaticalement correct, mais j'inverse peut-être nTop et nLeft.

    édit :
    après deux ou trois petites corrections, ça fonctionne bien comme je le voudrais.
    Il reste à remplir les titres et appeler la macro qui crée la page.
    Dernière modification par AlainTech ; 16/06/2013 à 00h37. Motif: Fusion de 2 messages

  4. #4
    Expert éminent 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
    Par défaut
    La formule DECALER d'excel est très puissante pour ton cas.

    Ci-joint proposition sans vba qui fonctionne avec la définition de l'étendue de la plage de cellule à prendre en considération dans le graphique en fonction du titre choisi et de la période choisie.

    Le tout est géré par l’insertion de noms dynamique à l'aide de la fonction DECALER.

    http://cjoint.com/13jn/CFmqIBWSmtf.htm

    PS. ça reste perfectible

  5. #5
    Invité
    Invité(e)
    Par défaut
    Joli travail que je vais essayer de comprendre.

    Malheureusement, je ne pourrai utiliser ta feuille telle quelle.
    Il me faut 3 graphiques par page pour envoyer les feuilles aux responsables, qu'ils puissent contrôler le travail effectué.
    Et, à moins de créer la feuille site par site, je ne vois pas d'autre manière que créer 81 graphiques sur 27 pages, ce qui alourdirait fameusement le classeur. Sauf à transformer le graphique en image, ce qui impose (d'après ce que je connais d'Excel, c'est à dire peu) l'emploi de macros.

  6. #6
    Expert éminent 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
    Par défaut
    Bonjour
    Malheureusement, je ne pourrai utiliser ta feuille telle quelle.
    Le but n'était pas d'utiliser le fichier exemple tel mais l'idée est là.

    De la même manière, on peut créer les graphiques souhaités (3 graphiques) avec les données variables et faire enfin un petit code qui parcourt les 27 sites. change la source de données des graphiques et enregistre-les en images.

    Exemple avec le fichier précédent avec un seul graphique par site à exporter. La structure du fichier est laissée telle.

    Code (appelé par le bouton sur la feuille GR "Export Charts"):

    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
    Sub TransferChart()
    Dim Rep As String, Fich As String
    Dim i As Byte
    Dim Tb
     
    Rep = ThisWorkbook.Path
    CreerSousRep Rep
    With Worksheets("GR")
        Tb = .Range("CODE")
        For i = 1 To UBound(Tb, 1)
            .Range("NTitre").Value = i
            Fich = Rep & Tb(i, 1) & "_" & Format(Now, "yyyymmdd-hhnn") & ".jpg"
            .ChartObjects(1).Chart.Export Filename:=Fich, FilterName:="jpg"
            DoEvents
        Next i
        .Range("NTitre").Value = 1
    End With
    MsgBox "Export terminé"
    End Sub
     
    'Sub pour créer un répertoire par jour
    Private Sub CreerSousRep(ByRef Rep As String)
     
    Rep = Rep & "\Charts_" & Format(Now, "yyyymmdd") & "\"
    If Dir(Rep, vbDirectory) = "" Then MkDir Rep
    End Sub
    Fichier:
    http://cjoint.com/13jn/CFnk1h2qSpp.htm


    L'approche étant d'exploiter au maximum les possibilités d'Excel tout en restant raisonnable dans les ressources et ne faire appel à vba que si c'est absolument nécessaire.

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

Discussions similaires

  1. Organiser des graphiques en VBA sous Word
    Par ShAk44 dans le forum Word
    Réponses: 4
    Dernier message: 26/07/2007, 21h40
  2. Graphique Excel VBA
    Par Elisa2007 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 03/04/2007, 11h08
  3. vba excel - Donner un titre a un graphique en vba
    Par brethomeau dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/11/2005, 09h13
  4. Paramétrage de graphique en vba
    Par demerzel0 dans le forum Access
    Réponses: 2
    Dernier message: 07/11/2005, 10h59
  5. Graphique en VBA
    Par Celia1303 dans le forum Access
    Réponses: 1
    Dernier message: 04/11/2005, 15h10

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