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

  1. #1
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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 éclairé 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
    Points : 758
    Points
    758
    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
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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 éclairé 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
    Points : 758
    Points
    758
    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
    Points : 4 299
    Points
    4 299
    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 ?

  6. #6
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    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
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    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
    Points : 5 901
    Points
    5 901
    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 ?

  9. #9
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Bonjour parmi,
    Je travaille avec des fichiers XLSM (Excel 2010 sous Windows 7) car j'ai justement besoin de traiter des gros fichiers de données (115000 lignes).
    Donc la limite des 65536 lignes doit sauter.

  10. #10
    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
    Points : 5 901
    Points
    5 901
    Par défaut
    Workbooks(NomXls) est un fichier xlsm ?

    Plutôt étonnant de voir que ça plante toujours à 65536 lignes qui est justement le nombre de lignes d'un xls...

  11. #11
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Bonjour parmi,
    NomXLs est une variable paramètre qui contient bien le nom d'un classeur Excel avec l'extension ".xlsm"
    Et oui, cela est très étonnant que cela plante à cette 65536ème ligne... D'autant plus que j'ai porté cette macro Excel de 2003 à 2010 pour justement pouvoir gérer des gros fichiers de plus de 65536 lignes. C'est à n'y rien comprendre. J'en perds mon latin, heu mon VBA Excel

  12. #12
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut


    D'où l'explication de la limite de 65 536 lignes de la version 2003 !

    Bon ben c'est simple :
    création d'un nouveau classeur à partir de la version 2010 en .xlsb ou .xlsm via Enregistrer sous


    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  13. #13
    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
    Points : 4 299
    Points
    4 299
    Par défaut
    Si tu fais un simple

    Est-ce que ça te renvoie aussi la même erreur ?

    D'ailleurs, c'est bizarre car normalement l'erreur 1004 n'est pas un dépassement de capacité

  14. #14
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    bonjour,


    enlève la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo Err_Execute
    et dis nous sur qu'elle ligne à lieu l'erreur...

  15. #15
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Bonjour Marc-L,

    Effectivement, j'avais bien créer mon fichier XLSM en partant de mon fichier XLS 2003 puis j'ai fais un Enregistrer sous. Ce qui est étrange c'est qu'en faisant comme cela j'avais bien la limite de 1 048 576 lignes dnas chaque onglet, mais bon.
    Du coup, j'ai créé un nouveau classeur XLSM 2010, puis j'ai récupéré tous mes onglets et macros par copier/coller. J'ai relancé ma macro, mais hélas j'ai exactement la même erreur sur la même ligne

  16. #16
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par iriben Voir le message
    ...mais hélas j'ai exactement la même erreur sur la même ligne
    j'ai beau relire je ne vois pas ou tu indique la ligne de code qui est provoque ton message d'erreur ...

  17. #17
    Expert éminent sénior
    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
    Points : 18 674
    Points
    18 674
    Par défaut



    iriben, ne pas repartir de l'original mais bien d'un classeur vierge ‼

  18. #18
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Quand je parle de cette ligne, je ne parle pas de la ligne de code, mais de la 65536ème ligne traitée dans mon fichier source.

    J'ai lancé un test en enlevant le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    On Error GoTo Err_Execute
    et j'ai eu l'erreur "Run-time error '9': Subscript out of range" et quand je clique sur le bouton "Debugg", la macro pointe sur une ligne de code extérieure à ma fonction ChargeDatas.
    Par contre, étant en mode debugg, j'ai pu aller voir la tête de mon onglet qui doit recevoir les données, et il n'y a que 65536 lignes dans cet onglet !!!!! En regardant le nom de mon fichier Excel, il est bien en .XLSM mais avec la mention [Mode Compatibilité] !!!! Cela doit venir de là.
    En fait, j'ai une procédure de gestion de report qui utilises des modèles Excel, (en l'occurence un modèlme XLSM) et je fais un SaveAs sous un autre nom. J'ai dû mal écrire cette procédure SaveAs pour que mon fichier final soit un XLSM 2010 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.SaveAs Filename:=NomXls, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
    ActiveWorkbook étant mon modèle Excel que je viens d'ouvrir
    NomXls étant une variable contenant le chemin, le nom et l'extension ".xlsm" de mon fichier final

  19. #19
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    On en est au même point tu ne nous as toujours pas montré la ligne de code qui est la code de ton erreur !

    Citation Envoyé par iriben Voir le message
    ... et quand je clique sur le bouton "Debugg", la macro pointe sur une ligne de code extérieure à ma fonction ChargeDatas....

  20. #20
    Futur Membre du Club
    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
    Points : 6
    Points
    6
    Par défaut
    Excuses moi pour cet oubli, voilà la ligne en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks(NomXls).Sheets(NomOngl).Cells(LILIG + LigDebData, LICOL) = Cells(LILIG + 1, LICOL)
    mais je ne suis pas sur que cela t'aide car à ce stade Excel n'arrive pas à écrire sur la ligne 65537. A juste titre car l'onglet en question n'en possède que 65536.
    J'ai d'ailleurs trouvé le pb depuis, et c'est grâce à vous tous d'ailleurs, merci à tous. En me mettant sur des pistes, j'ai trouvé la source du pb : comme vous avez pu le constater, ma procédure a été portée de 2003 vers 2010, et j'ouvre un modèle Excel qui me sert de base de travail. Et bien figurez vous que j'ai mal paramétré ma nouvelle procédure en 2010 puisque j'ouvrais toujours le modèle Excel de 2003 !!! Une erreur de débutant vous me direz, mais bon....
    Encore merci à tous

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/06/2014, 16h55
  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, 19h00
  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, 15h47
  4. Réponses: 1
    Dernier message: 20/02/2010, 09h03
  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, 20h49

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