Problème import fichier dans une procédure VBA

Bonjour,

J'ai besoin de vos lumières car je tourne en rond sur un fichier permettant d'analyser un fichier FEC de comptabilité importé.

Je ne suis pas suffisamment à l'aise sur VBA pour me débrouiller tout seul.

Ci-dessous ma procédure :

Public Sub ImporterFEC()
    Dim sPath As String
    Dim fd    As FileDialog

    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    With fd
        .Title = "Selectionnez votre fichier FEC (DGFiP)"
        .Filters.Clear
        .Filters.Add "Fichiers FEC", "*.txt;*.csv;*.tsv"
        .Filters.Add "Tous fichiers", "*.*"
        .AllowMultiSelect = False
        If .Show <> -1 Then Exit Sub
        sPath = .SelectedItems(1)
    End With

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.StatusBar = "Lecture du FEC..."

    On Error GoTo ErrImport

    Call LireFEC(sPath)
    Application.StatusBar = "Calcul de la balance..."
    Call CalculerBalance
    Application.StatusBar = "Generation du bilan..."
    Call GenererBilan
    Application.StatusBar = "Generation du compte de resultat..."
    Call GenererCR
    Application.StatusBar = "Calcul des ratios..."
    Call CalculerRatios
    Application.StatusBar = "Audit qualite..."
    Call AuditFEC
    Application.StatusBar = "Finalisation..."
    Call MettreAJourAccueil

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.StatusBar = False
    Sheets(SH_ACCUEIL).Activate

    MsgBox "Analyse terminee avec succes !" & vbCrLf & vbCrLf & _
           "Consultez les onglets BILAN, CR, RATIOS et AUDIT.", _
           vbInformation, "FEC Analyseur"
    Exit Sub

ErrImport:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.StatusBar = False
    MsgBox "Erreur lors de l import :" & vbCrLf & _
           Err.Description & vbCrLf & vbCrLf & _
           "Verifiez que le fichier est un FEC DGFiP valide.", _
           vbCritical, "FEC Analyseur - Erreur"
End Sub

Lorsque j'essaye d'importer le fichier, excel me renvoie un code erreur "argument ou appel de procédure incorrect - Vérifiez que le fichier est un FEC DGFIP valide".

Le fichier est bien valide mais je n'arrive pas à passer cette étape.

Quelqu'un aurait-il la solution ?

Merci.

Marnie

Bonsoir,

la première partie du texte erreur est la partie "automatique du système" : argument ou appel de procédure incorrect

Un appel de procédure provoque une erreur, je pencherais pour le premier : Call LireFEC(sPath)
Call permet d'appeler une procédure VBA me semble-t-il. N'ayant pas le code VBA des différentes procédure appelées, on ne peut vous aider plus, à moins que je me trompe complètement...

L'erreur dit que la procédure LireFEC(sPath) n'existe pas donc une erreur lors d el'appel.

@ bientôt

LouReeD

Merci pour votre réponse. Je crois comprendre que je n’ai pas mis assez d’info…

Du coup vous avez besoin du code entier ? Du fichier Excel (il n’est pas personnalisé pour le moment) ?

Cdt. Marnie

Le fichier c'est bien ! Surtout s'il y a toutes les procédures appelées par les "Call"...

@ bientôt

LouReeD

Bonjour tout le monde,

Déjà on a une erreur dans le peu de code proposé :
Lire :

Sheets("SH_ACCUEIL").Activate

au lieu de :

Sheets(SH_ACCUEIL).Activate

Mais comme l'erreur est en amont, il nous faudrait au moins la procédure LireFEC() pour commencer. On verra par la suite.

Bonjour,

Voici le fichier ainsi qu'un FEC démo pour que vous voyiez. Encore merci pour vos interventions. Marine

Salut Optimix,

Déjà on a une erreur dans le peu de code proposé :

Lire :

Sheets("SH_ACCUEIL").Activate

au lieu de :

Sheets(SH_ACCUEIL).Activate

Non pas d'erreur, puisqu'il y a une déclaration de constante (on ne savait pas avant d'avoir le fichier)

Const SH_ACCUEIL  As String = "ACCUEIL"

Sinon pourquoi ne pas utiliser ce simple code

Sub LireFEC(sPath As String)
  On Error GoTo ErrLire  ' ? remplace le gestionnaire global
  Dim ws    As Worksheet
  Dim WbTxt As Workbook

  Set ws = Sheets(SH_FEC)
  ' Effacer donnees existantes en gardant les en-tetes (ligne 1)
  Dim lastExist As Long
  lastExist = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
  If lastExist > 1 Then
      ws.Range("A2:R" & lastExist).ClearContents
      ws.Range("A2:R" & lastExist).Interior.ColorIndex = xlNone
  End If
  ' Ouvrir le fichier texte comme un fichier Excel
  Workbooks.OpenText Filename:=sPath, Origin:=65001, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=False, Other:=False, TrailingMinusNumbers:=True
  Set WbTxt = ActiveWorkbook
  WbTxt.Sheets(1).Range([A2], ActiveCell.SpecialCells(xlLastCell)).Copy
  ws.Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
  ' Fermer le fichier
  Application.DisplayAlerts = False
  WbTxt.Close SaveChanges:=False
  Application.DisplayAlerts = True
  Exit Sub

ErrLire:
    MsgBox "Erreur " & Err.Number & " à la ligne : " & Erl & vbCrLf & Err.Description, vbCritical
End Sub

Plutôt qu'une usine à gaz

Bonsoir,

Merci pour votre retour. Cette procédure est effectivement beaucoup plus simple toutefois, en mettant un point d'arrêt après l'appel de la procédure LireFEC, le fichier n'est pas importé dans l'onglet FEC_BRUT ce qui fait que l'erreur persiste.

J'ai essayé d'avancer autrement en important manuellement le fichier FEC et en lançant la procédure ImporterFEC alors mes données ne sont pas effacées et procédure continue jusqu'à GenererBilan où j'ai un nouvel arrêt... mais ça c'est une autre histoire.

Voilà où j'en suis. Si quelqu'un a une idée ?

Bonsoir,

en mettant en "veille" les gestions d'erreur on découvre qu'elles sont produite lors des mises en formes des données numériques : remplacement virgule par point, suppression des espaces, des espaces insécable etc.... J'ai commenté également certaines ligne de mise en forme de cellules : pas utile il suffit de le faire directement sur la feuille et la donnée inscrite sera mise en forme...

Sans supprimer des lignes, j'ai tout mis en commentaire : ajout d'une apostrophe en début de ligne.

Le fichier va à "terme" avec le fichier texte fourni, certain caractère "spéciaux" ne sont pas modifiés mais cela reste marginale.

Le fichier :

A vous de voir si le résultat est cohérent.

@ bientôt

LouReeD

Bonjour,

Il faut aussi revoir la ligne d'affichage du nom de fichier importé... petit oubli de ma part.

@ bientôt

LouReeD

Bonjour,

Devons nous comprendre que le problème est résolu ?

@ bientôt

LouReeD

Désolé je n’ai pas encore eu le temps de me remettre sur le fichier… je vous dis ça dans le week end et je vous remercie pour votre aide en tout cas

bonjour,

J'ai enfin pu me remettre sur le projet : merci LouReed pour les corrections apportés sur le fichier car l'import et le traitement fonctionnent parfaitement et sans votre aide je ne suis pas sur d'avoir pu résoudre le problème !
Bon maintenant je vais m'atteler à la correction des innombrables erreurs de calcul/reports des chiffres dans le bilan et le compte de résultat et à la résolution du problème d'effacement des données qui me fait une erreur.

J'espère pouvoir arriver à un résultat correct avant d'avoir fini ma période fiscale pour pouvoir exploiter le fichier dans mon activité (c'était le but à la base...) : je vous tiens au courant !

Merci également à JExceL2fr et Optimix pour leur contribution.

Marnie

Bonjour,

Merci de votre retour et de vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "probleme import fichier procedure vba"