Appels de sub bizarres

  • Initiateur de la discussion Initiateur de la discussion mécano41
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

mécano41

XLDnaute Accro
Bonjour à tous,

Dans une feuille, j'ai un tableau, un graphe et des boutons.

Pour imprimer juste le graphe j'ai le petit sub suivant (je le mets à tout hasard car je pense qu'il n'y est pour rien) :

Code:
Sub ImprimeGraphe()
Dim NombCopies As Integer
' -----
With Workbooks(Range("MemNomClasseur").Value)
    Application.ScreenUpdating = False
    Call NombreDeCopies(NombCopies)
    ActiveSheet.ChartObjects(1).Activate
    ActiveChart.ChartArea.Select
    ActiveChart.ShowWindow = True
    ActiveWindow.SelectedSheets.PrintOut Copies:=NombCopies, Collate:=True
    ActiveWindow.Visible = False
    RMtravail.Activate
    Range("A1").Select
    Application.ScreenUpdating = True
End With
End Sub

Si je l'appelle directement, dedans par F5 ou par le sub suivant placé dans le même module ou dans un autre, et dans lequel je fais F5 :

Code:
Sub essai4()
Call ImprimeGraphe
End Sub

l'impression donnée est bien celle du graphe seul comme je le souhaite.

Si je l'appelle par un bouton de la feuille au moyen de :

Code:
Private Sub BoutonImprGraph_Click()
Call ImprimeGraphe
End Sub

cela imprime toute la feuille, tableau, graphe et boutons.

Quelqu'un a-t-il une idée?

Merci d'avance

Cordialement


[EDIT] j'ai essayé avec ou sans ActiveChart.ShowWindow = True cela ne change rien
 
Re : Appels de sub bizarres

bonjour

oui mais ici (dans la partie rouge)
--------------------------------
' ----- Création du graphe
Charts.Add
--------------------------------
il faut le point devant Charts.Add
ensuite il manque le nom du graph !?
.Charts.Add <<<<<<<< Add qui ou quoi !?

Roland
 
Re : Appels de sub bizarres

Bonjour,

Merci pour cette réponse ; mais comme je l'ai dit, le point devant Charts.Add fait une erreur. Le nom derrière est facultatif (mais j'ai tout de même essayé avec, suite à ton message!), d'ailleurs dans l'ancien code (voir ci-dessous) cela fonctionnait (enfin pour ce qui concerne l'affichage correct des graphes car j'avais une erreur si je masquais la feuille "RMmemoire"...). C'est d'ailleurs écrit de la même manière si l'on utilise l'enregistreur de macros.

Code:
.....
Windows(Nom).Activate
Worksheets(RMpatlak.Name).Select
Application.ScreenUpdating = False
If Effacer = True Then ActiveSheet.ChartObjects.Delete                                             
Charts.Add
With ActiveChart
    .ChartType = xlXYScatter
    .SetSourceData Source:=PlageGraphe, PlotBy:=xlColumns
    .HasLegend = False
    .HasTitle = True
    .Location Where:=xlLocationAsObject, Name:=RMpatlak.Name                            
End With
With ActiveSheet.ChartObjects(Graphe)
        .Left = 20
        .Top = 60 + Dec
...

Cordialement
 
Re : Appels de sub bizarres

Bonjour,

Pour vérifier, j'ai ajouté deux lignes avant Charts.Add dans le code donné au message 16

Code:
    If Effacer = True Then .ChartObjects.Delete                                       ' On efface seulement si premier graphe
    ' ----- Création du graphe
        .Range("A1").Value = WkBook.Name
        .Range("A2").Value = Worksheets(RMpatlak.Name).Name
        Charts.Add
    With ActiveChart
        .ChartType = xlXYScatter


Cela écrit bien le nom du classeur et de la feuille dans la bonne feuille du bon classeur mais le graphe ne se crée pas dans le bon classeur

Si j'ajoute quoi que ce soit devant Charts.Add, il y a une erreur

Cordialement
 
Re : Appels de sub bizarres

Bonjour le fil, mécano41, Roland_M, le Forum,

Bien, je n'avais pas répondu intentionnellement à ton dernier problème, d'une part, car je n'avais pas beaucoup de temps à te consacrer et d'autre part, car je voulais voir si tu allais te débrouiller et trouver la solution par toi-même... J'espère que tu ne m'en veux pas, mais c'est quand même la meilleure façon d'apprendre. En tout cas, je suis sûr que ça t'a fait faire suffisamment de tests pour comprendre le mécanisme (sans jeu de mot) du codage VBA sans sélection ou activate...en tout cas, tu as l'air sur la bonne voie. 😉

Je reprends donc une partie de ce que tu avais écrit :
Code:
[COLOR=NAVY]With[/COLOR] WkBook.Worksheets(RMpatlak.Name)
    [COLOR=GREEN]'...[/COLOR]
    Charts.Add
    [COLOR=GREEN]'...[/COLOR]
    [COLOR=NAVY]With[/COLOR] ActiveChart
        [COLOR=GREEN]'...[/COLOR]
        [COLOR=GREEN]'...[/COLOR]
    [COLOR=NAVY]End With[/COLOR]
    [COLOR=GREEN]'...[/COLOR]
    [COLOR=NAVY]With[/COLOR] ActiveSheet.ChartObjects(Graphe)
        [COLOR=GREEN]'...[/COLOR]
        [COLOR=GREEN]'...[/COLOR]
Là, il y a déjà quelque chose qui me choque moi, c'est le "ActiveSheet" qu'on retrouve dans le dernier With...End With. Si on ne parle plus de Sélection ou d'Activation, on ne devrait pas voir cet élément dans le code (où dans de rares autres cas seulement)...

Cela dit, tu vas me dire que ça n'a rien à voir avec le fond de ton dernier problème... et tu auras surement raison. Ton problème c'est tout simplement que tu n'utilises pas la bonne collection pour ton Add. Si tu reprends l'aide VBA, en terme de hiérarchie des objets, tu t'apercevras que la collection Charts n'est pas enfant de l'objet Worksheet, mais enfant de l'objet Workbook lui-même!
Tu n'as donc pas le droit d'écrire :
Code:
[COLOR=NAVY]With[/COLOR] WkBook.Worksheets(RMpatlak.Name)
    .Charts.Add
... car il n'y a pas de lien de parenté direct entre la feuille et la collection Charts.

Et comme tu veux obtenir un graphique incorporé à la feuille, il te faut passer par la collection ChartObjects. L'objet ChartObject sera lui-même le conteneur (objet Parent) de l'objet Chart et fera donc l'intermédiaire entre les deux (la feuille et le graphique).

Tu devrais donc pourvoir faire comme ça :
Code:
[COLOR=NAVY]With[/COLOR] WkBook.Worksheets(RMpatlak.Name)
    [COLOR=GREEN]' ----- Effacement des graphes et des étiquettes précédentes sur la feuille RMpatlak[/COLOR]
    [COLOR=NAVY]If[/COLOR] Effacer = [COLOR=NAVY]True Then[/COLOR] .ChartObjects.Delete                                       [COLOR=GREEN]' On efface seulement si premier graphe[/COLOR]
    [COLOR=GREEN]' ----- Création du graphe[/COLOR]
    [COLOR=NAVY]With[/COLOR] .ChartObjects.Add(Left:=20, Top:=60 + Dec, Width:=390, Height:=100)
        .Chart.ChartWizard Gallery:=xlXYScatter, Source:=PlageGraphe, PlotBy:=xlColumns, _
                HasLegend:=[COLOR=NAVY]False[/COLOR], Title:="TON TITRE"
    [COLOR=NAVY]End With
End With[/COLOR]
J'ai utilisé ici la méthode ChartWizard pour formater le graphique dans la foulée, sans définir individuellement toutes ses propriétés (voir l'aide VBA).

Roland_M, tu sais, c'est bien aussi de tester les choses avant de les proposer dans le forum... 😱

Pour ma part, je pense que j'arrête là mes interventions dans le présent sujet et je te souhaite bonne continuation mécano41...

Cordialement,
 
Dernière édition:
Re : Appels de sub bizarres

bonsoir

salut à toi myDearFriend,
tu sais, je n'ai fais qu'essayer d'aider, comme beaucoup le font, il est vrai sans certitude !

maintenant comme tu le dis toi même:
"je n'avais pas répondu intentionnellement à ton dernier problème, d'une part, car je n'avais pas beaucoup de temps à te consacrer et d'autre part, car je voulais voir si tu allais te débrouiller et trouver la solution par toi-même..."

Dans ce cas, il faut pas en vouloir aux autres d'essayer d'aider comme ils le peuvent !
il est un peu facile de laisser les réponses s'accumuler et d'arriver en jouant les "Zorro" coucou me voilà, j'ai la bonne réponse et c'est moi le meilleur !

il est vrai que tu est très connaissant mais un peut pédant !

j'ai remarquer qu'il y avait sur ce forum quelques présomptueux et quelque peut succeptibles mais qui ne se génaient pas pour envoyer des bourdes et faires des remarques désagréables !

Mais tu sais, j'ai 62 ans passé, j'en ai déjà vu et entendu d'autres !

Sans rancune. Roland
 
Dernière édition:
Re : Appels de sub bizarres

Bonsoir Roland_M,

Arf, eh bien, en lisant ta réponse, j'ai un doute quant à savoir lequel de nous deux est le plus susceptible...

Perso, si je regarde l'ensemble de ce fil et la teneur des messages, je n'ai pas vraiment l'impression d'avoir laissé les réponses "s'accumuler" (comme tu le dis), pour arriver au final en jouant les "zorro"... mais tu as 62 ans et tu connais tout de la vie, alors tu as forcément raison.

Très cordialement,
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
10
Affichages
663
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
0
Affichages
663
Retour