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 :

Problème comptabilité 2003/2010 + Optimisation de code [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut Problème comptabilité 2003/2010 + Optimisation de code
    Bonjour, je développe sous excel 2003 une macro opérant des tout un tas de chose sur des fichiers textes.
    Je les importe donc sur excel, jusque là, pas de problème.

    Cependant, migration futur sous 2010 qui s'annonce, je rencontre des difficultés. Certains paramètres ne semble plus être pris en compte sous 2010, surement des variable à changer mais je n'y arrive pas.

    Voici le code:

    Code vb : 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    Public Sub ChargementFichiers()
     
        Dim monClasseur As String
        Dim TempClasseur As String
        monClasseur = ActiveWorkbook.Name
     
        'Copie des tableaux de reference dans le classeur
        Workbooks.OpenText Filename:= _
            TraitImpPp.Range("ImportEs").Value _
            , Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _
            Array(Array(0, 1), Array(3, 1), Array(12, 1), Array(25, 1)), TrailingMinusNumbers:= _
            True
        TempClasseur = ActiveWorkbook.Name
        [surligner]Sheets("es").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(2)[/surligner]
        Workbooks(TempClasseur).Close
        Rows("1:1").Insert Shift:=xlDown
        Range("A1") = "Societe"
        Range("B1") = "Matricule"
       Range("C1") = "Date de début"
        Range("D1") = "Date de fin"
     
        Workbooks.OpenText Filename:= _
            TraitImpPp.Range("Import4k").Value _
            , Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _
            Array(Array(0, 1), Array(9, 1), Array(52, 1), Array(82, 1), Array(93, 1), Array(113, 1), _
            Array(131, 1), Array(141, 1), Array(145, 1)), TrailingMinusNumbers:=True
        TempClasseur = ActiveWorkbook.Name
       [surligner]Sheets("4k").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(3)[/surligner]
        Workbooks(TempClasseur).Close
        Rows("1:1").Insert Shift:=xlDown
        Range("A1") = "Matricule"
        Range("B1") = "Nom"
        Range("C1") = "Prenom"
        Range("D1") = "Lib1"
        Range("E1") = "Lib2"
        Range("F1") = "Date de début"
        Range("G1") = "Date de fin"
        Range("H1") = "Calc"
     
        Workbooks.OpenText Filename:= _
            TraitImpPp.Range("ImportVk").Value _
            , Origin:=xlMSDOS, StartRow:=1, DataType:=xlFixedWidth, FieldInfo:= _
            Array(Array(0, 1), Array(9, 1), Array(52, 1), Array(82, 1), Array(87, 1), Array(104, 1), _
            Array(123, 1), Array(146, 1), Array(156, 1), Array(160, 1)), TrailingMinusNumbers:= _
            True
        TempClasseur = ActiveWorkbook.Name
        [surligner]Sheets("vk").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(4)[/surligner]
        ....
    ...
    End Sub

    Sous 2010 ça m'indique comme erreur que mon classeur temporaire est trop grand pour être déplacé, et d'autres fois que l'indice n'appartient pas à la sélection ... Alors que ça marche parfaitement sous 2003.

    Deuxième soucis, ma macro mets plus de 8 minutes à s'éxecuter, ce qui est du à un test que je fais sur une des colonnes de mon fichier comportant plus de 45.000 lignes, comparaison et addition de valeurs par rapport à une autre: =SI(SOMME.SI(A:A;A2;I:I)=100;"";"ano") ). Je dois vérifir que pour un id connu, la somme de ses itération en colonne I soit 100, sinon c'est une anomalie.

    Merci de votre aide !

    Cordialement, arkhang.

  2. #2
    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
    Bonjour,

    Je ne suis pas absolument certain puisque je ne connais pas tes fichiers, mais je pense que c'est dû au nombre de lignes différent entre les versions xls (65536) et xlsx ou xlsm (1048576)
    Comme tu copies l'onglet d'un fichier xls dans un xlsm, je présume, le nombre de lignes n'est pas compatible...

    Pour ta formule, ça peut dépendre comment tu l'inscris (?)

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut
    Bonjour,

    Le fichier qui plante comporte environ 40 000 lignes, testant ma macro sous 2010, mon classeur de base est en xls, mais celui de 40k que j'ouvre via ma macro s'ouvre en xlsx ... Pourtant ne faisant pas plus de 65k de lignes, pourquoi me mettre ce type d'erreur ?

  4. #4
    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,

    un code bien conçu sous 2003 passe sans souci dans les versions ultérieures à plus de 90% …

    Un message d'erreur n'apporte pas grand chose sans savoir quelle ligne déclenche cette erreur !

    Donc suivre le code en mode pas à pas via la touche F8 et/ou en plaçant un point d'arrêt
    tout en vérifiant le contenu des variables soit directement en les pointant dans le code
    soit via la fenêtre des Variables locales

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 84
    Par défaut
    Bonjour Marc,

    j'avais surligner dans le code énoncé plus tôt, mais il semblerait que ça ne fonctionne pas.

    Voici où ça plante:

    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
     
    Public Sub ChargementFichiers()
     
        ...
        ...
        Sheets("es").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(2)
        ...
        ...
        ....
       Sheets("4k").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(3)
       ...
       ...
       ...
        Sheets("vk").Copy Before:=Workbooks("ControleImputationAvantPaye.xls").Sheets(4)
        ....
        ...
    End Sub
    C'est le copiage de la nouvelle feuille ouverte vers le classeur source qui semble planter

  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

    Commencer une ligne par « Sheets("es"). » veut dire que cette feuille (et mieux vaut utiliser Worksheets …)
    se trouve dans le classeur actif et, si ce n'est pas le cas, la feuille n'est donc pas trouvée, d'où l'erreur !

    Donc mieux vaut préciser le classeur avant la feuille …

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

Discussions similaires

  1. [XL-2010] Problème compatibilité excel 2003-2010
    Par bbcancer dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/10/2012, 16h32
  2. ClassFileSearch: Correspondance du code 2003->2010
    Par Zadic dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/05/2012, 08h50
  3. [XL-2010] problème compatibilité 2003 vers 2010
    Par goldfinger13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/04/2012, 01h20
  4. Réponses: 2
    Dernier message: 26/07/2011, 09h19

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