Bonjour à toutes et tous,
Je viens vers vous car je ne parviens pas à résoudre le problème que je rencontre.
En effet, j'ai dans un classeur de suivi des demandes une macro qui lors de sa fermeture exporte les données dans un fichier permettant à nos "clients" de voir si la demande est bien enregistrée et le cas échéant en cours de traitement.
Cette macro fonctionnait sans problème sur le fichier de suivi de l'année précédente, mais pour celui de cette année, j'ai une erreur 57121 (erreur générée par l'application ou l'objet) qui se produit sur la ligne Sheets(ongmois).Activate
Il faut savoir que ce fichier comme celui de l'année précédente est créé à partir d'une trame vierge (avec l'ensemble des macros).
De plus lorsque je charge le fichier de 2014 et que je le ferme, la macro s'exécute sans encombre.
J'ai essayé de nommer directement sans faire appel à la variable ongmois (Sheets("Janvier").Activate) sans plus de réussite.
J'ai essayé suivi.Sheets(ongmois).activate, et même essayé avec un bloc With toujours sans succès.
Par chance je n'ai plus assez de cheveux pour me les arracher.
Je pense que mon code ne doit pas être optimum pour fonctionner dans un cas, mais pas dans l'autre, mais là je sèche, et donc je fais appel à un œil neuf.
Edit : test fait sur Excel 2007. Cela fonctionne.
Merci d'avance pour vos retours.
Je viens vers vous car je ne parviens pas à résoudre le problème que je rencontre.
En effet, j'ai dans un classeur de suivi des demandes une macro qui lors de sa fermeture exporte les données dans un fichier permettant à nos "clients" de voir si la demande est bien enregistrée et le cas échéant en cours de traitement.
Cette macro fonctionnait sans problème sur le fichier de suivi de l'année précédente, mais pour celui de cette année, j'ai une erreur 57121 (erreur générée par l'application ou l'objet) qui se produit sur la ligne Sheets(ongmois).Activate
Il faut savoir que ce fichier comme celui de l'année précédente est créé à partir d'une trame vierge (avec l'ensemble des macros).
De plus lorsque je charge le fichier de 2014 et que je le ferme, la macro s'exécute sans encombre.
J'ai essayé de nommer directement sans faire appel à la variable ongmois (Sheets("Janvier").Activate) sans plus de réussite.
J'ai essayé suivi.Sheets(ongmois).activate, et même essayé avec un bloc With toujours sans succès.
Par chance je n'ai plus assez de cheveux pour me les arracher.
Je pense que mon code ne doit pas être optimum pour fonctionner dans un cas, mais pas dans l'autre, mais là je sèche, et donc je fais appel à un œil neuf.
Edit : test fait sur Excel 2007. Cela fonctionne.
Merci d'avance pour vos retours.
Code:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim delmet, suivi As Object
Dim mois As Variant
Dim nbmois As Integer
Dim ongmois As String
Dim nummet, prod, comp As String
Dim datedem, delai As Date
Dim encours As Boolean
Dim temps As Single
retourmetro = "J:\PRIVE\Métrologie\Retourmetro.xlsx"
plansuiv = "R:\PRIVE\Métrologie\Planning métrologie\Suivi" & Year(Date) & ".xlsm"
If ActiveWorkbook.ReadOnly = True Then
Exit Sub
Else
fichcl = MsgBox("Générer le fichier retour métro?", vbYesNo + vbQuestion + vbDefaultButton2, "Export Données")
If fichcl = vbNo Then
Exit Sub
Else
If Dir("J:\PRIVE\Métrologie\Retourmetro.xlsx") = "" Then
MsgBox "Fichier Introuvable!", vbOKOnly + vbInformation, "Erreur"
Exit Sub
Else
Set delmet = GetObject(retourmetro)
If delmet.ReadOnly Then
MsgBox "Le fichier est déjà ouvert!", vbOKOnly + vbInformation, "Traitement Impossible"
Exit Sub
Else
Set suivi = GetObject(plansuiv)
mois = Array("Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Decembre")
nbmois = Month(Date) - 1
ongmois = mois(nbmois)
Application.ScreenUpdating = False
delmet.Sheets("Feuil1").Activate
Range("C3").Select
ActiveCell.Value = Now
Range("A9").Select
If ActiveCell.Value <> "" Then
Range("A9", Range("F" & Rows.Count).End(xlUp)).Select
Selection.Clear
Range("A9").Select
End If
suivi.Activate
Sheets(ongmois).Activate
Range("W4").Select
comp = Selection.Offset(0, -20).Value
Do While comp <> ""
suivi.Activate
If ActiveCell.Value <> "" Then
Selection.Offset(1, 0).Select
comp = Selection.Offset(0, -21).Value
Else
If Selection.Offset(0, -22) <> "" Then
nummet = Selection.Offset(0, -22).Value
prod = Selection.Offset(0, -20).Value
datedem = Selection.Offset(0, -3).Value
temps = Selection.Offset(0, 3).Value
If Selection.Offset(0, -1) <> "" Then
delai = Selection.Offset(0, -1)
Else
delai = Selection.Offset(0, -2)
End If
If Selection.Offset(0, 2).Value <> 0 Then
encours = True
Else
encours = False
End If
delmet.Sheets("Feuil1").Activate
ActiveCell.Value = nummet
Selection.Offset(0, 1).Value = comp
Selection.Offset(0, 2).Value = prod
Selection.Offset(0, 3).Value = datedem
Selection.Offset(0, 4).Value = delai
Selection.Offset(0, 5).Value = temps
If encours = True Then
Range(Cells(ActiveCell.Row, ActiveCell.Column), Cells(ActiveCell.Row, ActiveCell.Column + 5)) _
.Font.Color = -11489280
End If
Selection.Offset(1, 0).Select
suivi.Activate
Selection.Offset(1, 0).Select
comp = Selection.Offset(0, -21).Value
Else
suivi.Activate
Selection.Offset(1, 0).Select
comp = Selection.Offset(0, -21).Value
End If
End If
Loop
delmet.Sheets("Feuil1").Activate
Range("A9", Range("F" & Rows.Count).End(xlUp)).Borders.Value = 1
With delmet
.Windows(1).Visible = True
.Save
.Saved = True
.Close
End With
End If
End If
End If
End If
End Sub
Dernière édition: