Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2894 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Excel 2003 vs Excel 2007

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

VBA Excel 2003 vs Excel 2007

n°1874954
TheRevelle​r
Posté le 19-04-2009 à 19:45:12  profilanswer
 

Bonjour,
 
Je suis vraiment à bout de nerfs en ce moment à cause de l'incompatibilité des scripts VBA Excel 2003 avec les scripts VBA Excel 2007. Je trouve ça totalement stupide ces modifications sans tenir compte de la conversion de 2003 à 2007, ce qui gâche tous les scripts.
 
J'ai un programme externe qui vient chercher l'objet Excel pour le contrôler directement par VBA. Le programme entre des données dans Excel et trace ensuite un graphique sur Excel. Par la suite, je veux modifier les couleurs des lignes tracées pour chaque série du graphique.
 
Puisque je n'y connais rien en programmation, j'ai enregistré une macro sous Excel 2003 pendant que je modifie les couleurs des lignes. Je ne sais pas si c'est la meilleure façon, mais je modifie tout simplement les couleurs dans les options générales de Excel, ce qui est donc les couleurs 25 à 32 pour les 8 premières séries. Déjà là, je ne sais pas pourquoi, mais je dois envoyer ces couleurs en BGR au lieu de RGB... Bref, ça donne ceci et ça fonctionne très bien sous Excel 2003 :
 
$oExcel.ActiveWorkbook.Colors(25) = 0x0000FF; 0xFF0000
$oExcel.ActiveWorkbook.Colors(26) = 0xFF0000; 0x0000FF
$oExcel.ActiveWorkbook.Colors(27) = 0x00FFFF; 0xFFFF00
$oExcel.ActiveWorkbook.Colors(28) = 0xFF00FF; 0xFF00FF
$oExcel.ActiveWorkbook.Colors(29) = 0xFFFF00; 0x00FFFF
$oExcel.ActiveWorkbook.Colors(30) = 0x0080FF; 0xFF8000
$oExcel.ActiveWorkbook.Colors(31) = 0x800080; 0x800080
$oExcel.ActiveWorkbook.Colors(32) = 0xC0C0C0; 0xC0C0C0
 
Par contre, sous Excel 2007, rien n'est changé.
 
Après des heures de recherches à essayer de trouver déjà seulement sous Excel 2007 comment il faut faire pour modifier les couleurs, ça m'a épuisé. J'ai finalement trouvé qu'il faut créer un graphique, le sélectionner, aller dans "Mise en forme", puis sélectionner à gauche la série désirée et enfin cliquer sur le bouton "Mise en forme de la sélection". Encore là, on n'est pas au bout de nos peines, il faut choisir "Trait plein" pour l'un et "Remplissage uni" pour l'autre et mettre la même couleur.
 
Bref, tout ça était enregistré en macro et qu'est-ce que je m'aperçois ? La macro n'a aucunement tenu compte de ces modifications !
 
Alors là, je ne sais toujours pas comment modifier les options pour cocher "Trait plein" et "Remplissage uni", ni comment modifier la couleur pour chacun...
 
Donc... Un petit coup de pouce serait bien apprécié parce que tout ce qui est 2007 (Vista, Office) me dégoûte au plus haut point en ce moment, même si sur mon ordinateur j'ai Office 12 (2007), mais au moins j'ai XP...
 
Merci,
 
TheReveller

mood
Publicité
Posté le 19-04-2009 à 19:45:12  profilanswer
 

n°1874969
TheRevelle​r
Posté le 19-04-2009 à 21:13:39  profilanswer
 

Je crois avoir finalement trouvé...
 

Code :
  1. If $oExcel.Version <= 11 Then
  2.  For $i = 0 To $graphnb
  3.   $oExcel.ActiveWorkbook.Colors(25+$i) = $bgr[$i]
  4.  Next
  5. ElseIf $oExcel.Version >= 12 Then
  6.  For $i = 0 To $graphnb
  7.   $oExcel.ActiveChart.SeriesCollection($i+1).MarkerBackgroundColor = $bgr[$i]
  8.   $oExcel.ActiveChart.SeriesCollection($i+1).MarkerForegroundColor = $bgr[$i]
  9.   $oExcel.ActiveChart.SeriesCollection($i+1).Border.Color = $bgr[$i]
  10.  Next
  11. EndIf


 
Mais si jamais vous avez des commentaires sur la façon de faire ou si vous avez une liste de cas d'incompatibilités, ça serait apprécié. À moins que $oExcel.ActiveChart.SeriesCollection($i+1).Border.Color = $bgr[$i] fonctionne sous Excel 2003 et que c'était ce que j'aurais dû utiliser depuis le début...
 
Merci,
 
TheReveller


Message édité par TheReveller le 19-04-2009 à 21:14:15
n°1876284
TheRevelle​r
Posté le 22-04-2009 à 14:32:34  profilanswer
 

Bonjour,
 
Sous Excel 2007, si je définis XValues étant R2C1:R256C1 et Values étant R2C2:R256C2, alors même s'il y a des champs vides (par exemple seulement des données dans R2C1:R7C1 et R2C2:R7C2, il dessinera le graphique pour ces données et lorsqu'on ajoute des données dans les autres champs, il les ajoutera.
 
Même chose sous Excel 2003.
 
Par contre, sous Excel 2007, si tous les champs sont vides, il ne dessinera aucun graphique à moins qu'on ajoute des données dans les champs, mais sous Excel 2003, si l'ensemble défini est complètement vide, ça envoit une erreur.
 
(Ça fonctionne si on définit les ensembles manuellement, mais pas avec une macro)
 
Est-ce possible à contourner ? Merci.
 
Exemple de macro enregistrée qui fonctionne manuellement avec des champs vides, mais pas en macro :
 
    Charts.Add
    ActiveChart.ChartType = xlXYScatterSmooth
    ActiveChart.SetSourceData Source:=Sheets("Sheet1" ).Range("A2" )
    ActiveChart.SeriesCollection.NewSeries
    ActiveChart.SeriesCollection(1).XValues = "=Sheet1!R2C1:R5C1"
    ActiveChart.SeriesCollection(1).Values = "=Sheet1!R2C2:R5C2"
    ActiveChart.Location Where:=xlLocationAsObject, Name:="Sheet1"


Message édité par TheReveller le 22-04-2009 à 15:30:15
n°1876416
TheRevelle​r
Posté le 22-04-2009 à 20:00:18  profilanswer
 

C'est correct, j'ai trouvé une façon simple de contourner ce problème... Puisque je suis l'unique personne qui répond à ce topic.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  VBA Excel 2003 vs Excel 2007

 

Sujets relatifs
Pb de Programmation sur Office 2007VBA sous excel 2003
Problème de gestion de stock sous excel 2007Petit problème macros VBA Excel
Export de données Access vers Excel avec formules excel préservéesExport Access vers Excel
Plus de sujets relatifs à : VBA Excel 2003 vs Excel 2007


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR