Visites

   visiteurs

   visiteurs en ligne

Sujet n°214 Problème lié à l'automation d'Excel
    par grosbras le 05/12/2008 : 17:00

Bonjour,

J'ai utilisé différents codes concernant l'automation de EXCEL pour créer un tableau et mettre les cellules en forme.

Le code marche très bien une première fois et dans ce cas, j'ai Activecell = <variable objet ou variable de bloc with non définie>

Mais lorsque je veux lancer une deuxième extraction, il plante et me sort une erreur '91'  <variable objet ou variable de bloc with non définie> alors que ActiveCell = nothing ....

Même en définissant la cellule ...

C'est 1 fois sur 2. Il suffit de réinitialiser le tout, fermer Excel sans enregistrer et relancer le tout et cela marche ... Malheureusement toujours 1 fois sur 2.

Pourriez vous m'aider car cela me prend vraiment le chou... mad(Avec mes excuses..)

Un grand merci par avance

Je vous joins un extrait du code si cela peut aider ...

Option Compare Database

Function TransfertExcelAutomationreqauto()
   
    Dim xlapp As Excel.Application
    Dim xlbook As Excel.Workbook
    Dim xlsheet As Excel.Worksheet
    Dim i As Long, J As Long, t As Variant
    Dim t0 As Long, t1 As Long
    Dim tbl As String
    t0 = Timer
    Dim rec As Recordset
    FichierXL = "C:accessSEPA_ACTIVITE_AUTO.XLS"
   
DoCmd.SetWarnings False

'Supprimer fichier si existe
If Dir(FichierXL, vbHidden) <> "" Then
    Kill FichierXL
End If
   
'Créer un objet Excel
Set xlapp = CreateObject("Excel.Application")
'Créer un nouveau classeur
Set xlbook = xlapp.Workbooks.Add
xlapp.Visible = True

'Traitement REQ AUT 1
'Chargement table de données
   
'suppression table REQ_AUT_1_TABLE si elle existe
tbl = "REQ_AUT_1_TABLE"
Delete_Table (tbl)
       
'Lancement nouvelle table
DoCmd.OpenQuery "REQ_AUT_1_CRETABLE", acViewNormal, acEdit
Set rec = CurrentDb.OpenRecordset("REQ_AUT_1_TABLE", dbOpenSnapshot)

'Ajouter une feuille de calcul et la nommer
Set xlsheet = xlbook.Worksheets.Add
xlsheet.Name = "Evol nbre dossiers"

'Ecrire le titre dans la cellule de ligne 1 et de colonne 1
xlsheet.Cells(1, 1) = rec.Fields(0)
   
'Gérer les entetes
For J = 1 To rec.Fields.Count - 1
  xlsheet.Cells(3, J) = "'" & rec.Fields(J).Name
Next J
 
'Recopier des données à partir de la ligne 4
i = 4
Do While Not rec.EOF
    For J = 1 To rec.Fields.Count - 1
        ' .Fields(Index).Type renvoie le type du champ
        '   si c'est un Texte (dbText) ou une date (spécifique) nous insérons "'" pour
        '   qu'il soit reconnu par Excel comme du Texte
        If rec.Fields(J).Type = dbText Then
            xlsheet.Cells(i, J) = "'" & rec.Fields(J)
        ElseIf rec.Fields(J).Type = dbDate Then
           xlsheet.Cells(i, J) = "'" & rec.Fields(J)
        Else
            xlsheet.Cells(i, J) = rec.Fields(J)
        End If
    xlsheet.Cells(i, J).Select
    Next J
    i = i + 1
    rec.MoveNext
Loop

'Traitement spécifique des cellules
xlsheet.Range("A3").Select
xlsheet.Range("a3").End(xlToRight).Offset(0, 1).FormulaR1C1 = "Total"
xlsheet.Range("a3").End(xlToRight).Offset(0, 0).Select
xlsheet.Range("a3").End(xlToRight).Offset(0, 0).Activate

xlsheet.Range(ActiveCell, ActiveCell.End(xlToLeft)).Select
     With Selection
         .HorizontalAlignment = xlGeneral
         .VerticalAlignment = xlCenter
         .Borders(xlEdgeBottom).LineStyle = xlContinuous
         .Borders(xlEdgeLeft).LineStyle = xlContinuous
         .Borders(xlEdgeRight).LineStyle = xlContinuous
         .Borders(xlEdgeTo


Réponse n° 1 par 3Stone le 17/12/2008 : 16:52
Bonjour,


Dixit...
variable objet ou variable de bloc with non définie


Cette erreur provient souvent de l'oubli, mais pas seulement d'un bloc "With" comme on pourrait le croire.

La même erreur apparait lorsque un "if" ou "elseif" ne trouve pas son "end if".
Idem pour "Do" et "Loop"

Il faut donc d'abord vérifier la bonne imbrication des tests et des boucles.

Au besoin, placer un "point d'arrêt" et faire du "pas à pas" en surveillant le déroullement du code.

Ensuite, voir si le variable, celles assignées par un "Set machin=chose", soient bien libérées avant de sortir de la sub.
Cela se fit par un "Set machin=Nothin"

Cordialement,
Pierre(3stone)

[ Retour à la liste des sujets ]

Recherche



Préférences

Se reconnecter
---

Votre nom (ou pseudo) :

Votre code secret


 Nombre de membres 1 membre


Connectés :

( personne )

Haut