IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 : Application-defined or object-defined error [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Erreur 1004 : Application-defined or object-defined error
    Bonjour,

    J'ai écrit une fonction ChargeDatas (ci-dessous) qui doit charger différents type de fichiers "à plat" dans différents fichier/onglets/cellules. Et qui me retourne le n° de la dernière ligne lue car je m'en sert plus tard pour la mise en forme.
    Lors de l'éxécution de cette fonction, je n'ai aucun pb sur un petit fichier (moins de 65536 lignes), mais sur un gros fichier (115000 lignes), j'ai l'erreur "1004 : Application-defined or object-defined error" dans ma fonction. Et bien sûr le pb survient lors du traitement de la 65536ème ligne.... comme par hasard.
    J'ai pourtant tout défini en Long, mais ça ne veut pas passer. Et à force de chercher j'ai les yeux qui se croisent...
    Si quelqu'un veut bien m'aider.
    Merci d'avance.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Function ChargeDatas(Repert as String, NomFic as String, NomOngl as String, LigDebData as Long, ColMax as Long) As Long
     
        Dim LILIG As Long
        Dim LICOL As Long
     
        On Error GoTo Err_Execute
        ChargeDatas = -1
        Application.CutCopyMode = False
        Workbooks.OpenText Filename:=Repert & NomFic, _
                Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= xlNone, ConsecutiveDelimiter:=False, _
                Tab:=False, Semicolon:=True, Comma:=False, Space:=False, Other:=False, DecimalSeparator:=",", TrailingMinusNumbers:=True
        LILIG = 0
        If ColMax = 0 Then ColMax = 255
        Do While Not IsEmpty(Cells(LILIG + 1, 1))
            For LICOL = 1 To ColMax
                Workbooks(NomXls).Sheets(NomOngl).Cells(LILIG + LigDebData, LICOL) = Cells(LILIG + 1, LICOL)
            Next
            LILIG = LILIG + 1
        Loop
        Workbooks(NomFic).Close SaveChanges:=False
        ChargeDatas = LILIG
        Exit Function
     
    Err_Execute:
        Call ModuleCommun.WriLog("A", "===> Erreur Chargement données : " & Err.Number & " : " & Err.Description)
     
    End Function

  2. #2
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Bonjour

    N'hésite pas a Utiliser les balises désigné par # pour poster du code, ça ne le rend que plus lisible

    Essaie de déclarer en Single pour voir ?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Désolé pour les balises, c'est la 1ère fois que je poste. D'ailleurs y-a-til un endroit où l'utilisation de ces balises est expliquée ?

    Sinon, j'ai essayé avec Single au lieu de Long, et j'ai le même message d'erreur à la même ligne

    Ben.

  4. #4
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Et bien, je pense que tu peux editer ton premier post comme il suit :
    Ecris [CODE ] devant le début de ton code et [/CODE ] après la dernière ligne de ton code (En enlevant les espaces que j'ai mis avant ])

    Ensuite, et bien mes compétences sont assez limités, donc je ne saurais dire d'ou vient l'erreur.

    Je vois que tu fais du traitement Ligne par Ligne sur un/des classeurs,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For LICOL = 1 To ColMax
    Workbooks(NomXls).Sheets(NomOngl).Cells(LILIG + LigDebData, LICOL) = Cells(LILIG + 1, LICOL)
    Next
    Je ne saurais trop de conseiller de passer par un tableau, tu va gagner énormément en temps d’exécution. Et tu vas peut être même contourner l'erreur.
    Pour te renseigner, tu peux trouver un superbe tutoriel ici

    Sinon, et bien je pense que nous pouvons attendre qu'un membre chevronné vienne faire un tour sur ce post

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    Essaye de voir ici :

    http://silkyroad.developpez.com/VBA/LesVariables/#LII-D

    Tu trouveras peut-être un élément de réponse

    Je n'ai pas l'impression que ça vienne des variables car un long peut aller jusqu'à 2 147 483 647 (voir lien ci-dessus)

    Etant donné que tu utilises Excel 2010 ça devrait marcher.


    Par contre, il y a des variables dont on ne connait pas la valeur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(NomXls).Sheets(NomOngl).Cells(LILIG + LigDebData, LICOL) = Cells(LILIG + 1, LICOL)
    Que vaut LILIG quand ça plante ?
    Que vaut LigDebData ? A priori c'est une variable de ta fonction, mais on ne sait pas à quoi ça correspond...
    Que vaut LICOL ?
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour, bonjour !

    Pour les balises de code, c'est pourtant expliqué dans les règles de ce forum !
    Et rien qu'en regardant les icônes lors de la rédaction du post …

    Serait-ce trop demander de préciser la ligne en erreur ou faudrait-il recourir aux services d'une voyante ?!

  7. #7
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Bonjour illight,

    Lorsque cela plante, LILIG vaut 65536, désolé de ne pas avoir été plus clair dans mon 1er post.
    Ensuite j'appelle cette fonction de cette façon (LiRet étant elle aussi définie en Long) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LiRet = ChargeDatas(CheminTxt, NomTxt & ".INDICES.txt", "DATA_BRUTES", 2, 22)
    Donc LigDebData vaut 2 et LICOL va de 1 à 22


    Bonjour Marc-L,

    Tout d'abord, merci pour cet accueil chaleureux...
    Pour les balises, je me répète mais c'est la 1ere fois que je poste sur un forum quelqu'il soit, donc désolé encore de ne pas avoir eu un reflexe qui parait évident chez vous. Avez-vous vu que j'ai réussi à utiliser la balise CODE lors de mon précédent poste ? En progrès, yesssss.
    Pour la ligne de code qui plante, je ne sais pas laquelle c'est, car Excel me dit juste Erreur 1004. C'est bien pour cela que je fais appel à ce forum qui contient j'en suis sûr des experts confirmé qui n'auront pas besoin de voyante pour m'aider.

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(NomXls).Sheets(NomOngl).Cells(LILIG + LigDebData, LICOL) = Cells(LILIG + 1, LICOL)
    J'imagine que tu travailles avec des fichiers xls (mais je peux me tromper...)
    Si LILIG = 65536 et que tu additionnes LigDebData, ça doit dépasser le nombre total de lignes, non ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2014, 15h55
  2. [XL-2010] Run time error 1004 Application defined or object defined
    Par AmbreM dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/09/2013, 18h00
  3. Debug fonctionne après erreur "application defined or object defined"
    Par Isabelle86 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/07/2011, 14h47
  4. Réponses: 1
    Dernier message: 20/02/2010, 08h03
  5. [XL-2003] Error 1004 - Application-defined or object-defined
    Par DaRisK dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/05/2009, 19h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo