Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[2010] Graphiques

23 réponses
Avatar
Péhemme
Bonjour à Tous,

Je modifie mes barres d'outils ex-2003 et antérieures qui fonctionnent
parfaitement bien via l'onglet "complément" en ruban sans modification de
mes macros.
Méthodologie :
. je sauvegarde mon fichier sous un autre nom
. je construis le ruban
. je rattache mes macros aux callbacks
Tout fonctionne parfaitement bien.
Cependant, sur une de mes applications avec graphiques mis à jour
automatiquement toutes les semaines, j'observe que les valeurs indiquées
lors du pointage de la souris sur les différentes courbes sont divisées par
10000 (par exemple : 0.0070 au lieu de 70 ou 0.0052 au lieu de 52, etc.).
Les valeurs :
. des données sources sont correctes
. des axes verticaux sont correctes.
J'ai beau chercher, je ne vois pas ce qui peut provoquer cette
transformation ni même si on peut agir entre les données sources et celles
indiquées (automatiquement) sur le graphique.
Je vous remercie par avance des idées et suggestions afin de solutionner ce
désagrément.
Bien amicalement
Michel

10 réponses

1 2 3
Avatar
Péhemme
Mon bon Jacquouille,

Sur ma version 2003... je n'y ai pas accès..... -(


Œuf corse !
Le ruban n'existe que sur les versions 2007 et postérieure.
J'ai pris soin de préciser que je suis en Excel 2010.
:-))
Amitiés
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lcj7at$frh$

Bonjour Michel

Sur ma version 2003, j'obtiens bien : Sébastien 66,0502.
mais, je ne vois nulle part le fameux ruban dont tu parles.
Donc, je n'y ai pas accès..... -(

Je ne pense pas que cela va t'aider, mais c'est pour le réconfort moral
-)

Jacquouille
Avatar
Péhemme
Tiens Jacquouille voici un fichier spécialement pour que tu puisses tester
de ton côté.
Il est en .xls.
Tu fais comme expliqué précédemment, puis tu cliques sur le bouton.
Le phénomène ne se produisait pas lorsque j'étais en 2003.
Merci d'avance si tu trouves l'explication du changement de format.
http://cjoint.com/?DBbtmDc2mus
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lcj7at$frh$

Bonjour Michel

Sur ma version 2003, j'obtiens bien : Sébastien 66,0502.
mais, je ne vois nulle part le fameux ruban dont tu parles.
Donc, je n'y ai pas accès..... -(

Je ne pense pas que cela va t'aider, mais c'est pour le réconfort moral
-)

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lcj6l6$e2u$

:-))
1°) tu charges le fichier de cjoint
2°) tu ouvres le fichier
3°) si on pose des questions, tu réponds : ok
4°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 58,0711
5°) tu cliques sur le bouton "Mise à Jour" du ruban personnalisé ("Foot-New
Look")
6°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 0.0058

Par ailleurs, le second graphique n'est pas affecté par cette
"transformation".

Bonne chance ;-))
Michel
W7 - Excel 2010



"MichD" a écrit dans le message de groupe de discussion :
lcj491$84o$

C'est quoi le problème alors? J'ai de la difficulté à te suivre!

Explique les manipulations que tu fais qui même à ton problème.
Avatar
Péhemme
Bonjour Denis, bonjour à tous,

Je pense être sur une piste.
En effet, mes différents tests et approches me conduisaient à observer ce
phénomène :
. après modification du graphique certes,
. mais avant enregistrement du fichier.
Je ne l'enregistrais pas afin de pouvoir repartir de la situation d'origine
sûre.
J'observe actuellement qu'une fois le fichier enregistré le bon format
apparait.
Pour être précis, il faut que le fichier soit :
. enregistré
. fermé
et ce n'est qu'à sa réouverture que le format correct apparait.
Si ce que je décris se confirme, je dirai : étrange n'est-il pas ?
Bon dimanche
Michel


"MichD" a écrit dans le message de groupe de discussion :
lcj491$84o$

C'est quoi le problème alors? J'ai de la difficulté à te suivre!

Explique les manipulations que tu fais qui même à ton problème.
Avatar
Jacquouille
Merci Michel

J'ai donc enregistré ton fichier, puis je l'ai ouvert ....;
- Mon PC ne tolère qu'une lecture seule.
- Il me prévient que le fichier a été créé dans une version plus récente que
la mienne et que les contrôles ActiveX non initialisés ne seront pas ouverts
! NA !
- L'extension est .xlsm
- Les données sur le graph sont bien du type : Michel 82,0311
- Le bouton "clique" ne fonctionne pas et, dès que je clique dessus, il se
met en "sélection - Command button1"

Désolé de ne pas pouvoir t'en dire plus.
jacques.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lcjdnq$v9$

Tiens Jacquouille voici un fichier spécialement pour que tu puisses tester
de ton côté.
Il est en .xls.
Tu fais comme expliqué précédemment, puis tu cliques sur le bouton.
Le phénomène ne se produisait pas lorsque j'étais en 2003.
Merci d'avance si tu trouves l'explication du changement de format.
http://cjoint.com/?DBbtmDc2mus
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lcj7at$frh$

Bonjour Michel

Sur ma version 2003, j'obtiens bien : Sébastien 66,0502.
mais, je ne vois nulle part le fameux ruban dont tu parles.
Donc, je n'y ai pas accès..... -(

Je ne pense pas que cela va t'aider, mais c'est pour le réconfort moral
-)

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lcj6l6$e2u$

:-))
1°) tu charges le fichier de cjoint
2°) tu ouvres le fichier
3°) si on pose des questions, tu réponds : ok
4°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 58,0711
5°) tu cliques sur le bouton "Mise à Jour" du ruban personnalisé ("Foot-New
Look")
6°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 0.0058

Par ailleurs, le second graphique n'est pas affecté par cette
"transformation".

Bonne chance ;-))
Michel
W7 - Excel 2010



"MichD" a écrit dans le message de groupe de discussion :
lcj491$84o$

C'est quoi le problème alors? J'ai de la difficulté à te suivre!

Explique les manipulations que tu fais qui même à ton problème.
Avatar
Péhemme
Ce n'est pas grave.
Bon dimanche ensoleillé
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lcl9kn$73u$

Merci Michel

J'ai donc enregistré ton fichier, puis je l'ai ouvert ....;
- Mon PC ne tolère qu'une lecture seule.
- Il me prévient que le fichier a été créé dans une version plus récente que
la mienne et que les contrôles ActiveX non initialisés ne seront pas ouverts
! NA !
- L'extension est .xlsm
- Les données sur le graph sont bien du type : Michel 82,0311
- Le bouton "clique" ne fonctionne pas et, dès que je clique dessus, il se
met en "sélection - Command button1"

Désolé de ne pas pouvoir t'en dire plus.
jacques.

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lcjdnq$v9$

Tiens Jacquouille voici un fichier spécialement pour que tu puisses tester
de ton côté.
Il est en .xls.
Tu fais comme expliqué précédemment, puis tu cliques sur le bouton.
Le phénomène ne se produisait pas lorsque j'étais en 2003.
Merci d'avance si tu trouves l'explication du changement de format.
http://cjoint.com/?DBbtmDc2mus
Michel


"Jacquouille" a écrit dans le message de groupe de discussion :
lcj7at$frh$

Bonjour Michel

Sur ma version 2003, j'obtiens bien : Sébastien 66,0502.
mais, je ne vois nulle part le fameux ruban dont tu parles.
Donc, je n'y ai pas accès..... -(

Je ne pense pas que cela va t'aider, mais c'est pour le réconfort moral
-)

Jacquouille

" Le vin est au repas ce que le parfum est à la femme."
"Péhemme" a écrit dans le message de groupe de discussion :
lcj6l6$e2u$

:-))
1°) tu charges le fichier de cjoint
2°) tu ouvres le fichier
3°) si on pose des questions, tu réponds : ok
4°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 58,0711
5°) tu cliques sur le bouton "Mise à Jour" du ruban personnalisé ("Foot-New
Look")
6°) à l'aide de la souris, tu observes le format des valeurs du graphique.
Elles sont du style : 0.0058

Par ailleurs, le second graphique n'est pas affecté par cette
"transformation".

Bonne chance ;-))
Michel
W7 - Excel 2010



"MichD" a écrit dans le message de groupe de discussion :
lcj491$84o$

C'est quoi le problème alors? J'ai de la difficulté à te suivre!

Explique les manipulations que tu fais qui même à ton problème.
Avatar
MichD
Bonjour,

Désolé pour ce délai...

J'ai modifié légèrement ta procédure, et tout semble OK.
Nul besoin d'enregistrer le fichier ou le fermer pour que le graphique 5
se mette à jour.

'---------------------------------------------------------
Sub MàJ_Graph()
'==================================================================== 'Met à jour la base de données permettant l'élaboration du graphique
'==================================================================== Dim Colonne As Byte
Dim PointsOffic As Range, PlaceOffic As Range
Dim DestGraph1 As Range, DestGraph2 As Range

Set PointsOffic = Sh2.Range("C10:C17")
Set PlaceOffic = Sh2.Range("A10:A17")

'+1 pour raisonner en n° de colonne (journée 1 en colonne 2)
Colonne = Journée + 1

Application.ScreenUpdating = False

If Colonne < 2 Then Colonne = 2

Set DestGraph1 = Sheets("DataGraph").Cells(3, Colonne)

PointsOffic.Copy DestGraph1 'Totaux des points de chacun
'On Error Resume Next
'DestGraph1.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

Set DestGraph2 = Sheets("DataGraph_2").Cells(3, Colonne)
'=> à faire évoluer : ligne de départ extensible

PlaceOffic.Copy DestGraph2
'DestGraph2.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

'>>>>>>>>>>>>> Mets en forme le résultat de la copie des
'points de chacun <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Dim Dép As String
Dim Fin As String
With Sheets("DataGraph")
Dép = .Cells(3, Colonne).Address
Fin = .Cells(3, Colonne).End(xlDown).Address
.Range(Dép, Fin).NumberFormat = "0.0000"
End With

With Sheets("DataGraph_2")
'dans cette plage, tu as une formule : =RANG(D3;$C$10:$C$17;1)
'et elle indique des #NA! (erreur)
.Range(Dép, Fin).NumberFormat = "0"
End With

'****************Ajout important********************
With Feuil01
With .ChartObjects("Graphique 5").Chart
.SetSourceData Source:=Sheets("DataGraph").Range("A2:AM10")
End With
End With
'**************************************************
'>>>>>>>>>>>>> Vide les mémoires <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Application.CutCopyMode = False
Application.ScreenUpdating = True

Set PointsOffic = Nothing
Set PlaceOffic = Nothing
Set DestGraph1 = Nothing
Set DestGraph2 = Nothing

End Sub
'---------------------------------------------------------
Avatar
Péhemme
Désolé pour ce délai...


Tu rigoles ?.. nous sommes dimanche... :-)
Des voisins et néanmoins amis venus partager les crêpes ne partent qu'à
l'instant, donc, avec ta permission, je ne testerai ta proposition que
demain.
En attendant : mille mercis.
Michel


"MichD" a écrit dans le message de groupe de discussion :
lclkl7$vv$

Bonjour,

Désolé pour ce délai...

J'ai modifié légèrement ta procédure, et tout semble OK.
Nul besoin d'enregistrer le fichier ou le fermer pour que le graphique 5
se mette à jour.

'---------------------------------------------------------
Sub MàJ_Graph()
'==================================================================== 'Met à jour la base de données permettant l'élaboration du graphique
'==================================================================== Dim Colonne As Byte
Dim PointsOffic As Range, PlaceOffic As Range
Dim DestGraph1 As Range, DestGraph2 As Range

Set PointsOffic = Sh2.Range("C10:C17")
Set PlaceOffic = Sh2.Range("A10:A17")

'+1 pour raisonner en n° de colonne (journée 1 en colonne 2)
Colonne = Journée + 1

Application.ScreenUpdating = False

If Colonne < 2 Then Colonne = 2

Set DestGraph1 = Sheets("DataGraph").Cells(3, Colonne)

PointsOffic.Copy DestGraph1 'Totaux des points de chacun
'On Error Resume Next
'DestGraph1.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

Set DestGraph2 = Sheets("DataGraph_2").Cells(3, Colonne)
'=> à faire évoluer : ligne de départ extensible

PlaceOffic.Copy DestGraph2
'DestGraph2.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

'>>>>>>>>>>>>> Mets en forme le résultat de la copie des
'points de chacun <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Dim Dép As String
Dim Fin As String
With Sheets("DataGraph")
Dép = .Cells(3, Colonne).Address
Fin = .Cells(3, Colonne).End(xlDown).Address
.Range(Dép, Fin).NumberFormat = "0.0000"
End With

With Sheets("DataGraph_2")
'dans cette plage, tu as une formule : =RANG(D3;$C$10:$C$17;1)
'et elle indique des #NA! (erreur)
.Range(Dép, Fin).NumberFormat = "0"
End With

'****************Ajout important********************
With Feuil01
With .ChartObjects("Graphique 5").Chart
.SetSourceData Source:=Sheets("DataGraph").Range("A2:AM10")
End With
End With
'**************************************************
'>>>>>>>>>>>>> Vide les mémoires <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Application.CutCopyMode = False
Application.ScreenUpdating = True

Set PointsOffic = Nothing
Set PlaceOffic = Nothing
Set DestGraph1 = Nothing
Set DestGraph2 = Nothing

End Sub
'---------------------------------------------------------
Avatar
MichD
La procédure de mise à jour pourrait se résumer comme ceci :

'------------------------------------------------------------------------
Sub MàJ_Graph()
'==================================================================== 'Met à jour la base de données permettant l'élaboration du graphique
'==================================================================== Dim Colonne As Byte
Dim Dép As String, Fin As String

'+1 pour raisonner en n° de colonne (journée 1 en colonne 2)
Colonne = Journée + 1

If Colonne < 2 Then Colonne = 2
Application.ScreenUpdating = False
Application.EnableEvents = False

'Totaux des points de chacun
Sh2.Range("C10:C17").Copy Sheets("DataGraph").Cells(3, Colonne)
'=> à faire évoluer : ligne de départ extensible
Sh2.Range("A10:A17").Copy Sheets("DataGraph_2").Cells(3, Colonne)

'Mets en forme le résultat de la copie des points de chacun
With Sheets("DataGraph")
Dép = .Cells(3, Colonne).Address
Fin = .Cells(3, Colonne).End(xlDown).Address
.Range(Dép, Fin).NumberFormat = "0.0000"
End With
With Sheets("DataGraph_2")
'dans cette plage, tu as une formule : =RANG(D3;$C$10:$C$17;1)
'et elle indique des #NA! (erreur)
.Range(Dép, Fin).NumberFormat = "0"
End With

With Sheets("Accueil")
With .ChartObjects("Graphique 5").Chart
.SetSourceData Source:=Sheets("DataGraph").Range("A2:AM10")
End With
End With

Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'------------------------------------------------------------------------
Avatar
Péhemme
Bonjour Denis,

Tout d'abord (une fois de plus de ma part) : mille mercis.

Ta proposition du .SetSourceData solutionne effectivement le problème
évoqué.
Étant un garçon obéissant, je l'ai adopté.
Néanmoins, les commentaires de l'aide consultée sur ce sujet étant
lapidaires je m'interroge :
1°) tout fonctionnait parfaitement, même depuis mon passage de Excel 2003 à
2010. La seule "nouveauté récente" est la suppression de la barre d'outils
ex-2003 et son remplacement par un ruban. Les macros n'ont pas été modifiées
d'un iota et sont simplement appelées par les callbacks qui n'interfèrent en
rien dans le déroulement des macros. (?)
2°) les graphiques sont pré-déterminés à la création du fichier ; ils ne
sont pas constitués par VBA. Seuls les tableaux-sources sont alimentés au
fur et à mesure. Donc, pourquoi reprendre le .SetSourceData qui, dans mon
esprit, est pré-déterminé lors de la définition d'origine du graphique (?)
3°) un seul des 2 graphiques est concerné par cette "actualisation" de la
source (?)

En revanche, je n'ai pas retenu ta suggestion :
Sh2.Range("C10:C17").Copy Sheets("DataGraph").Cells(3, Colonne)
Devant recopier les valeurs et non pas les formules, je suis obligé, du
moins me semble-t-il, de passer par le coller spécial / valeur.

J'ai bien noté également le :
Application.EnableEvents = False
et t'en remercie.

Encore merci Denis de ton aide permanente.
Michel



"MichD" a écrit dans le message de groupe de discussion :
lcmeua$4tk$


La procédure de mise à jour pourrait se résumer comme ceci :

'------------------------------------------------------------------------
Sub MàJ_Graph()
'==================================================================== 'Met à jour la base de données permettant l'élaboration du graphique
'==================================================================== Dim Colonne As Byte
Dim Dép As String, Fin As String

'+1 pour raisonner en n° de colonne (journée 1 en colonne 2)
Colonne = Journée + 1

If Colonne < 2 Then Colonne = 2
Application.ScreenUpdating = False
Application.EnableEvents = False

'Totaux des points de chacun
Sh2.Range("C10:C17").Copy Sheets("DataGraph").Cells(3, Colonne)
'=> à faire évoluer : ligne de départ extensible
Sh2.Range("A10:A17").Copy Sheets("DataGraph_2").Cells(3, Colonne)

'Mets en forme le résultat de la copie des points de chacun
With Sheets("DataGraph")
Dép = .Cells(3, Colonne).Address
Fin = .Cells(3, Colonne).End(xlDown).Address
.Range(Dép, Fin).NumberFormat = "0.0000"
End With
With Sheets("DataGraph_2")
'dans cette plage, tu as une formule : =RANG(D3;$C$10:$C$17;1)
'et elle indique des #NA! (erreur)
.Range(Dép, Fin).NumberFormat = "0"
End With

With Sheets("Accueil")
With .ChartObjects("Graphique 5").Chart
.SetSourceData Source:=Sheets("DataGraph").Range("A2:AM10")
End With
End With

Application.CutCopyMode = False
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
'------------------------------------------------------------------------
Avatar
MichD
Pour le copier-coller, je n'avais pas vu les "formules".

Si tu préfères, je te propose une autre alternative ajoute la
"Section ajoutée" dans la procédure entre les 2 copier-coller.

Une boucle d'une durée d'un dix millième de seconde. Ça ne
devrait pas trop ralentir ta procédure!

Pourquoi : Tu adresses cela aux ingénieurs de Microsoft. Moi, je
ne peux faire des supputations...Aussi bien les garder pour moi!

'---------------------------------------------------------------------------

Set DestGraph1 = Sheets("DataGraph").Cells(3, Colonne)
PointsOffic.Copy
DestGraph1.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

'************* Section ajoutée ***************
Dim T As Double
T = Timer + 0.0001
Do While Timer <= T
DoEvents
Loop
'*******************************************

Set DestGraph2 = Sheets("DataGraph_2").Cells(3, Colonne)
PlaceOffic.Copy
DestGraph2.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, _
Transpose:úlse

'---------------------------------------------------------------------------
1 2 3