Chartsobject

Deneb

XLDnaute Junior
Bonjour le Forum !

J'ai un fichier macroté qui doit pouvoir tourner à l'international (Japon). Le problème c'est qu'un graphique dans une feuille (un seul graphique dans la feuille) voit sa mise en forme controlée par macro. Lorsque la macro se déclenche, tout marche bien : ma mise en forme des séries de données se fait bien ... Mais mon contact au Japon obtient avec le même fichier l'erreur :
"unable to obtain Chart Objective property of Worksheet Class.error code 1004. error message window for Windows Visual Basic"
En réussissant à obtenir la même erreur en francais, j'ai compris que le problème venait du nom du graphique, qui sur les versions Francaise est "Graphique 2" et sur la version anglaise, doit avoir un nom du genre "Graphic 1" ou un truc de ce genre.

J'ai d'abord eu l'idée de crééer un settings pour executer le code Francais, ou le code Japon, mais ne connaissant pas le nom exact de ce graphique, je suis dans l'impassse, de plus, si d'autre pays utilisent ce fichier, probleme !

Mon idée est la suivante : arnaquer VBA en lui faisant trouver lui-même le nom du fichier :

Code:
Sub Blopts()
'
    
    Application.ScreenUpdating = False
    [B]ActiveSheet.ChartObjects("Graphique 2").Activate[/B]
    
    For i = 1 To 15:
    
    If (Sheets("Data").Cells((i + 7), 46).Value > 0) Then
    
    ActiveChart.SeriesCollection(i).Select
    With Selection.Border
        .Weight = xlHairline
        .LineStyle = xlNone
    End With
    With Selection
        .MarkerBackgroundColorIndex = 3
        .MarkerForegroundColorIndex = 2
        .MarkerStyle = xlDiamond
        .Smooth = False
        .MarkerSize = 5
        .Shadow = False
    End With
    Else
    
        ActiveChart.SeriesCollection(i).Select
    With Selection.Border
        .Weight = xlHairline
        .LineStyle = xlNone
    End With
    With Selection
        .MarkerBackgroundColorIndex = 11
        .MarkerForegroundColorIndex = 2
        .MarkerStyle = xlDiamond
        .Smooth = False
        .MarkerSize = 5
        .Shadow = False
    End With
    
    
    End If
    
    Next
    
    ActiveWindow.Visible = False
    Range("A1").Select
    Application.ScreenUpdating = True


End Sub

(c'est au niveau de la ligne en gras que ça coince)

Je voudrais remplacer la ligne en gras qui utilise le nom par une comande du genre
Code:
For each graphic in sheet
Et le reste.

Pouvez-vous m'aider ? Avez-vous d'autres idées ?

Merci d'avance,


Deneb
 

kjin

XLDnaute Barbatruc
Re : Chartsobject

Bonjour,
S'il n'y a qu'un seul graphique dans la feuille
Code:
Set graph = ActiveSheet.ChartObjects(1)
graph.Activate
ou encore
Code:
For Each sh In ActiveSheet.Shapes
    If sh.Type = msoChart Then
    Set graph = ActiveSheet.ChartObjects(sh.Name)
    graph.Activate
    Exit For
    End If
Next
A+
kjin
 

Statistiques des forums

Discussions
312 308
Messages
2 087 104
Membres
103 469
dernier inscrit
Thibz