Macro vba

Résolu
Bonjour,

voila je vous joins ce petit bout de programme pour que vous m'expliquer ce qui cloche
en fait le probleme c'est qu'il ne me fait pas le graphique pour la derniere valeur de la colonne
je ne sais pas si je suis claire...

merci!

Dim col, col1, nbf As String

nbf = nb - 1
col = "R1C" & nbf
col1 = "R2C" & nbf

ActiveSheet.ChartObjects("Chart 37").Activate
ActiveChart.SeriesCollection(1).Select
ActiveChart.SeriesCollection(1).Formula = _
"=SERIES(Item_per!R2C1,Item_per!R1C2:" & col & ",Item_per!R2C2:" & col1 & ",1)"

ActiveChart.Axes(xlCategory).Select
With ActiveChart.Axes(xlCategory)
.MajorUnit = 21
End With

28 réponses

Résumé de la discussion

Un problème de graphique Excel en VBA empêche d'afficher la dernière valeur de la colonne dans une série, alors que le reste des valeurs et la configuration des axes semblent corrects. Des suggestions portent sur le calcul précis du nombre de colonnes et l'utilisation des plages (R1C2 et R2C2) dans la formule SERIE, tout en évitant les sélections répétées et en alignant la série sur Item_per. Pour finir, ne pas utiliser .Select et adopter une version qui calcule nb via une colonne déterminante puis ajuste la plage de données et l'axe des catégories, ce qui améliore la stabilité et le rendu.

Bobot (l’IA à votre service)
  1. Bonjour,

    Il me semble qu'il manque la première partie de ton code, car dans ce que tu montres, on ne sait pas à quoi correspond nb....

    @ te relire
    0
    1. désolée! et merci

      'compte le nombre de colonne dans item_per
      Dim marca3 As Integer
      Dim nb As Integer
      marca3 = 1
      nb = 1
      Do While (marca3 <> 0)
      var12 = Cells(1, nb).Value

      If var12 = "" Then
      marca3 = 0
      Else
      nb = nb + 1
      End If
      Loop
      0
      1. Re-,

        Afin de déterminer le nombre de colonnes, tu peux essayer ainsi :

        nb = Range("IV1").End(xlToLeft).Column


        Et dans le restant de ton code, nbf est inutile, utilise nb (si tu retranches 1, il te manquera effectivement la dernière colonne...)

        Bonne journée
        0
        1. merci pour ton aide,j'ai essayé de remplacer par nb mais il me manque toujours le graph de la derniere valeur de la colonne

          merci!
          0
          1. Re-,

            Tu as bien un en-tête, dans ta dernière colonne? (ligne 1)

            Essaie avec ce code :

            Dim Col As String, Col1 As String
            Dim Nb As Integer
            
            Nb = Sheets("Item_per").Rows("1:2").Find("*", , , , xlByColumns, xlPrevious).Column
            Col = "R1C" & Nb
            Col1 = "R2C" & Nb
            
            ActiveSheet.ChartObjects("Chart 37").Activate
            ActiveChart.SeriesCollection(1).Select
            ActiveChart.SeriesCollection(1).Formula = _
                "=SERIES(Item_per!R2C1,Item_per!R1C2:" & Col & ",Item_per!R2C2:" & Col1 & ",1)"
            
            ActiveChart.Axes(xlCategory).Select
            With ActiveChart.Axes(xlCategory)
                .MajorUnit = 21
            End With
            


            Bon courage
            0
            1. merci! mais j'ai toujours le meme problème il me manque la derniere valeur de ma colonne

              merci quand meme!
              0
              1. Re-,

                Euh, as-tu vérifié l'échelle de tes axes? (double-clic sur les axes, onglet "échelle")

                Pour voir
                0
                1. je dois changer quelque chose?
                  dans cet onglet le min (08/04/2007)le max (29/03/2009)st cochés et l'unité principale est a 21 la secondaire a 1 l'axe des ordonnées y coupe a (08/04/2007)

                  j'ai oublié de dire que j'etais novice et que je "répare" cette macro

                  merci!
                  0
                  1. Re-,

                    Et la date, dans la dernière colonne, est-elle supérieure au 29/03/2010?

                    Si oui, modifie la valeur max...

                    Nota, les dates sont-elles dans la 1ère ligne?

                    Si oui, on peut également modifier la valeur max de l'échelle par ce même code, démarre l'enregistreur de macro lorsque tu fais cette opération
                    0
                    1. les dates sont bien dans la premiere ligne et la date max est le 29/03/2009
                      que dois-je changer?

                      désolée et merci!
                      0
                      1. Re-,

                        Essaie ce code (je n'utilise pas les .Select, comme tu peux le remarquer...)

                        Sub code_pour_vba()
                        Dim Col As String, Col1 As String
                        Dim Nb As Integer
                        Dim Cht As Chart
                        Dim ValMax As Long
                        Set Cht = Sheets("Item_per").ChartObjects("Chart 37").Chart
                        ValMax = Application.Max(Rows(1))
                        
                        Nb = Sheets("Item_per").Rows("1:2").Find("*", , , , xlByColumns, xlPrevious).Column
                        Col = "R1C" & Nb
                        Col1 = "R2C" & Nb
                        With Cht
                            With .SeriesCollection(1)
                                .Formula = _
                                    "=SERIES(Item_per!R2C1,Item_per!R1C2:" & Col & ",Item_per!R2C2:" & Col1 & ",1)"
                            End With
                            With .Axes(xlCategory)
                                .MaximumScale = ValMax
                                .MajorUnit = 21
                            End With
                        End With
                        End Sub
                        


                        Uniquement valable, si les dates sont dans la 1ère ligne...

                        Bon courage
                        0
                        1. merci!

                          J'ai l'erreur impossible de lire la propriété ChartObjects de la classe worksheet

                          ??
                          0
                          1. Re-,

                            Je te propose de joindre ton fichier, avec des données bidons, mais les vrais dates, en utilisant un de ces sites :

                            www.cjoint.fr
                            www.cijoint.fr

                            colles le lien qu'on te donne dans ta réponse, on va voir ce qu'on peut faire
                            0
                            1. ce sont des données que je ne peux pas mettre sur internet désolée
                              merci pour ton aide en tous cas!
                              0
                              1. Contributeur
                                Salut le forum

                                Excusez mon intrusion

                                Épure le fichier des données confidentielles et envoi la structure avec ta macro.

                                Pour joindre un fichier, tu crèes un lien à l'aide de
                                https://www.cjoint.com/ ou de http://cijoint.fr/ et tu
                                recopies le lien dans ton prochain message.

                                Mytå
                                0
                            2. Re-,

                              en relisant, j'ai peut-être mal déterminé l'onglet qui contient le graphique....

                              Vérifie le nom de l'onglet (j'ai supposé, sans doute à tort, qu'il était dans l'onglet "Item_per")

                              Modifie le nom de l'onglet dans cette ligne :

                              Set Cht = Sheets("Item_per").ChartObjects("Chart 37").Chart
                              


                              Pour voir...
                              0
                              1. Re-,

                                Euh, Item, ou item (attention à l'orthographe, majuscule, minuscule, espaces avant ou après......)

                                Sinon, pour le fichier, juste l'onglet, avec des données bidons, cela suffit....

                                Tu fais un clic droit sur l'onglet, "Déplacer", "Dans le classeur : Nouveau Classeur"

                                Modifie les données, les noms, etc......

                                Enregistre, et si tu peux l'envoyer, ce sera bien plus facile....

                                Vérifie également que le graphique s'appelle bien "Chart 37"
                                Pour ce faire, démarre l'enregistreur de macro, sélectionne le graphique, et stoppe l'enregistreur...
                                Dans VBE, regarde le code généré, et note le nom du graphique

                                Bon courage
                                0
                                1. voila le lien je ne sais pas si cela va vous aider
                                  merci
                                  http://www.cijoint.fr/cjlink.php?file=cj201008/cijYBef3B0.xls
                                  0
                                  1. Re-,

                                    Si tu as effectivement copié l'onglet, je ne vois pas de graphique.....

                                    Es-tu sûre que le graphique est bien sur cet onglet? (il aurait du apparaître....)

                                    @ te relire
                                    0
                                    1. http://www.cijoint.fr/cjlink.php?file=cj201008/cijlMRGVmr.xls

                                      désoléé
                                      0
                                      • 1
                                      • 2