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 :

Graphique avec plage de données variables [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut Graphique avec plage de données variables
    Bonjour,
    j'ai regardé sur le forum, et bien que mon problème se rapproche de celui de certaines personnes, je n'ai pas reussi a trouver mon bonheur.

    Je cherche a créer une macro qui me génère un graphique. La plage de données utilisée étant variable, je ne peux pas l'entrer en dur dans le code.
    J'arrive a 'isoler' la plage de données, mais une fois que je veux lancer le graphique, cela ne marche pas.

    Je récupère les informations a l'aide d'une inputbox. Voila le code :



    L'inputbox contient deux TexteBox (cel1 et cel2). La premiere donne la premiere cellule de la plage, et la deuxieme donne le nombre de variables a utiliser pour réaliser le graphique.



    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
    Private Sub but_ok_Click()
    Dim aa As String
    Dim bb As String
     
    Dim col As Integer
    Dim col2 As Integer
    Dim lig As Integer
    Dim lig2 As Integer
    Dim cpt As Integer
    Dim cc As Integer
     
    Dim zz As Range
     
     
    'cel1 : réponse a la question "cellule en haut a gauche de la plage de donnée" 
    aa = cel1.Text
    aa1 = Left(aa, 1)
    aa2 = Right(aa, 1)
    'cel2 : réponse a la question : "combien de variables dans la plage?"
    bb = cel2.Text
     
     
    'création de la zone de données pour le graphique
    cc = Val(bb)
     
    'première cellule de la plage de données
    Range(aa).Activate
    lig = ActiveCell.Row
    col = ActiveCell.Column
     
    'nombre de lignes dans la plage de données
    Range(aa).Select
    cpt = Range(Selection, Selection.End(xlDown)).Rows.Count
     
    'on regarde le numéro de la ligne, et le numéro de la colonne de la derniere 'cellule de la plage (en bas a droite donc)
    lig2 = lig + cpt - 1
    col2 = col + cc - 1
     
     
    'GRAPHIQUE
        Charts.Add
        ActiveChart.ChartType = xlLine
        ActiveChart.SetSourceData Source:=Sheets("Feuil2").Range(Cells(lig, col), Cells(lig2, col2)), PlotBy:=xlColumns
        ActiveChart.Location Where:=xlLocationAsObject, Name:="Feuil2"
     
     
    End SUB
    ca plante ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SetSourceData Source:=Sheets("Feuil2").Range("Cells(lig, col):Cells(lig2, col2)"), PlotBy:=xlColumns

    est-ce parce que les graphiques veulent un range dy type range("A1:Z3")? et pas avec des Cells ?



    Et une autre question : a chaque fois que je fais cela, cela me le met quand même dans un onglet différent (avec pour le coup aucun graphe vu que cela ne fonctionne pas), commetn puis-je faire pour éviter la création d'un nouvel onglet ?


    J'utilise Excel 2003

    Merci a tous,

    Yoord

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 266
    Points : 348
    Points
    348
    Par défaut
    Bonsoir,

    pour insérer le graphique sur la même feuille, et pouvoir utiliser les cells, il faut faire référence à la feuille..

    regarde le code, et notamment les point ( . ) devant Cells, Name et Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With ActiveSheet
        Charts.Add.Location Where:=xlLocationAsObject, Name:=.Name
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=.Range(.Cells(lig, col), .Cells(lig2, col2)), PlotBy _
            :=xlColumns
    End With

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup, cela fonctionne.
    Il y a juste que le .name ne veut pas fonctionner car il me demande un nom type string, et je dois mettre entre guillements le nom de la feuille dans lequel je veux qu'il apparaise.

    Merci en tout cas pour le coup de main.
    Yoord

    En fait, je souhaite que mon graphique s'affiche dans la page active (enfin celle d'ou sont prises les données). Le code .name ne fonctionne pas, et je ne sais pas trop comment faire.
    Je suis embêté également pour récupérer les libellés de l'axe des abscisses, car il me demande le nom de la page. lorsque le met activesheet cela ne fonctionne pas...
    Voila ce que j'ai mis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveChart.SeriesCollection(i).XValues = "=" & ActiveSheet & "R" & lig & "C" & col - 1 & ":R" & lig2 & "C" & col - 1
    avec (lig, col) l'emplacement de la premiere cellule de la plage de données, et lig2 l'indice de la dernière ligne de la plage de données.

    je souhaite que la macro puisse être utilisée dans n'importe quel classeur et n'importe quelle feuille...

    Merci d'avance

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour à tous,

    Il y a juste que le .name ne veut pas fonctionner car il me demande un nom type string, et je dois mettre entre guillements le nom de la feuille dans lequel je veux qu'il apparaise.
    Pourtant dans le code fourni par mapeh, ActiveSheet.Name est bien un string
    Si ça ne marche pas tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim Ws as worksheet
    Dim LeNom as string
    set ws = worksheets("nom de la feuille") ' ou activesheet si tu veux la feuille active
    ' Lenom = ws.name '=> nono
    LeNom = "Nom de ma feuille graphique"
    With ws
        Charts.Add.Location Where:=xlLocationAsObject, Name:=LeNom
        ActiveChart.ChartType = xlLineMarkers
        ActiveChart.SetSourceData Source:=.Range(.Cells(lig, col), .Cells(lig2, col2)), PlotBy _
            :=xlColumns
    End With
    Edit: après vérification dans mes codes Name est le nom de l'onglet que tu veux donner au graphique

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 19
    Points : 14
    Points
    14
    Par défaut
    Salut,
    Merci pour votre aide, le code de mapeh a fonctionné lorsque j'ai mis activesheet avant le .name
    Il me semblait que ca le prenait par défaut si on ne le mettait pas ...
    mais merci pour vos éclaircissements.

    Pour l'axe des abscisses, je me suis débrouillé a le prendre des le début dans la zone de sélection (il faut juste que la cellule en haut a gauche soit non vide, sinon ca ne marche pas).

    Merci pour le coup de main en tout cas !

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    le code de mapeh a fonctionné lorsque j'ai mis activesheet avant le .name
    Le with/end-with permet de regrouper toutes les propriétés pour ne pas retapper à chaque fois activesheet. ... ou worksheet... .. en plus la lisibilité du code est ainsi améliorée.

    Content si j'ai pu t'aider.
    A+

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 01/04/2019, 17h34
  2. [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
  3. [XL-2010] Graphiques avec plage de données variables
    Par baptoo61 dans le forum Excel
    Réponses: 10
    Dernier message: 26/06/2014, 10h02
  4. Graphique avec plage de données contenant des dates / heures
    Par ArthurO0O dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/08/2007, 21h13
  5. [VBA-E] graphique avec plage de donnees variable
    Par gigs dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 03/04/2006, 14h50

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