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 :

[VBA-E] graphique avec plage de donnees variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut [VBA-E] graphique avec plage de donnees variable
    Hello,

    Je tente (vainement) de faire un (en fait plusieurs) graphique (type: xlXYScatter) ou j'aurais en x et y deux plages de donnee variable (se sont les colonnes que je vais faire varier).

    Par exemples:
    je commence par faire un graph avec donnee comprise dans la
    colonne 8 entre les ligne 3 - 43 pour les x
    et colonne 3 ligne 3 - 43 pour les y

    tandis que le second graphique serait avec:
    les colonnes 9 entre les ligne 3 - 43 pour les x
    et colonne 4 ligne 3 - 43 pour les y

    etc...

    Donc le numero de la colonne des x serait une variable var1 et le numero de la colonne des y une variable var2 par exemple.

    qql peu m'aider car apres avoir essayer une bonne dizaine de possibilites aucune ne fonctionne parfaitement

  2. #2
    Membre Expert Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Par défaut
    Normalement, ça marche.
    Envoie-nous ton code, et on verra mieux où se trouve le problème.

  3. #3
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    voila le dernier essai:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Charts.Add
    ActiveChart.ChartType = xlXYScatter
     
    ActiveChart.SetSourceData Source:=Sheets("sheet1").Columns(var1), _
        PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"
    ActiveChart.SeriesCollection(1).XValues = Sheets("sheet1").Columns(var2)
    (avec Range j'avais essayer un truc qui devait ressembler a ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("Cells(2, var1), Cells(451, var1):Cells(2, var2), Cells(451, var2)"), _
        PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"
    bien que j'avas rapidement abandonner cette solution me semblant particuliermenet fausse

    ah oui dans le meme ordre d'idee des truc absurde et desperer j'ai du essayer qqch comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveChart.SetSourceData Source:=Sheets("sheet1").Range("R3Cvar1:R451Cvar1, R3Cvar2:R451Cvar2"), _
        PlotBy:=xlColumns
    ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"
    Edit
    Balises courageusement corrigées par ouskel'n'or

  4. #4
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    c'est une plage qui va de la ligne de 2 a 451 avec entete sur la premiere ligne (pas forcement utile).
    Pour les colonne cela va de colonne B a W pour les x et les colonnes EF a FA pour les colonne de y

    ce qui fait 22 graph avec var1 qui va de 2 a 23 et var2 de 136 a 157.

    P.S: merci et desole pour le code en rouge tout a l'heure

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quand tu définis ta plage, ce doit être un range, pas une colonne ni une ligne.
    Avec NoLigne = 2 a 23
    et NoColonne = 136 a 157
    TaPlage = Range(Cells(NoLigne, NoColonne),Cells(NoLigne2, NoColonne2)).address
    et quand tu définis ton graphe, tu utilises TaPlage dans le range
    Si tu avais mis ton code en enregistrant ta macro sur un exemple, mes indications aurait été plus claires (!)

    Tu dis

    A+

  6. #6
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    desole masi je ne vois toujours pas comment je dois mettre cela voila a quoi pourrait ressembler 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
    Sub create_graph()
     
    Dim var1 As Integer
    Dim var2 As Integer
    Dim Maplage() As Variant
    Dim count As Integer
    Dim count1 As Integer
    Dim nbentree As Integer         ' donne le nombre d'element de chaque serie (de la ligne 2 a 451)
     
    nbentree = 450
     
    For count = 0 To count1
     
        var1 = count + 2
        var2 = count + 136
     
        Maplage = Range(Cells(2, var1), Cells(2 + nbentree, var2))
     
        Charts.Add
        ActiveChart.ChartType = xlXYScatter
     
        ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Maplage), _
        PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="sheet1"
        ActiveChart.SeriesCollection(1).Values = Maplage(???)
        ActiveChart.SeriesCollection(1).XValues = Maplage(???)
     
    Next count
     
    End Sub
    l'element important c'est que le nombre de ligne ne change jamais c'est juste les deux colonnes qui change pour chaque graph (j'aurais donc bien apprecier de pouvoir mettre dans le range du graph seulement les deux colonnes concerner que sont var1 et var2 pour un nombre fixe de ligne a chaque fois).
    Mais j'aurais apprecier ne pas devoir stocker a chaque fois quasi toute la feuille de data dasn Maplage qui est un peu lourde question occupation de memoire....

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    L'utilisation de Plage n'était là que pour expliquer le principe

    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
    Sub GraphEtPlagesVariables()
    Dim NoCol, NoCol2, Plage
    Cells(1, 1).Select 'sort du graph pour la création du suivant (!)
        NoCol = 1  'variable
        NoCol2 = 2 'variable
        Adresse = Cells(1, NoCol).Address & ":" & Cells(15, NoCol2).Address ' peut importe ne sert qu'à créer le graph (l'adresse peut être en dur)
        Plage = "=Feuil1!" & Cells(1, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(15, NoCol).Address(ReferenceStyle:=xlR1C1)
        Plage2 = "=Feuil1!" & Cells(1, NoCol2).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(15, NoCol2).Address(ReferenceStyle:=xlR1C1)
        Charts.Add
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=Sheets("Feuil1").Range(Adresse), PlotBy:=xlRows
        ActiveChart.SeriesCollection(1).XValues = Plage
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
        ActiveWindow.Visible = False
        ActiveChart.SeriesCollection(1).XValues = Plage
        ActiveChart.SeriesCollection(1).Values = Plage2
    Cells(1, 1).Select 'sort du graph pour la création du suivant (!)
    End Sub
    Tu adaptes à ton besoin et si tu as un pb, tu dis
    Que l'utilisation de Plage soit lourd, cela va de soit mais si quelqu'un avait autre solution, je serais vraiment preneur. Quand à mobiliser l'UC, ce n'est qu'une variable.
    Pense simplement à mettre Application.screenUpdating = false avant la création des graphes et de le remettre à true après. Ce ne devrait pas être si lourd que ça.

    A+

  8. #8
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    merci bcp tout ces precieux conseils sinon encore deux petites questions.
    Premierement j'obtiens toujours un un subscript out of range (a la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SetSourceData Source:=Sheets("sheet2").Range(Adresse), PlotBy:=xlColumns
    ) dont je n'arrive pas a identifier la raison (ci dessous le code quasi complet)

    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
    Public Function GraphEtPlagesVariables(counter As Integer, Optional nbdonne As Integer = 450) As Double
     
    Dim NoCol As Integer
    Dim NoCol2 As Integer
    Dim Plage As Variant
    Dim Plage2 As Variant
    Dim Adresse As Variant
     
        NoCol = counter + 1
        NoCol2 = counter + 135
        Adresse = Cells(2, NoCol).Address & ":" & Cells(1 + nbdonne, NoCol2).Address ' peut importe ne sert qu'à créer le graph
        Plage = "=sheet2!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)
        Plage2 = "=sheet2!" & Cells(2, NoCol2).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol2).Address(ReferenceStyle:=xlR1C1)
        Charts.Add
        ActiveChart.ChartType = xlXYScatter
        ActiveChart.SetSourceData Source:=Sheets("sheet2").Range(Adresse), PlotBy:=xlColumns
        ActiveChart.SeriesCollection(1).XValues = Plage
        ActiveChart.Location Where:=xlLocationAsObject, Name:=sheetname
        ActiveWindow.Visible = False
        ActiveChart.SeriesCollection(1).XValues = Plage
        ActiveChart.SeriesCollection(1).Values = Plage2
    Deuxiement, je voulais savoir si il etait possible dans le cas ou je voudrais passer l'adressage des feuille par une variable NomFeuille d'utiliser la ligne de code suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage = "=" & NomFeuille & "!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je réponds déjà à ça :
    Citation Envoyé par gigs
    Deuxiement, je voulais savoir si il etait possible dans le cas ou je voudrais passer l'adressage des feuille par une variable NomFeuille d'utiliser la ligne de code suivante:
    Plage = "=" & NomFeuille & "!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)
    Non, pas comme tu l'as défini, puisque tu dois faire précéder "NomFeuille" de Sheets(...)
    As-tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SetSourceData Source:=Sheets(NomFeuille).Range(Adresse), PlotBy:=xlColumns
    Je ne l'ai jamais fait,
    Pour le reste, je regarde cet aprem. (si j'oublie, tu siffles) mais si quelqu'un voit quelque chose, kicejènpa...

    A+

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par gigs
    Premierement j'obtiens toujours un un subscript out of range (a la ligne
    ActiveChart.SetSourceData Source:=Sheets("sheet2").Range(Adresse), PlotBy:=xlColumns)
    Tu as vraiment baptisé ta feuil "Sheet2" ?
    Si oui, je ne comprends pas. Par contre je ne comprends pas le message d'erreur "subscript out of range" qui n'a rien à voir avec le nom de feuille.
    Es-tu sûr de ta plage, La ligne zéro n'existant pas cela pourrait se produire si tu mettais Range(Cells(0,NoCol), .... )par exemple.
    Tu vérifies et tu dis
    Comme je vois que c'est une fonction, vérifie l'homogénéité de tes variables
    Sinon, pas d'idée

    Tu dis

    A+

  11. #11
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Citation Envoyé par ouskel'n'or
    La ligne zéro n'existant pas cela pourrait se produire si tu mettais Range(Cells(0,NoCol), .... )par exemple.
    Donne une erreur 1004 (définie par l'application...)
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  12. #12
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    pour cette erreur j'ai trouve (je ne reviendrais pas sur les detail de mon incompetance) merci pour tout.

    Sinon pour le passage de l'adressage de la feuille par une variable NomFeuille.
    En fait je voulais savoir par quoi fallait il remplacer (dans la def de ma plage), la commande "=feuille1!"
    dans la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Plage = "=feuille1!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)
    tel que : "=" & NomFeuille & "!"

    Encore merci bcp

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    As-tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Plage = "=" & NomFeuille & "!" & Cells(2, NoCol).Address(ReferenceStyle:=xlR1C1) & ":" & Cells(1 + nbdonne, NoCol).Address(ReferenceStyle:=xlR1C1)
    Pas essayé mais tu vas bien faire ça pour nous

    A+

  14. #14
    Membre averti
    Inscrit en
    Octobre 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 24
    Par défaut
    J'ai essaye et je confirme cela fonctionne!!

    Merci pour tout.

    A+

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

Discussions similaires

  1. [XL-2013] Graphique avec plage de données variable
    Par CydZZ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/10/2014, 14h05
  2. [XL-2010] Graphiques avec plage de données variables
    Par baptoo61 dans le forum Excel
    Réponses: 10
    Dernier message: 26/06/2014, 10h02
  3. Graphique avec plage de donnees variable
    Par geonosis47 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/06/2014, 15h32
  4. VBA - Graphique avec plage variable
    Par virstyle dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2010, 11h48
  5. [XL-2003] Graphique avec plage de données variables
    Par yoord dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/06/2009, 11h48

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