charlie9277
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 février 2009
-
27 févr. 2009 à 10:06
charlie9277
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 février 2009
-
27 févr. 2009 à 15:45
Bonjour à tous,
Cela fait maintenant deux jours que je n'arrive pas à résoudre mon bug.
J'ai parcouru beaucoup de forum mais sans réponse. Alors je me lance, voici mon problème:
Quand j'éxécute mon code une première fois tout se passe bien.
Quand je l'éxécute une deuxième fois sans sortir de Access, il plante sur la ligne 'ActiveWindow.DisplayGridlines = False' en erreur "Erreur d'exécution '91': Variable objet ou variable de bloc With non définie".
Par contre, si je réinitialise le code entre les deux éxécution (bouton carré dans la fenêtre éditeur) alors la deuxième éxécution se passe correctement.
Franchement, je n'y comprend rien. Je fais bien attention à tout quitter correctement mais il manque quelque chose .... J'espère que quelqu'un pourra m'aider. Merci d'avance pour votre aide.
Voici le code simplifié mais qui montre le bug:
Private Sub Rapport_Maintenance_Review_Click()
Dim MonAppliExcel As Excel.Application
Dim Rapport As Excel.Workbook
Dim MaFeuilleExcel As Excel.Worksheet
Set MonAppliExcel = New Excel.Application
Set Rapport = MonAppliExcel.Workbooks.Add
Set MaFeuilleExcel = Rapport.ActiveSheet
MonAppliExcel.Visible = True
charlie9277
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 février 2009 27 févr. 2009 à 14:11
J'ai essayé avec MaFeuilleExcel.Activate mais ça ne change rien.
Si je mets cette ligne en commentaire, il buggera à la prochaine sélection Range quelques lignes plus bas sauf si je réinitialise le code avec le bouton carré !!!!
Au fait, merci beaucoup pour ton aide.
Voici une plus grande partie du code:
Private Sub Rapport_Maintenance_Review_Click()
Dim MaBD As Database
Dim Liste_Ticket As Recordset
Dim Liste_Actions As Recordset
Dim Liste_Temp As Recordset
Dim MonAppliExcel As Excel.Application
Dim Rapport As Excel.Workbook
Dim MaFeuilleExcel As Excel.Worksheet
Dim Ligne As Integer
Ligne = 2
'Ouverture de la connexion à la BDB
Set MaBD = CurrentDb()
Set MonAppliExcel = New Excel.Application
Set Rapport = MonAppliExcel.Workbooks.Add
Set MaFeuilleExcel = Rapport.ActiveSheet
MonAppliExcel.Visible = True
MaFeuilleExcel.Name = "Pending Items for " & Me.Liste_Entity.Value
MaFeuilleExcel.Activate
ActiveWindow.DisplayGridlines = False
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''01 - DEFECT'''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Recherche des tickets MonSql "SELECT * FROM Tickets WHERE Type ""01 - Defect"" AND Entity = """ & Me.Liste_Entity.Value & """;"
Set Liste_Ticket = MaBD.OpenRecordset(MonSql, dbOpenSnapshot)
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne, 9), MaFeuilleExcel.Cells(Ligne, 11)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne, 1), MaFeuilleExcel.Cells(Ligne, 9)).Select
MaFeuilleExcel.Cells(Ligne, 9).Activate
Selection.Font.Bold = True
With Selection.Interior
.ColorIndex = 1
.Pattern = xlSolid
End With
Selection.Font.ColorIndex = 2
Ligne = Ligne + 1
'Sélection du defect
Liste_Ticket.MoveFirst
While Not Liste_Ticket.EOF MonSql "SELECT * FROM Actions WHERE Id_Tâche """ & Liste_Ticket("Id") & """;"
Set Liste_Actions = MaBD.OpenRecordset(MonSql, dbOpenSnapshot)
If Liste_Actions.RecordCount <> 0 Then
While Not Liste_Actions.EOF
MaFeuilleExcel.Cells(Ligne, 9).FormulaR1C1 = Liste_Actions("Date_Création")
MaFeuilleExcel.Cells(Ligne, 10).FormulaR1C1 = Liste_Actions("Libellé_Action")
MaFeuilleExcel.Cells(Ligne, 11).FormulaR1C1 = Liste_Actions("Qui")
Ligne = Ligne + 1
Liste_Actions.MoveNext
Wend
If Liste_Actions.RecordCount > 1 Then
'Fusion des lignes du defect
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 1), MaFeuilleExcel.Cells(Ligne - 1, 1)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 2), MaFeuilleExcel.Cells(Ligne - 1, 2)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 3), MaFeuilleExcel.Cells(Ligne - 1, 3)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 4), MaFeuilleExcel.Cells(Ligne - 1, 4)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 5), MaFeuilleExcel.Cells(Ligne - 1, 5)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 6), MaFeuilleExcel.Cells(Ligne - 1, 6)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 7), MaFeuilleExcel.Cells(Ligne - 1, 7)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 8), MaFeuilleExcel.Cells(Ligne - 1, 8)).Select
With Selection
.HorizontalAlignment = xlLeft
.VerticalAlignment = xlCenter
.MergeCells = True
End With
End If
End If
'Ecriture des informations pour le defect
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 1).FormulaR1C1 = Liste_Ticket("Id")
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 2).FormulaR1C1 = Liste_Ticket("Headline")
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 3).FormulaR1C1 = Replace(Liste_Ticket("Description"), "€", Chr(10))
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 4).FormulaR1C1 = Liste_Ticket("Severity")
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 5).FormulaR1C1 = Liste_Ticket("State")
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 6).FormulaR1C1 = Liste_Ticket("LastSubmitDate")
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 7).FormulaR1C1 = "A compléter"
MaFeuilleExcel.Cells(Ligne - Liste_Actions.RecordCount, 8).FormulaR1C1 = Liste_Ticket("Comments")
If Liste_Actions.RecordCount <> 0 Then
Ligne = Ligne + 0
Else
Ligne = Ligne + 1
End If
Liste_Ticket.MoveNext
Wend
MonSql "SELECT * FROM Tickets LEFT JOIN Actions ON Tickets.[Id] Actions.[Id_Tâche] WHERE Tickets.[Entity] = """ & Me.Liste_Entity.Value & """ AND Tickets.[Type] = ""01 - Defect"";"
Set Liste_Temp = MaBD.OpenRecordset(MonSql, dbOpenSnapshot)
Liste_Temp.MoveLast
MaFeuilleExcel.Range(MaFeuilleExcel.Cells(Ligne - Liste_Temp.RecordCount, 1), MaFeuilleExcel.Cells(Ligne - 1, 11)).Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
If Liste_Temp.RecordCount > 1 Then
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End If
Liste_Temp.Close
Liste_Ticket.Close
Ligne = Ligne + 3
'Fermeture de la BDB, des Recordset et du fichier excel
Set MaFeuilleExcel = Nothing
Set Rapport = Nothing
Set MonAppliExcel = Nothing
Liste_Ticket.Close
MaBD.Close
MsgBox "Rapport généré avec succès", vbInformation
Exit Sub
hebus16
Messages postés80Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention 2 octobre 20091 27 févr. 2009 à 14:43
ahhhh aussi une autre chose, j'aimerai comprendre :
tu as une application Access qui doit te faire un compte rendu des infos qu'elles possèdent dans un fichier Excel. Le truc que je comprends pas c'est cette dernière ligne :
MaBD.Close
Tu fermes ton appli après l'appui sur le bouton ? C'était pas plutôt un Recordset que tu souhaitais fermer ? Il est possible que ca vienne de là
Vous n’avez pas trouvé la réponse que vous recherchez ?
charlie9277
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 février 2009 27 févr. 2009 à 15:05
<li>Effectivement, j'ai une base de donnée sous access dont j'extraie des infos que je colle dans un fichier excel.</li>
<li>La première commande bloquante sert bien à enlever le quadrillage de la feuille excel.</li>
<li>J'ai essayé en enlevant MaBD.Closemais ça bugue toujours</li>
Mais en fait ce qui bloque n'est pas la commande en soi mais la partie "ActiveWindow".
Si tu mets cette ligne en commentaire, il va bloquer sur "MaFeuilleExcel.Range....".
C'est comme si le pointeur "MaFeuilleExcel" de la 1er execution existe toujours lors de la 2ème execution.
C'est pour ça que si j'active le bouton réinitialiser le code entre les deux execution, tout se passe bien.
Il y a un objet qui reste mais je n'arrive pas à mettre la main dessus.
charlie9277
Messages postés4Date d'inscriptionvendredi 27 février 2009StatutMembreDernière intervention27 février 2009 27 févr. 2009 à 15:45
MonAppliExcel prend les valeurs suivantes:
1- <Hors du contexte> (avant l'éxécution de la macro)
2- Nothing (au début de la macro)
3- "Microsoft Excel" (à l'initialisation de la variable)
4- Nothing (je le positionne à la fin de la macro)
5- <Hors du contexte> (la macro est finie)
Par contre, pour "Rapport" et "MaFeuilleExcel", j'obtiens:
1- <Hors du contexte> (avant l'éxécution de la macro)
2- Nothing (au début de la macro)
3- "" (à l'initialisation de la variable)
4- Nothing (je le positionne à la fin de la macro)
5- <Hors du contexte> (la macro est finie)
C'est bizarre que ces variables soient positionnées à chaine vide ???
Je m'attendais à leur valeur par défaut genre "classeur1" et "Feui1".