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: