Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3084 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA AutoCAD] Problème inter-application

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[VBA AutoCAD] Problème inter-application

n°2067727
mmarle
Posté le 03-04-2011 à 10:28:17  profilanswer
 

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
mood
Publicité
Posté le 03-04-2011 à 10:28:17  profilanswer
 

n°2068501
otobox
Maison fondée en 2005
Posté le 06-04-2011 à 19:23:14  profilanswer
 

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
n°2068776
mmarle
Posté le 08-04-2011 à 08:33:59  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  [VBA AutoCAD] Problème inter-application

 

Sujets relatifs
probleme rendu IE/FFproblème script export csv php
probleme parser et regroupe des elementsProblème de centrage total du site.
[VBA] tracer graphiques[VBA] Macro correspondance colonnes
[PHP] Problème système parrainage[Résolu] Problème sur un formulaire de contact
Probleme fonction SWITCH SQL ACCESSProblème return char.
Plus de sujets relatifs à : [VBA AutoCAD] Problème inter-application


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR