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 :
- Option Explicit
- Sub ExcelApp(LayerVal As String)
- '******************'
- '* Création Excel *'
- '******************'
- 'Déclaration des variables'
- Dim MSExcelApp As Object
- Dim NewSurvey As Object
- 'Création d'une instance de l'objet Microsoft Excel'
- Set MSExcelApp = CreateObject("Excel.application" )
- 'Création d'un nouveau Fichier'
- Set NewSurvey = MSExcelApp.Workbooks.Add
- NewSurvey.sheets("Feuil1" ).Name = "Métrés"
- NewSurvey.sheets("Feuil2" ).Delete
- NewSurvey.sheets("Feuil3" ).Delete
- 'Exécution des tâches'
- With NewSurvey.sheets("Métrés" )
-
- '****************'
- '* Titre Numéro *'
- '****************'
- With .Range("A1" )
- .Value = ("N°" )
- .HorizontalAlignment = xlCenter
- .Font.Bold = True
- End With
-
- .Range("A1" ).Select
- Call BordCell
- End With
-
- 'Enregistrement du Fichier'
- On Error Resume Next
- MSExcelApp.DisplayAlerts = False
- NewSurvey.SaveAs FileName:=ThisDrawing.Path & "\AutoCAD - Métrés - " & LayerVal
- MSExcelApp.dispalyalerts = True
-
- 'Affichage de l'objet Microsoft Excel'
- MSExcelApp.Visible = True
- 'Suppression des classeurs inactifs'
- If NewSurvey.Workbooks.Name <> "\AutoCAD - Métrés - " & LayerVal Then
- MsgBox ActiveWorkbook.Delete
- End If
- 'Libération variable'
- Set NewSurvey = Nothing
- Set MSExcelApp = Nothing
- Unload LayerBox
- End Sub
|
Ligne 35:
Appel de sous-routine pour générer les bordures.
Code :
- Sub BordCell()
- '********************'
- '* 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 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