VBA acess probleme de renvoir

Résolu
Signaler
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour
j'ai un probleme de renvoie
Pour le moment ma fonction renvoie le classeur mais j'aimerais aussi renvoyer l'objet Excel.Application (car si je l'ouvre deux fois ca va pas le faire) donc je vois pas comment envoyer les deux en meme temps pour l'instant ma fonction est constitué kom cela
Merci d'avance


Public Function MacroTest(c As Integer) As Workbook


'Déclarations des variables
Set xls = New Excel.Application
Dim name As String
Dim Classeur As Workbook
'Ouverture du tableau Excel
    xls.Visible = True
    Set Classeur = xls.Workbooks.Open("D:\Test\e_analyse_croisée_Test.xls")
 ...
Set MacroTest = Classeur

27 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Comme l'a dit [auteurdetail.aspx?ID=647037 mortalino], parfois il faut décomposer
Alors essaie peu être
xls.Workbooks("e_analyse_croisée_Test.xls").Activate
xls.ActiveWorkbook.Worksheets("R_analyse_croisée").Select
xls.ActiveSheet.Range("A1").Select, ----
[code.aspx?ID=41455 By Renfield]

Si la encore cela ne fonctionne pas... Bah je ne sais pas. es tu sûr de tout les noms utilisés?
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
(soit dit en passant=> ICI)

Pour ce nouveau problème, tu as plein de possibilités.

- Soit tu passes un parametre de type Excel.Application a ta procédure (et tu l'affecte à l'intérieur de cette dernière).
- Soit tu ne retournes QUE l'objet XLS (sachant que de toute facon l'objet Classeur sera accessible dans la collection WorkBooks de l'objet XLS)
- Soit tu déclares l'objet XLS dans un module en ttn que variable PUBLIC ce qui te permettra de l'avoir n'importe où.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

sinon quelqu'un peut m'expliquer les byref
Losque je marque ca pkoi il attend un "=" dans ma fonction principale??
Public Sub Macro1(ByRef wbfile As Excel.Workbook, ByRef xls As Excel.Application)
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
C'est la Ligne d'appel qu'il faut montrer
DE plus le ByRef est inutile puisque par défaut un paramtre est passé par ref en VBA (si toutefois tu es bien en VBA)

la demande de "=" essaie de faire Call Macro1(P1, P2)

(soit dit en passant=> [infomsg_PROBLEME-METHODE-OBJET_965739.aspx#3 ICI)] (*2)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

la ligne d'appel c'est tou simplement

module2.Macro1(wbfile,appli)

et quand je tape entrée pour aller a la ligne suivante il me dis qu'il faut un "="
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

et voila mon code entier

Option Compare Database


Option Explicit


Public Sub Macro1(wbfile As Workbook, xls As Excel.Application)


'
' Macro1 Macro
' Macro enregistrée le 14/06/2007 par
'


'
    Dim graph As Chart
    Set graph = wbfile.Charts.Add
   
 
    graph.SeriesCollection(1).ChartType = xlColumnStacked
    graph.SeriesCollection.NewSeries
    graph.SeriesCollection(1).XValues = "=R_analyse_croisée!R3C2:R4C10"
    graph.SeriesCollection(1).name = "=R_analyse_croisée!R53C1"
    graph.SeriesCollection(2).XValues = "=R_analyse_croisée!R3C2:R4C10"
    graph.SeriesCollection(2).name = "=R_analyse_croisée!R54C1"
    graph.SeriesCollection(3).XValues = "=R_analyse_croisée!R3C2:R4C10"
    graph.SeriesCollection(3).Values = "=R_analyse_croisée!R48C2:R48C10"
    graph.SeriesCollection(3).Select
    graph.SeriesCollection(3).ChartType = xlXYScatter
    With graph.SeriesCollection(3).Border
        .Weight = xlHairline
        .LineStyle = xlNone
    End With
    With graph.SeriesCollection(3)
        .MarkerBackgroundColorIndex = xlAutomatic
        .MarkerForegroundColorIndex = xlAutomatic
        .MarkerStyle = xlNone
        .Smooth = False
        .MarkerSize = 5
        .Shadow = False
    End With
    graph.SeriesCollection(3).ApplyDataLabels AutoText:=True, LegendKey:=False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
    graph.SeriesCollection(3).DataLabels.Select
    graph.SeriesCollection(3).Points(1).DataLabel.Left = 50
    graph.SeriesCollection(3).Points(1).DataLabel.Top = 158
    graph.SeriesCollection(3).Points(2).DataLabel.Left = 114
    graph.SeriesCollection(3).Points(2).DataLabel.Top = 76
    graph.SeriesCollection(3).Points(3).DataLabel.Left = 178
    graph.SeriesCollection(3).Points(3).DataLabel.Top = 64
    graph.SeriesCollection(3).Points(4).DataLabel.Left = 243
    graph.SeriesCollection(3).Points(4).DataLabel.Top = 23
    graph.SeriesCollection(3).Points(5).DataLabel.Left = 306
    graph.SeriesCollection(3).Points(5).DataLabel.Top = 45
    graph.SeriesCollection(3).Points(6).DataLabel.Left = 371
    graph.SeriesCollection(3).Points(6).DataLabel.Top = 148
    graph.SeriesCollection(3).Points(7).DataLabel.Left = 436
    graph.SeriesCollection(3).Points(7).DataLabel.Top = 123
    graph.SeriesCollection(3).Points(8).DataLabel.Left = 504
    graph.SeriesCollection(3).Points(8).DataLabel.Top = 328
    graph.SeriesCollection(3).Points(9).DataLabel.Left = 569
    graph.SeriesCollection(3).Points(9).DataLabel.Top = 312
    With graph.SeriesCollection(2).Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
    End With
    graph.SeriesCollection(2).Shadow = False
    graph.SeriesCollection(2).InvertIfNegative = False
    With graph.SeriesCollection(2).Interior
        .ColorIndex = 37
        .Pattern = xlSolid
    End With
    graph.SeriesCollection(2).ApplyDataLabels AutoText:=True, LegendKey:=False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
    With graph.SeriesCollection(1).Border
        .Weight = xlThin
        .LineStyle = xlAutomatic
    End With
    graph.SeriesCollection(1).Shadow = False
    graph.SeriesCollection(1).InvertIfNegative = False
    With graph.SeriesCollection(1).Interior
        .ColorIndex = 10
        .Pattern = xlSolid
    End With
    graph.SeriesCollection(1).ApplyDataLabels AutoText:=True, LegendKey:=False, ShowSeriesName:=False, ShowCategoryName:=False, ShowValue:=True, ShowPercentage:=False, ShowBubbleSize:=False
    With graph.PlotArea.Border
        .ColorIndex = 16
        .Weight = xlThin
        .LineStyle = xlContinuous
    End With
    With graph.PlotArea.Interior
        .ColorIndex = 2
        .PatternColorIndex = 1
        .Pattern = xlSolid
    End With
    With graph.SeriesCollection(3).DataLabels.Border
        .Weight = xlHairline
        .LineStyle = xlNone
    End With
    graph.SeriesCollection(3).DataLabels.Shadow = False
    graph.SeriesCollection(3).DataLabels.Interior.ColorIndex = xlNone
    graph.SeriesCollection(3).Points(2).DataLabel.Select
    graph.SeriesCollection(3).Points(1).DataLabel.Select
    graph.SeriesCollection(3).DataLabels.AutoScaleFont = True
    With graph.SeriesCollection(3).DataLabels.Font
        .name = "Arial"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 3
        .Background = xlAutomatic
    End With
    graph.SeriesCollection(2).DataLabels.AutoScaleFont = True
    With graph.SeriesCollection(2).DataLabels.Font
        .name = "Arial"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    graph.SeriesCollection(1).DataLabels.AutoScaleFont = True
    With graph.SeriesCollection(1).DataLabels.Font
        .name = "Arial"
        .FontStyle = "Gras"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
        .Background = xlAutomatic
    End With
    graph.Legend.LegendEntries(3).Delete
    graph.Legend.Left = 35
    graph.Legend.Top = 25
    graph.Legend.Width = 99
    graph.Legend.Width = 107
   
End Sub


 
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,

(soit dit en passant=> [infomsg_PROBLEME-METHODE-OBJET_965739.aspx#3 ICI)] (*3)

Code total inutile:

C'est bien ce que je te dis

essaie Call Macro1(P1, P2)

il te suffisais de l'adapter en

Call module2.Macro1(wbfile,appli)
OU bien alors ceci module2.Macro1 wbfile,appli

Ceci ne sont pas des erreurs de programme mais des erreurs de syntaxe...
@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

Merci ca marche bien
mais j'ai un souci dans ma macro1 le code d'endessous ne veut pas s'exécuter

xls.wbfile.Worksheet("R_analyse_croisée").Range("A1").Select
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
(soit dit en passant=> [infomsg_PROBLEME-METHODE-OBJET_965739.aspx#3 ICI)](*4)

1°)
Note: IL faut que tu prennes en considération les réponses que l'on te donnes
Dans l'autre discution je te disais "Tout simplement parceque Classeur n'est pas un objet appartenant à l'objet xls."
Et toi tu ne trouves rien de mieux que de remettre xls.wbfile ... ca rime à quoi... De plus il faut que tu comprennes qu'une fois instantier wbfile est un objet classeur donc inutile de mettre xls.

2°) Worksheet n'existe pas mais en revanche WorksheetS
Oui
Mias ca tu peux le voir avec la liste déroulante qui apparait lorsque tu tapes wbfile. (et non xls.wbfile.)

Encore une fois c'est de la syntaxe (et aussi de la logique, et ca tu ne pourras pas y couper, tu dois l'apprendre.)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

personne peut m'aider??
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Non mais tu te fou de moi la????

Tu vois pas mes messages, tu ne sais pas lire, Tu n'es pas capable d'essayer.... Qu'est ce qui t'arrives???? tu peux au moind prendre la peine de me dire si ce que je te dis te fais avancer ....

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

j'ai fais
wbfile.Worksheet("R_analyse_croisée" ).Range("A1" ).Select
mais cela ne fonctionne pas il me met propriété ou méthode non géré
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

excuse moi j'avais pas vu ton post avantde faire la relance pour tant j'avais fais la mise a jour de la page désolé
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
Quel post tu n'avais pas vu celui qui disait
Worksheet n'existe pas mais en revanche WorksheetS
Oui
Mais ca tu peux le voir avec la liste déroulante qui apparait lorsque tu tapes wbfile. (et non xls.wbfile.)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Arg, que du bonheur à lire...
C'est marrant, j'ai vu que Julien répétait Plusieurs fois ses réponses (sur Call, ou bien le S de Sheets). Bref, DarkSpoilt, vérifie dans tes syntaxes le S dans WorkSheets

Pis faut penser à mettre des MsgBox pour vérifier ton travail.

exemple, avant de faire
wbfile.WorksheetS("R_analyse_croisée" ).Range("A1" ).Select

Tu mets
Msgbox wbfile.Name
Msgbox wbfile.Worksheets("R_analyse_croisée").Range("A1").Value

Et vois déjà si t'as bien des retours de valeurs.
Pis le coup de
wbfile.WorksheetS("R_analyse_croisée" ).Range("A1" ).Select
Faut peut-être le décomposer, des fois (ne me demande pas pourquoi, j'en sais rien) ca ne prends pas :
wbfile.WorksheetS("R_analyse_croisée" ).Select
wbfile.Range("A1" ).Select

Mais autant référencer la feuille :
Dim MaFeuille As Sheet

Set MaFeuille = wbfile.Worksheet S ("R_analyse_croisée" )

MaFeuille.Range("A1").Select

@++

<hr size ="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

Quand je dis c'est bizare c'est regarde


ca fonctionne


    [cpp]Set appli = New Excel.Application
    Set wbfile = MacroTest(c, appli)
    appli.Range("A1").Select 
    Module2.Macro1 wbfile


ca fonctionne pas


 Set appli = New Excel.Application
    Set wbfile = MacroTest(c, appli) 
    Module2.Macro1 wbfile
    appli.Range("A1").Select


et vous avez vu mon code macro 1
je ne comprends pas pkoi si quelqu'un a un explication a me donner je suis tout ouie.
Merci d'avance
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Si j'ai bien suivi :
Public Sub Macro1(ByRef wbfile As Excel.Workbook, ByRef xls As Excel.Application)

Donc quand tu dis :
ca fonctionne

    [cpp]Set appli = New Excel.Application
    Set wbfile = MacroTest(c, appli)
    appli.Range("A1").Select 
    Module2.Macro1 wbfile

Impossible..., tu n'as passé qu'un paramètre à Macro1, VB te détecte automatiquement une erreur. Ou alors, tu as changé ta procédure mais tu ne nous a pas averti.

Bref, très très lourd à suivre ton problème, avec tes bouts de code à droite à gauche

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
De toute facon lorsuqe l'on veux piloter Excel, le mieux (a mon avis) reste tout de meme l'option des variables Public dans un Module plutot que de les passer en paramtre, les retourners, etc... du coup tout le monde s'y perd.

Un Objet XlsApp de typ Excel.Application, Un ou plusieur Objets de Type Workbook (quoique la encore pas nécessaire puisque accessible de puis l'objet XlsApp)

Ce qu'il faut avant d'aller plus loin[auteurdetail.aspx?ID=423548 darkspoilt] , c'est vraiment que tu te penches sur la syntaxe.

Enfin ce n'est que mon avis.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Re,
PS OUBLIE: Merci [auteurdetail.aspx?ID=647037 mortalino] ()

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
254
Date d'inscription
jeudi 13 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2013

non j'avais oublié un bout

Module2.Macro1 wbfile, appli

mias ca ne fonctionne pa de toute maniere et jen e comprends pas pourquoi car dans ma macro1 je ne touche pas a appli