Erreur d'exécution 1004 ...

Erreur d'exécution 1004 ... - VB/VBA/VBS - Programmation

Marsh Posté le 10-01-2008 à 17:15:03    

Bonjour a tous,
 
Tout d'abord merci de me lire ...
 
Voici mon pb.
 
Je veux transférer le contenu d'un recordset d'access vers Excel en utilisant une mise en forme automatique.
Je l'exécute une première fois et tout se passe à la perfection.
 
Par contre lorsque je ré-exécute la macro, j'obtiens l'erreur "La méthode range de l'objet global a échoué. Erreur d'exécution 1004. voir ligne 'Range("A3:W3" ).Select'
 
Je joins une partie du code ...
 
 
[cpp]Dim wbk As Excel.Workbook
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim fld As DAO.Field
Dim intcolonne, intligne As Integer
Dim xl As Excel.Application
 
Set db = CurrentDb()
Set rst = db.OpenRecordset("Sales Detail Clothing By Style" )
 
Set xl = New Excel.Application
xl.Visible = True
   
With xl
    Set wbk = .Workbooks.Add
     
    wbk.Sheets("feuil1" ).Name = "Detail Clothing By Style"
     
    With wbk.Sheets("Detail Clothing By Style" )
         .Range("A3" ).Value = "PH"
         .Range("B3" ).Value = "Style"
         .Range("C3" ).Value = "Desc"
         .Range("D3" ).Value = "Planner"
         .Range("E3" ).Value = "ST"
         .Range("F3" ).Value = "SUB"
         .Range("G3" ).Value = "PA"
         .Range("H3" ).Value = "AN"
         .Range("I3" ).Value = "COST"
         .Range("J3" ).Value = "IO Ord QTY"
         .Range("K3" ).Value = "IO SHIP QTY"
         .Range("L3" ).Value = "IO LINES ORD"
         .Range("M3" ).Value = "IO LINES SHIP"
         .Range("N3" ).Value = "REP Ord QTY"
         .Range("O3" ).Value = "REP SHIP QTY"
         .Range("P3" ).Value = "REP LINES ORD"
         .Range("Q3" ).Value = "REP LINES SHIP"
         .Range("R3" ).Value = "INVENTORY"
         .Range("S3" ).Value = "ON ORDER"
         .Range("T3" ).Value = "TOT ON HAND"
         .Range("U3" ).Value = "Sales Forecast"
         .Range("V3" ).Value = "Projected Sales"
         .Range("W3" ).Value = "% of sales entered vs forecast"
         
         .Range("A4" ).CopyFromRecordset rst
      End With
       
      Range("A3:W3" ).Select  '---------  ici est l'erreur d'exécution'
    With Selection.Font
               .Name = "Arial"
        .Size = 8
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = 1
    End With
    Selection.Font.Bold = True
    Range("J3" ).Select
    ActiveCell.FormulaR1C1 = "IO ORDER " & Chr(10) & "QTY"
    With ActiveCell.Characters(Start:=1, Length:=13).Font
etc...
 
Gros Gros merci

Reply

Marsh Posté le 10-01-2008 à 17:15:03   

Reply

Marsh Posté le 10-01-2008 à 19:23:08    

Bonjour,
Essayez de mettre le range fautif à l'intérieur du 1er With ...
A+

Message cité 1 fois
Message édité par Thierry_94 le 10-01-2008 à 19:23:38
Reply

Marsh Posté le 10-01-2008 à 19:47:37    

Thierry_94 a écrit :

Bonjour,
Essayez de mettre le range fautif à l'intérieur du 1er With ...
A+


 
 
Désolé je ne comprends pas ce que vous voulez dire. Je ne suis pas très familière avec ce procéder. J'en suis même à ma première tentative.
Serait-ce possible de me détailler un peu plus.
 
Encore merci

Reply

Marsh Posté le 10-01-2008 à 19:48:17    

Désolé je ne comprends pas ce que vous voulez dire. Je ne suis pas très familière avec ce procéder. J'en suis même à ma première tentative.  
Serait-ce possible de me détailler un peu plus.
 
Encore merci

Reply

Marsh Posté le 10-01-2008 à 22:53:28    

Bonjour,
il veut dire que vous devriez déplacer

Range("A3:W3" ).Select


dans le bloc

With wbk.Sheets("Detail Clothing By Style" )
End With


À savoir :

With wbk.Sheets("Detail Clothing By Style" )
         .Range("A3" ).Value = "PH"
         .Range("B3" ).Value = "Style"
         .Range("C3" ).Value = "Desc"
         .Range("D3" ).Value = "Planner"
         .Range("E3" ).Value = "ST"
         .Range("F3" ).Value = "SUB"
         .Range("G3" ).Value = "PA"
         .Range("H3" ).Value = "AN"
         .Range("I3" ).Value = "COST"
         .Range("J3" ).Value = "IO Ord QTY"
         .Range("K3" ).Value = "IO SHIP QTY"
         .Range("L3" ).Value = "IO LINES ORD"
         .Range("M3" ).Value = "IO LINES SHIP"
         .Range("N3" ).Value = "REP Ord QTY"
         .Range("O3" ).Value = "REP SHIP QTY"
         .Range("P3" ).Value = "REP LINES ORD"
         .Range("Q3" ).Value = "REP LINES SHIP"
         .Range("R3" ).Value = "INVENTORY"
         .Range("S3" ).Value = "ON ORDER"
         .Range("T3" ).Value = "TOT ON HAND"
         .Range("U3" ).Value = "Sales Forecast"
         .Range("V3" ).Value = "Projected Sales"
         .Range("W3" ).Value = "% of sales entered vs forecast"
         
         .Range("A4" ).CopyFromRecordset rst
 
         .Range("A3:W3" ).Select
      End With


Ne pas oublier le point !


Message édité par juju2k le 10-01-2008 à 22:53:48
Reply

Marsh Posté le 11-01-2008 à 02:09:38    

Bonjour,
 
le problème ne va pas se poser que là, mais aussi pour

Code :
  1. Range("J3" ).Select


 
Pour comprendre l'erreur, il faut savoir que l'objet Range n'existe pas, donc VBA essaye de l'interpréter comme la méthode/attribut de l'objet global qui est Application (je crois). Or il n'y a pas de méthode/attribut Range pour l'objet Application d'où le message d'erreur.
 
En fait l'attribut Range n'existe que pour les objets Worksheet et c'est ce que fait le  

Code :
  1. With wbk.Sheets("Detail Clothing By Style" )


qui fait que l'objet par "défaut" devient la feuille "Detail Clothing By Style", ce qui permet d'utiliser la syntaxe .Range.
 
Par contre je ne peux que conseiller de faire un effort d'apprentissage (via un petit tutoriel par exemple) pour apprendre les bases avant de continuer...
 
Cordialement

Reply

Sujets relatifs:

Leave a Replay

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