Graphique et cellules fusionnées

Mathilde -  
Zoul67 Messages postés 2001 Statut Membre -
Bonjour,

alors voilà je rencontre un problème dans ma macro. J'ai un tableau qui se fait automatiquement. Mon tableau est variable. Je peux avoir entre 2 et x colonnes. Mes deux premières lignes sont fusionnées. Je cherche à faire un graphique via les données de ce tableau. J'ai beaucoup travaillé sur vba c'est 3 derniers mois, notamment les tableaux et les graphiques. Sauf que la ma macro pour mon graphique ne prend pas en compte la plage de données que je lui dit. Je vous joint mon fichier:

http://www.cjoint.com/c/EHFjaAPcQod

Ma macro se situe dans le module : graphiqueConsommation.
Voila l'idée: Tout d'abord, ça serai un graphique en histogramme avec en axe des ordonnées les %. Je voudrai faire ressortir que le réceptionné, le reste à réceptionner et le reste à commander en valeur. Et en axe des abscisse, je voudrai le nom du fournisseur, N°Contrat et Mandants. J'ai changé les chiffres par confidentialité. Vous trouverai dans le fichier le graphique type que je souhaite avoir. Je vous met quand même ma macro :

Sub GraphiqueHistogramme()

Sheets("Consommation").Activate
Application.ScreenUpdating = False
Dercol = [IV1].End(xlToLeft).Column
plageGraphique = "B1:" & Chr(Dercol + 64) & "3,B6:" & Chr(Dercol + 64) & "8"
ActiveSheet.ChartObjects("Graphique 1").Activate
ActiveChart.SetSourceData Source:=Range(plageGraphique), PlotBy:=xlRows
ActiveChart.ChartType = xlColumnStacked100

End Sub

Cette macro est incorporé dans une autre macro qui m'assure que le graphique 1 existe et qui va faire les modification sur ce graphique.

En espérant avoir été claire. Merci par avance pour votre aide!

2 réponses

  1. Frenchie83 Messages postés 2254 Statut Membre 339
     
    Bonjour
    Voilà
    Sub GraphiqueHistogramme()
        Application.ScreenUpdating = False
        Sheets("Consommation").Activate
        Dercol = ActiveSheet.Columns([IV3].End(xlToLeft).Column).Address(ReferenceStyle:=xlA1)
        Dercol = Left(Dercol, InStr(1, Dercol, ":", 1) - 1)
        plageGraphique = "B1:" & Dercol & "3,B6:" & Dercol & "8"
        ActiveSheet.ChartObjects("Graphique 2").Activate
        ActiveChart.SetSourceData Source:=Range(plageGraphique), PlotBy:=xlRows
    End Sub

    Cdlt
    0
    1. Mathilde
       
      Bonjour,
      merci beaucoup pour l'aide ça marche nickel!
      Bonne journée
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Ton problème est ici
    Chr(Dercol + 64)
    ne fonctionnera que pour une colonne de A à Z

    Une autre possibilité (salut à Frenchie83 au passage)

    Public Sub plageGraph()
    Const FG = "Consommation"
    Dim plage1 As String, plage2 As String, plage As String
    Dim cofin As Long
    With Sheets(FG)
      cofin = .Cells(3, Columns.Count).End(xlToLeft).Column
      plage1 = .Range(.Cells(1, 2), .Cells(3, cofin)).Address
      plage2 = .Range(.Cells(6, 2), .Cells(8, cofin)).Address
      plage = plage1 & "," & plage2
    End With
    End Sub

    Cordialement
    0
    1. Mathilde
       
      Bonjour,
      Chr(Dercol+64) ne fonctionne pas pour une colonne de A à Z? C'est-à-dire? juste pour ce cas? ou en général? Parce que j'utilise cette formule pour un autre tableau (sans cellule fusionnée) et ça marche mais je ne voudrai pas que cela me pose problème par la suite.

      Comment j'introduis ce bout de code à ma macro? (je n'ai encore jamais utilisée dePublic Sub)

      Cordialement
      0
    2. Frenchie83 Messages postés 2254 Statut Membre 339
       
      Bonjour Mathilde, Bonjour ccm81
      Chr(Dercol+64) ne fonctionne que pour une colonne de A à Z, au delà de la valeur "Z", il faut appliquer une autre méthode.
      Soit:
      -récupérer l'adresse de la dernière colonne (la méthode que j'ai employé)
      ou bien
      -récupérer le N° de la dernière colonne ( méthode utilisée par ccm81)
      Que ce soit l'une ou l'autre des méthodes n'a aucune importance, ça fonctionne pareil.

      Quant à votre question sur "Public sub" et Sub, même effet.
      Cdlt
      0
    3. Zoul67 Messages postés 2001 Statut Membre 149
       
      Bonjour,

      Chr renvoie un caractère suivant le code ASCII avec :
      - Chr(65)="A"
      - Chr(66)="B"
      -...
      -Chr(90)="Z"
      Si ta dernière colonne est AA, tu peux donc pas utiliser cette méthode.

      Public Sub, c'est comme une autre Sub, tu écris juste Public devant.

      A+
      0
    4. Mathilde
       
      Bonjour Frenchie83,
      Autant pour moi, j'avais mal lu la réponse de ccm81!
      Merci beaucoup pour la rapidité à me répondre encore une fois! Et merci pour l'aide!
      Bonne journée à vous deux!
      0
    5. Mathilde
       
      Bonjour Zoul67,

      Merci pour la petite expliquation!
      D'ailleurs j'ai une dernière question, j'utilise ceci pour d'autres graphiques :

      Dercol = [IV49].End(xlToLeft).Column
      Set plageC = Union(Range(Cells(49, 1), Cells(51, Dercol)), Range(Cells(53, 1), Cells(53, Dercol)))

      Ceci ne pose aucun problème? Ca peut aller au delà de Z?

      Cordialement
      0