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 :

Mise a jour graph automatique via macro vba


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 32
    Points
    32
    Par défaut Mise a jour graph automatique via macro vba
    Bonjour a tous,

    je n'arrive pas automatisé un graphe via une macro.
    l'idée c'est de sélectionner la dernière colonne du tableau que je rajoute contenant des nouvelles valeurs puis le graphe reprend la nouvelle sélection "les nouvelles données".
    j'ai un code qui me permet de sélectionner la dernière colonne mais après je bloque pour la suite.

    pouvez-vous me filer un coup de main svp ?
    merci par avance pour votre aide.
    En pj exemple (feuil1= version avant mise a jour) et (Feuil1 (2) = version après mise a jour)
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Tu n'as pas besoin d'une macro. Définis un nom (PlageY dans le classeur joint) défini par le formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECALER($A$2:$A$10;;NBVAL($1:$1)-1)
    Dans Sélectionner les données, modifie les valeurs de la série et mets :
    C'est tout. A chaque ajout ou suppression de colonne (ou de valeur, le graphique se met à jour.

    PJ : undo74 Exple.xlsx

  3. #3
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut
    il me semble qu'l demande une macro pour mettre a jour un graph alors voici
    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
        'Mise à jour graphique
    Sub GraphPnL(ByVal xlsheet As Worksheet)
            'definitions variables
        Dim LastCell As Long
        Dim MyRange As Range, MyRange2 As Range
        Dim MyRange3 As Range
     
            'Mise à Jour du graphique
        With xlsheet
                'definition des ranges
            LastCell = .Range("A9").End(xlDown).Row
            Set MyRange = .Range("A10:A" & LastCell)
            Set MyRange2 = .Range("B10:B" & LastCell)
            Set MyRange3 = .Range("j10:j" & LastCell)
     
     
                'Assignation des ranges de données
            .ChartObjects(1).Chart.SeriesCollection(1).XValues = MyRange
            .ChartObjects(1).Chart.SeriesCollection(1).Values = MyRange2
            .ChartObjects(1).Chart.SeriesCollection(2).Values = MyRange3
     
        End With
    End Sub

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    @tamtam64 : Tu as raison, mais s'il ne sait pas que c'est possible sans macro ?

  5. #5
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut
    Oui c'est sur , de tte facon toutes les formules sont les bienvenues je supose

  6. #6
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 399
    Points
    16 399
    Par défaut
    Bonjour
    Citation Envoyé par Daniel.C Voir le message
    ...
    Dans Sélectionner les données, modifie les valeurs de la série et mets :
    C'est tout. A chaque ajout ou suppression de colonne (ou de valeur, le graphique se met à jour.
    Il ne faut pas mettre le nom de l'onglet mais celui du classeur, extension incluse soir selon l'exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ='undo74 Exple.xlsx'!PlageY
    .

  7. #7
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    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 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour Chris,

    Si tu mets le nom de la feuille, c'est bon quand même. Excel la remplace par le nom du classeur.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Bonjour a vous,
    Avant merci encore pour votre réactivité et votre aide.
    la solution de Daniel est très bien sans utilisation de code
    la solution de tamtam64 me semble pas mal mais je n'arrive pas à l'adapter dans mon fichier exemple.
    sans oublié 78chris pour ta remarque merci à toi aussi


    j'ai mis dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Sub test()
    Dim xlsheet As Worksheet
    Set xlsheet = ThisWorkbook.Worksheets("Feuil1")
    Call GraphPnL(xlsheet)
    End Sub
    et:

    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
     
    'Mise à jour graphique
    Sub GraphPnL(ByVal xlsheet As Worksheet)
            'definitions variables
        Dim LastCell As Long
        Dim MyRange As Range, MyRange2 As Range
        Dim MyRange3 As Range
     
            'Mise à Jour du graphique
        With xlsheet
                'definition des ranges
            LastCell = .Range("A9").End(xlDown).Row
            Set MyRange = .Range("A10:A" & LastCell)
            Set MyRange2 = .Range("B10:B" & LastCell)
            Set MyRange3 = .Range("j10:j" & LastCell)
     
     
                'Assignation des ranges de données
            .ChartObjects(1).Chart.SeriesCollection(1).XValues = MyRange
            .ChartObjects(1).Chart.SeriesCollection(1).Values = MyRange2
            .ChartObjects(1).Chart.SeriesCollection(2).Values = MyRange3
     
        End With
    End Sub
    je lance test via un bouton : le code bloque au niveau de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .ChartObjects(1).Chart.SeriesCollection(2).Values = MyRange3
    Pouvez-vous stp me dire d'ou provient le ploblème ?
    un grand merci a vous

  9. #9
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut
    tu as choisi mon code ah ah , je t'en remercie lol, non plus sérieusement , je vais t'en dire plus ca depend combien de courbes tu as ds 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
     
    'Mise à jour graphique
    Sub GraphPnL(ByVal xlsheet As Worksheet)
            'definitions variables
        Dim LastCell As Long
        Dim MyRange As Range, MyRange2 As Range
        Dim MyRange3 As Range
     
            'Mise à Jour du graphique
        With xlsheet
                'definition des ranges en fait il se mettent a jour puisque le lastcell comme tu vois trouve la dernière ligne remplie , donc il s'adapte a coup sur
            LastCell = .Range("A9").End(xlDown).Row
    'tu dispose 3 ranges si tu as 3 colonnes pour 3 courbes , 2 si tu as deux colonnes pour 2 courbes ... etc , donc ca depend si ton graphique a une ou plusieurs courbes
            Set MyRange = .Range("A10:A" & LastCell)
            Set MyRange2 = .Range("B10:B" & LastCell)
            Set MyRange3 = .Range("j10:j" & LastCell)
     'ici c'est un peu plus dur mais pas tant que ca , il faut savoir le modele objet va en graphique , chartobject est a collection des objets graphiques sur une feuille puis chart puis les courbes de ce graphique , la pareil tu vois il y'a 3 colonnes , la c'est pareil tu adapte. , j'ai mis que les doncées étaient égale aux valeurs de mon range , a chaque courbe , un range ;)
     
                'Assignation des ranges de données
            .ChartObjects(1).Chart.SeriesCollection(1).XValues = MyRange
            .ChartObjects(1).Chart.SeriesCollection(1).Values = MyRange2
            .ChartObjects(1).Chart.SeriesCollection(2).Values = MyRange3
     
        End With
    End Sub
    Apres si vraiment t y arrive pas tu nous file tes colonnes et tt et on te le fait mais la c'est largement faisable

    Pour moi tu ne dois pas avoir de 3 eme courbe tout simplement

  10. #10
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 491
    Points : 16 399
    Points
    16 399
    Par défaut
    Re

    Citation Envoyé par Daniel.C Voir le message
    Bonjour Chris,
    Si tu mets le nom de la feuille, c'est bon quand même. Excel la remplace par le nom du classeur.
    Bah zut alors j'avais jamais essayé ! C'est super pratique surtout quand t'as un nom de classeur pas possible !

    Je vais de ce pas me coucher un poil moins bête. Bonne nuit.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Citation Envoyé par tamtam64 Voir le message
    Pour moi tu ne dois pas avoir de 3 eme courbe tout simplement
    Re,
    Je ne comprends pas vraiment ton code le truc c'est le résultat obtenu par notre ami Daniel mais je n'arrive pas l'expliquer autrement si tu prends mon exemple en pj tu as la table et le graph initial dans la feuil1 puis mon souhait dans la feuil1(2).
    si tu ne voir pas c'est pas grave je prendrais la solution de Daniel.
    merci merci et merci pour ton aide.

  12. #12
    Membre éclairé
    Avatar de tamtam64
    Homme Profil pro
    stagiaire developpement vba
    Inscrit en
    Mai 2012
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : stagiaire developpement vba
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2012
    Messages : 456
    Points : 658
    Points
    658
    Billets dans le blog
    17
    Par défaut
    je te fais fait ca

    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
    'Mise à jour graphique
    Sub GraphPnL(ByVal xlsheet As Worksheet)
            'definitions variables
        Dim LastCell As Long
        Dim MyRange As Range, MyRange2 As Range
     
            'Mise à Jour du graphique
        With xlsheet
                'definition des ranges en fait il se mettent a jour puisque le lastcell comme tu vois trouve la dernière ligne remplie , donc il s'adapte a coup sur
            LastCell = .Range("A2").End(xlDown).Row
    'tu dispose 3 ranges si tu as 3 colonnes pour 3 courbes , 2 si tu as deux colonnes pour 2 courbes ... etc , donc ca depend si ton graphique a une ou plusieurs courbes
            Set MyRange = .Range("A2:A" & LastCell)
            Set MyRange2 = .Range("W2:B" & LastCell)
     'ici c'est un peu plus dur mais pas tant que ca , il faut savoir le modele objet va en graphique , chartobject est a collection des objets graphiques sur une feuille puis chart puis les courbes de ce graphique , la pareil tu vois il y'a 3 colonnes , la c'est pareil tu adapte. , j'ai mis que les doncées étaient égale aux valeurs de mon range , a chaque courbe , un range ;)
     
                'Assignation des ranges de données
            .ChartObjects(1).Chart.SeriesCollection(1).XValues = MyRange
            .ChartObjects(1).Chart.SeriesCollection(1).Values = MyRange2
     
        End With
    End Sub
    je peux pas tester ta feuille ya des bugs , j'ai pas le nom de la feuille ... enfin bon si eelle marche chez toi ca va . j'a vais raison tu avais un range en trop puisque tu n'as besoin que de deux colonnes.

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Bonjour tamtam64,
    Avant tout merci pour ton aide

    Effectivement nous devons traiter deux colonnes Col A2:A et la dernière colonne du tableau cela me pose problème car dans ton code le range est fixe je dois a chaque fois modifier le code pour indiquer la bonne colonne pour que le graph puis prendre les nouvelles données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyRange2 = .Range("X2:X" & LastCell)
    par exemple si ma nouvelle colonne se trouve en X il faut que je change .

    Question il possible de rendre la fonction dynamique si j'ai une nouvelle colonne dans mon tableau la macro va récupérer automatiquement la position de la dernière colonne ?

    J'ai mis en Pj le fichier avec ton code qui fonctionne très bien sans la fonction auto peux-tu stp me si tu as la possibilité d'automatiser la fonction. en te remercient d'avance.
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [XL-2013] Mise à jour graph automatique
    Par addesign dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2015, 09h57
  2. [WD-2010] Mise à jour de signet par macro VBA
    Par totoro the big one dans le forum VBA Word
    Réponses: 1
    Dernier message: 15/03/2015, 21h14
  3. mise en forme TCD via macro vba
    Par Vinzz974 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/02/2012, 15h48
  4. [XL-2007] Mise a jour graphe automatique apres choix de données
    Par glassgreen13 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 13/07/2010, 17h27
  5. Réponses: 6
    Dernier message: 12/01/2009, 08h29

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