[VBA AutoCAD] Problème inter-application

Problème inter-application [VBA AutoCAD] - VB/VBA/VBS - Programmation

Marsh Posté le 03-04-2011 à 10:28:17    

Bonjour,
 
Actuellement je travaille sur une petite application lancée depuis AutoCAD 2011.
Je souhaite en effet  générer un classeur Excel contenant diverses informations du dessin courant. Jusque là ça va!
En voulant améliorer le rendu esthétique de la feuille du classeur (Bordures, fond de cellule), Je rencontre un problème dès lors que je lance une deuxième instance. C'est à dire que la première fois tout ce passe bien, les propriétés de cellules sont générées, mais à la seconde, message d'erreur:  
 
Erreur d’exécution.  
Variable Objet ou variable de bloc With non définie.
 
Et la troisième fois la session Excel est lancée avec toutes les infos du dessin courant mais les propriétés de cellules sont absentes!  
 
Voici le code:
 

Code :
  1. Option Explicit
  2. Sub ExcelApp(LayerVal As String)
  3. '******************'
  4. '* Création Excel *'
  5. '******************'
  6. 'Déclaration des variables'
  7. Dim MSExcelApp As Object
  8. Dim NewSurvey As Object
  9. 'Création d'une instance de l'objet Microsoft Excel'
  10. Set MSExcelApp = CreateObject("Excel.application" )
  11. 'Création d'un nouveau Fichier'
  12. Set NewSurvey = MSExcelApp.Workbooks.Add
  13. NewSurvey.sheets("Feuil1" ).Name = "Métrés"
  14. NewSurvey.sheets("Feuil2" ).Delete
  15. NewSurvey.sheets("Feuil3" ).Delete
  16. 'Exécution des tâches'
  17. With NewSurvey.sheets("Métrés" )
  18.            
  19.     '****************'
  20.     '* Titre Numéro *'
  21.     '****************'
  22.     With .Range("A1" )
  23.         .Value = ("N°" )
  24.         .HorizontalAlignment = xlCenter
  25.         .Font.Bold = True
  26.     End With
  27.    
  28.     .Range("A1" ).Select
  29.     Call BordCell
  30. End With
  31.      
  32. 'Enregistrement du Fichier'
  33. On Error Resume Next
  34. MSExcelApp.DisplayAlerts = False
  35. NewSurvey.SaveAs FileName:=ThisDrawing.Path & "\AutoCAD - Métrés - " & LayerVal
  36. MSExcelApp.dispalyalerts = True
  37.    
  38. 'Affichage de l'objet Microsoft Excel'
  39. MSExcelApp.Visible = True
  40. 'Suppression des classeurs inactifs'
  41. If NewSurvey.Workbooks.Name <> "\AutoCAD - Métrés - " & LayerVal Then
  42.     MsgBox ActiveWorkbook.Delete
  43. End If
  44. 'Libération variable'
  45. Set NewSurvey = Nothing
  46. Set MSExcelApp = Nothing
  47. Unload LayerBox
  48. End Sub


 
Ligne 35:
Appel de sous-routine pour générer les bordures.
 

Code :
  1. Sub BordCell()
  2. '********************'
  3. '* Bordures Cellule *'
  4. '********************'
  5. Debug.Print "Selection = " & Selection
  6. Selection.Borders(xlDiagonalDown).LineStyle = xlNone
  7. Selection.Borders(xlDiagonalUp).LineStyle = xlNone
  8. With Selection.Borders(xlEdgeLeft)
  9.     .LineStyle = xlContinuous
  10.     .Weight = xlThin
  11.     .ColorIndex = xlAutomatic
  12. End With
  13. With Selection.Borders(xlEdgeTop)
  14.     .LineStyle = xlContinuous
  15.     .Weight = xlThin
  16.     .ColorIndex = xlAutomatic
  17. End With
  18. With Selection.Borders(xlEdgeBottom)
  19.     .LineStyle = xlContinuous
  20.     .Weight = xlThin
  21.     .ColorIndex = xlAutomatic
  22. End With
  23. With Selection.Borders(xlEdgeRight)
  24.     .LineStyle = xlContinuous
  25.     .Weight = xlThin
  26.     .ColorIndex = xlAutomatic
  27. End With
  28. End Sub


 
Ligne 7:  
- La première fois Debug.print me renvoie bien la valeur "N°".
- La seconde fois plante.
- La troisième fois me renvoie rien.
 
Que se passe t-il?


Message édité par mmarle le 15-11-2011 à 14:37:46
Reply

Marsh Posté le 03-04-2011 à 10:28:17   

Reply

Marsh Posté le 06-04-2011 à 19:23:14    

Rapidement et à vue de nez, la sub ne sait pas sur quel objet il faut faire les sélections et les bordures si tu ne lui dis pas !
 
Essaye à ta ligne 35 de ton programme principal de donner en argument la feuille excel :

Call BordCell(NewSurvey.sheets("Métrés" ))


(au passage, il semble manquer un End With après ou avant cette ligne)
 
et dans la 2nde sub :

Sub BordCell(Feuille as Excel.Sheet)
With Feuille
'********************'
'* Bordures Cellule *'
'********************'
Debug.Print "Selection = " & Selection
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
    .LineStyle = xlContinuous
    .Weight = xlThin
    .ColorIndex = xlAutomatic
End With
End With
End Sub


Pas garanti que ça fonctionne, mais je rechercherais dans cet esprit là.


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Marsh Posté le 08-04-2011 à 08:33:59    

Salut otobox,
 
Tout d'abord je te remercie de t'être penché sur mon problème.  
 
J'ai testé les modifications que tu as apporté à mon application et malheureusement ça n'aboutit à rien. Pour l'instant je n'utilise plus la sous-routine de propriétés de cellule et j'ai saisi le code directement à partir de la ligne 22 "Exécution des tâches". Ca fonctionne très bien. C'est un peu dommage car le code est recopié bon nombre de fois et j'aurais voulu optimiser l’écriture afin d'avoir quelque chose de plus "Propre".  
 
Pour le End With en effet il en manquait un! Je l'ai supprimé par inadvertance lorsque j'ai effacé une partie des tâches à exécuter.
 
Merci.


Message édité par mmarle le 07-06-2011 à 10:11:41
Reply

Sujets relatifs:

Leave a Replay

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