Améliorer le code

Bonjour,

Je dois m'assurer de la présence d'un fichier csv ouvert avant de convertir le csv en Excel.

Le fichier csv contient un indice monfichier(x).csv. Si je trouve un fichier ouvert avec l'indice je poursuis mon traitement sinon je teste l'indice suivant et actuellement au bout de 6 je mets un message d'erreur et je sors.

Je souhaiterai aller au delà de 6 sans avoir un gros pavé de lignes comme actuellement.

Pouvez vous m'apporter votre aide ?

Voici le code actuel :

On Error Resume Next
'-----------------------------------------------------------------
'Positionnement sur la fenêtre du fichier csv jusqu'à (6).csv au cas où
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (1).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (2).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (3).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (4).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (5).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (6).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
MsgBox "Fichier csv non ouvert ouvrez le fichier et relancez la macro"
Windows(MonFichierMacro).Close
GoTo finpgm
End If
End If
End If
End If
End If
End If
End If
'Convertion des données

Edit : merci de mettre le code entre balises grâce au bouton </>

Bonjour Kristof44

Normalement, tu ne devrais pas avoir besoin de ".Activate"

Comment ouvres-tu ton fichier CSV, quelle est/sont la/les ligne(s) de code

@+

On Error Resume Next
'-----------------------------------------------------------------
'Positionnement sur la fenêtre du fichier csv jusqu'à (6).csv au cas où
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (1).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (2).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (3).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (4).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (5).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
Err.Number = 0
MonFichierCsv = MonFichier & " (6).csv"
Windows(MonFichierCsv).Activate
If Err.Number <> 0 Then
MsgBox "Fichier csv non ouvert ouvrez le fichier et relancez la macro"
Windows(MonFichierMacro).Close
GoTo finpgm
End If
End If
End If
End If
End If
End If
End If
'Convertion des données

Bonjour

Le fichier csv est ouvert par l'utilisateur suite à un export de donnée. (non ouvert via VBA)

L'utilisateur ouvre ensuite un fichier Excel contenant une macro qui effectue la conversion csv => Excel.

Désolé pour le code ... je n'avais pas vu le bouton </> pour l'inclure.

Merci pour cotre réponse.

Re,

Dans ce cas, à tester

On Error Resume Next
'-----------------------------------------------------------------
'Positionnement sur la fenêtre du fichier csv jusqu'à (6).csv au cas où
Dim Ind As Integer
For Ind = 1 To 6
  MonFichierCsv = MonFichier & " (" & Ind & ").csv"
  Windows(MonFichierCsv).Activate
  If Err.Number = 0 Then Exit For
Next Ind
If Err.Number <> 0 Then
  MsgBox "Fichier csv non ouvert ouvrez le fichier et relancez la macro"
  Windows(MonFichierMacro).Close
  GoTo finpgm
End If

@BrunoM45

Merci de t'être penché sur mon problème.

Avec ton code, j'avais toujours le message d'erreur malgré la présence du fichier ouvert.

J'ai alors intégré une remise à 0 pour err.num dans la boucle For et ... ça marche.

    Dim Ind As Integer
    For Ind = 1 To 10
        Err.Number = 0
        MonFichierCsv = MonFichier & " (" & Ind & ").csv"
        Windows(MonFichierCsv).Activate
        If Err.Number = 0 Then Exit For
    Next Ind
    If Err.Number <> 0 Then
        MsgBox MonFichierCsv & "Fichier csv non ouvert ouvrez le fichier et relancez la macro"
        Windows(MonFichierMacro).Close
    GoTo finpgm
    End If

Merci beaucoupet pour la solution

Re,

Effectivement, j'avais zappé le réinit, le plus propre (côté développeur) c'est

Err.Clear

@+

Rechercher des sujets similaires à "ameliorer code"