Probleme macro excell

Probleme macro excell - VB/VBA/VBS - Programmation

Marsh Posté le 15-07-2013 à 17:57:48    

Bonjour a tous,
 
Je suis un train de faire un petit outil access/excel avec des macros, mais je bloque sur une erreur depuis un bon bout de temps ! En gros a ce niveau je suis en train de formater un fichier excel depuis access
 
C'est la fameuse erreur :  Error 1004. Method 'Range of object'_Global failed
 
J'ai fait pas mal de recherches sur le web a propos de cette erreur, mais elle a l'air assez vague parce qu'a chaque fois la solution était pas adaptée a mon problème. :(
Voici mon bout de code, et en rouge c'est la ligne qui provoque l'erreur:
 
 

Citation :


Public Sub ModifyExportedExcelFileFormats3(sFile As String)
On Error GoTo Err_ModifyExportedExcelFileFormats3
Dim MyPath As String
Dim MyFilename As String
MyPath = fGetSpecialFolderLocation(CSIDL_DESKTOPDIRECTORY) & "\"
 
MyFilename = List119.value & "Sales.xls"
 
sFile = MyPath & MyFilename
 
sFile = Replace(sFile, Chr(42), "" )
sFile = Replace(sFile, Chr(47), "" )
 
    Application.SetOption "Show Status Bar", True
 
    vStatusBar = SysCmd(acSysCmdSetStatus, "Formatting export file... please wait." )
 
    Dim xlApp As Object
    Dim xlSheet As Object
 
    Set xlApp = CreateObject("Excel.Application" )
    Set xlSheet = xlApp.Workbooks.Open(sFile).Sheets(1)
 
     
    With xlApp
             
     'sum of 12 past months
 
    .Application.Range("BQ2" ).Select
    .Application.ActiveCell.FormulaR1C1 = "=SUM(RC[-66]:RC[-55])"
    .Application.Range("BR2" ).Select
    .Application.ActiveCell.FormulaR1C1 = "=SUM(RC[-66]:RC[-55])"
 
    .Application.Range("BQ2:BR2" ).Select
 
  .Application.Selection.AutoFill Destination:=Range("BQ2:DB2" ), Type:=xlFillDefault

 
...


 
 
 
Important : L'erreur apparait uniquement la 2eme fois que je lance la macro. Si je ferme access et que je le reouvre, l'erreur n'apparait plus.
Est-ce que vous avez une idee ?? Merci beaucoup par avance pour votre aide ! :)

Reply

Marsh Posté le 15-07-2013 à 17:57:48   

Reply

Marsh Posté le 15-07-2013 à 18:34:35    

 
           Bonjour,
 
           pas sûr sur ce coup là mais si Range n'existe pas dans Access, il faudrait peut-être le qualifier sur Excel, non ?
 
           .Application.Selection.AutoFill Destination:= .Application.Range("BQ2:DB2" ), Type:=xlFillDefault
 
           Je me demande même si seul le point suffirait ou encore utiliser xlSheet à la place de xlApp dans la ligne With


Message édité par Marc L le 15-07-2013 à 18:37:01
Reply

Marsh Posté le 15-07-2013 à 21:52:39    

Merci pour ta réponse !
 
Effectivement le point seul a fonctionné ! Ce que je me demande c'est pourquoi ma mauvaise écriture marchait quand meme la premiere fois que j'éxécutais la macro...
 
J'ai pas mal de choses a modifier dans mon code de cette maniere, et apres je vais vois si ca marche vraiment :)

Reply

Marsh Posté le 16-07-2013 à 00:38:59    

Bon ben tout marche nickel, merci ;)

Reply

Marsh Posté le 16-07-2013 à 01:37:08    

 
           Parfois VBA arrive à combler les références manquantes, mais pas toujours …
 
           Sinon la question essentielle à se poser est à quoi se rattache un objet et respecter la hiérarchie de l'application.
 
           Hiérarchie d'Excel :
 
           -   Application
           -   Workbooks
           -   Worksheets, Sheets
           -   Cells, Columns, Range, Rows
           -   méthodes, propriétés
 
 
           En la suivant, le code peut être simplifié :

Code :
  1.     With xlSheet
  2.            
  3.      'sum of 12 past months
  4.     .Range("BQ2" ).FormulaR1C1 = "=SUM(RC[-66]:RC[-55])"
  5.     .Range("BR2" ).FormulaR1C1 = "=SUM(RC[-66]:RC[-55])"
  6.     .Range("BQ2:BR2" ).AutoFill Destination:=.Range("BQ2:DB2" ), Type:=xlFillDefault


Message édité par Marc L le 16-07-2013 à 01:54:21
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed