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 processus Excel:Mémoire insuffisante


Sujet :

Macros et VBA Excel

  1. #21
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Peut être qu'il existe des solutions plus adaptées mais j'avoue que je suis à court d'idées...
    Tout dépend déjà si le classeur source est ouvert ou fermé.

    D'autre part, as-tu testé (j'insiste ) ce genre de chose?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sqlstring = "SELECT TOP 100 Agent, Article, Description, Ordre, St, `Dat Ouv Pl`," & _
                    " `Seq#`, Poste, `St#Op`, `Prep Prev`, `Ex#Prev`, `Deb# Plan`," & _
                    " `Fin plan`, `A réal#`, CID, `Dt Fin Réelle`, Msg, `Code Prep#`, `Qté Exe#`," & _
                    " `Code Coût`, `Description Séquence`, CLNG(LEFT(`Seq#`, 4)) as SEQUENCE," & _
                    " DatePart('WW', `Dt Fin Réelle`) as N_SEMAINE" & _
                    " FROM `Données_prod0051$`" & _
                    " WHERE (Article=" & articles_choisis & status_choisis & Condition_Fin_reelle

  2. #22
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Pour ma part, ayant beaucoup traité de requêtes SAP, j'ai toujours utilisé Excel pour les traitements. Il n'était pas rare d'avoir des fichiers de flux de plus de 300 000 enregistrements.

    En ce qui concerne la méthode, j'utilisais des fichiers de paramétrage pour la recherche et la mise en forme des données pour ne pas perdre de temps sur le formatage (1ère diapo jointe).

    Le fichier à traiter et le modèle sont définis dans une boite de dialogue (deuxième diapo).

    Dans la première Diapo, les colonnes occurrences correspondent à des noms de champ à géométrie variable dans SAP selon le nombre d'enregistrements remonté pour une même requête.

    Cordialement.

  3. #23
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Fantastique!

    Ta méthode issoram fonctionne parfaitement, l'incrémentation de la mémoire passe de 10MO à 1MO.
    Quel est le principe de TOP 100? Cela me transfère-t-il toutes les données?

  4. #24
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Et bien j'ai bien fait d'insister alors .
    TOP 100 récupère les 100 premières lignes de la requête. Sur le même principe tu peux tenter de charger tes données par bloc avec plusieurs MSQUERY (par blocs de 100 lignes ou 1000 lignes par exemple à toi de tester ce qui est optimal sur ton poste)...

  5. #25
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Je me suis un peu emporté.

    Effectivement la mémoire s'incrémente moins mais au final si je fait dix paquets de 100 enregistrements cela revient au même qu'un seul paquet de 1000 enregistrements.

    Je crois vraiment que c'est MSquery qui consomme trop.
    Je dois trouver une autre solution.

    Je pense à quelquechose comme ça:
    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
      Dim cn As New ADODB.Connection
      Dim rs As ADODB.Recordset
      Dim strSql As String
     
      With cn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source=D:\temp\Donnees_BO.xls" & _
            ";Extended Properties=""Excel 8.0;HDR=YES;"""
        .Open
      End With
     
      Set rs = New ADODB.Recordset
     
      strSql = "SELECT * FROM [Données_prod0051$]"
     
      rs.Open strSql, cn, adOpenKeyset
     
      'PLAGE EXCEL = TOUTES LES DATAS DU RECORDSET
     
      rs.Close
      cn.Close
      Set rs = Nothing
      Set cn = Nothing
    Ce que je n'arrive pas à faire, c'est extraite toutes les datas d'un seul bloc pour les insérer dans une feuille excel.

  6. #26
    Membre éprouvé Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Points : 929
    Points
    929
    Par défaut
    Effectivement la mémoire s'incrémente moins mais au final si je fait dix paquets de 100 enregistrements cela revient au même qu'un seul paquet de 1000 enregistrements.
    Même en adoptant cette syntaxe pour chaque requête?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set qtQtrResults = shFirstQtr.QueryTables.Add(...)
    qtQtrResults.Delete  'libère normalement la mémoire
    Sinon si tu préfères passer par ADO, tu peux utiliser la méthode getRows pour récupérer tes données : http://vb.developpez.com/bidou/recor...ordset#LVI-D-7

  7. #27
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2012
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 127
    Points : 105
    Points
    105
    Par défaut
    Je suis résigné.
    Quoique je fasse (méthode getrows, querytables...) la mémoire tampon s'incrémente toujours autant en fonction du nombre de données à importer.

    Pas de solution à mon problème je crois bien...

    Je testerai à l'occasion sur une version excel plus récente.

    Merci à tous pour votre aide.

  8. #28
    Membre chevronné
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 036
    Points : 1 917
    Points
    1 917
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par ninouchfis Voir le message
    Je suis résigné.
    Quoique je fasse (méthode getrows, querytables...) la mémoire tampon s'incrémente toujours autant en fonction du nombre de données à importer.

    Pas de solution à mon problème je crois bien...

    Je testerai à l'occasion sur une version excel plus récente.

    Merci à tous pour votre aide.
    Bonjour,
    as tu essayé la dernière réponse de Issoram?
    Le delete est es essentiel. Pour libérer la mémoire.
    Tu dois aller jusqu'à la destruction de l'objet connection du Fichier lui même.
    Ousmane


    Quand on tombe dans l'eau, la pluie ne fait plus peur.

Discussions similaires

  1. [XL-2007] Erreur exécution 7 : mémoire insuffisante sur un UserForm
    Par PaulG2B dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/08/2011, 08h18
  2. Réponses: 8
    Dernier message: 02/09/2009, 13h18
  3. Message d'erreur : "Mémoire insuffisante [..]"
    Par mcroz dans le forum Access
    Réponses: 8
    Dernier message: 01/03/2007, 17h14
  4. Erreur mémoire insuffisante
    Par jpp81 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/01/2007, 07h31
  5. message d'erreur "Mémoire insuffisante"
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 25/10/2005, 14h41

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