Skygod
Messages postés11Date d'inscriptionvendredi 8 juillet 2005StatutMembreDernière intervention18 septembre 2008
-
18 sept. 2008 à 23:19
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 2012
-
19 sept. 2008 à 09:31
Bonjour,
Je rencontre un problème en ce moment avec une gestion d'erreur du style On Error GoTo 1. Je vous explique, c'est une application en excel. J'ai une liste de numéros (des codes pour des fonds d'investissement) et chaque numéro est utilisé comme variable pour ouvrir une feuille excel du même nom, or quand un nouveau fonds est crée, il se retrouve listé dans ma feuille excel, mais le fichier .xls correspondant n'existe pas encore. Lorsqu'une première erreur se produit (dans mon cas, la tentative d'ouverture d'un fichier excel qui n'existe pas) la gestion se fait parfaitement, la macro passe à la ligne d'instruction 1. Le problème est que si une deuxième erreur survient, la macro ne renvoie plus à l'instruction en ligne 1. La macro passe à la ligne suivante comme si de rien était. Je ne connais pas bien les instructions de gestion d'erreur, alors est-ce que ce comportement est normal ? Est-ce que j'ai raté quelque chose ?
Voici mon code
Sub Répartition()
'
' Répartition Macro
' Macro enregistrée le 18/09/2008 par Lacroix
'<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
'
Range("A1").Select
StartRow = 1
EndRow = 1
Do Until IsEmpty(ActiveCell.Value)
Range("A" & StartRow).Select
If IsEmpty(ActiveCell.Offset(1, 0).Value) Then
Else
Do While ActiveCell.Value = ActiveCell.Offset(1, 0).Value
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 sept. 2008 à 09:19
Salut,
Pourquoi plutot que de faire une gestion d'erreur, ne pas faire un code SANS erreur. Avant d'ouvrir le fichier XLS, regarde plutot si il existe sur le disque dur.
Si il existe pas tu le crée et si il existe tu l'ouvres.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 19 sept. 2008 à 09:31
Salut,
Tiens regarde ce que fait ce code. (pas testé)
NOTE: Il faut éviter les accents en prog (a part dans les commentaires)
Sub Répartition()
' Répartition Macro
' Macro enregistrée le 18/09/2008 par Lacroix
Range("A1").Select
StartRow = 1
EndRow = 1
Do Until IsEmpty(ActiveCell)
Range("A" & StartRow).Select
If Not IsEmpty(ActiveCell.Offset(1, 0)) Then
Do While ActiveCell.Value = ActiveCell.Offset(1, 0).Value
ActiveCell.Offset(1, 0).Select
EndRow = EndRow + 1
Loop
Rows(StartRow & ":" & EndRow).Copy
FundID = ActiveCell.Value
With CheckXLS(FundID)
.ActiveSheet.Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
ActiveSheet.Paste
Call .Close(True)
End With
EndRow = EndRow + 1
StartRow = EndRow
End If
Loop
End Sub<hr />
Private Function CheckXLS(FundID As String) As Workbook
Dim FileName As String
FileName = "U:\HISFIS Pôle Historique\" & FundID & ".xls"
'Si le fichier existe
If Dir(FileName) <> vbNullString Then
'on l'ouvre et on le retourne
Set CheckXLS = Workbooks.Open(FileName)
Else
Call MsgBox("The fund " & FundID & " does not exist." & vbCrLf & "The macro will create it", vbOKOnly Or vbCritical, "Process Information")
'Sinon on en crée un nouveau
Set CheckXLS = Workbooks.Add
Call CheckXLS.SaveAs(FileName)
End If
End Function<hr />, ----
[../code.aspx?ID=41455 By Renfield]