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 :

xlsb. Extraction fichier spool. For imbriqués à optimiser [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut xlsb. Extraction fichier spool. For imbriqués à optimiser
    Bonjour,

    Avant tout pardon par mon français parce que je le parle depuis quelque temps.
    Je vous écris pour voir si la macro que j'ai fait peut être amelioré ou s'elle est bien comme ça.

    En effet, il s'agit d'une macro d'extraction de deux fichiers spool depuis SAP. Après sucesives traitements de fichiers j'obtiens des listes des données numeriques. Une colonne materiaux (numeros et lettres) et pleussieurs colonnes avec des données numeriques.
    Ma macro tourne dans moins de 20' sauf quand le fichiers ont plus de 2000 lignes. Elle peu tarder 3 ou 6 minutes pour s'executer (10000 lignes).
    C'est au moment d'executer ces For imbriqués, (regarder ci-dessous) qu'elle prends plus de temps:

    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
    'Formule que va chercher les données DLigneA; pour les croise avec les données (non uniques) de DLigneN dans Range= N et donner un resultat.
     
    DLigneA = Range("A1000000").End(xlUp).Row
    DLigneN = Range("N1000000").End(xlUp).Row
     
      For Op = 1 To DLigneA Step 1
        For P = DLigneN To 1 Step -1
            If Cells(Op, 1) = Cells(P, 12) Then
                Cells(Op, 11).Value = Cells(P, 14).Value
                Cells(Op, 10).Value = Cells(P, 13).Value
                Exit For
            End If
     
        Next P
      Next Op
    Pourriez vous m'indiquer soit:
    - une façon alternative pour executer cette formule et qu'elle prends pas beaucoup de temps.
    - soit, qu'elle est bien et que c'est normal le temps qu'elle prends.


    J'espère vous avoir donnée tous les données qu'il faut. N'hesite pas à me demander plus d'information.
    Merci d'avance.
    Victoria

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

    avant d'envisager de traiter les données par variables tableau (molto veloce !),
    commencer par désactiver avant la boucle l'affichage de l'écran via la propriété ScreenUpdating (voir l'aide intégrée au VBA) …

    __________________________________________________________________________________________

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

  3. #3
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut
    Bonjour Marc_L,

    Merci pour la souggestion mais j'avais déjà declaré.
    De toutes façons j'ai essayé en mettant Screen Updating après la declaration de DLigneN et pour l'instant elle continue a rouler lent.

    Cordialement,
    Victoria

  4. #4
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ou encore utiliser la méthode find au lieu des 2 boucles

    Exemple
    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
    Sub Traitement()
    Dim DLigneA As Long, Op As Long
    Dim c As Range
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil2")                        'à adapter
        DLigneA = .Cells(.Rows.Count, 1).End(xlUp).Row
        For Op = 1 To DLigneA
            Set c = .Range("N:N").Find(.Cells(Op, 1), LookIn:=xlValues, lookat:=xlWhole, SearchDirection:=xlPrevious)
            If Not c Is Nothing Then
                .Cells(Op, 10).Value = c.Value
                .Cells(Op, 11).Value = c.Offset(, 1).Value
                Set c = Nothing
            End If
        Next Op
    End With
    End Sub

  5. #5
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut
    Bonjour,

    Pour l'instant je n'ai pas reussi à la faire marcher correctement. Mais j'y suis.
    Je vous previendrai des que je reussi. Au moins dans l'execution ça marche plus vite

  6. #6
    Membre confirmé
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2013
    Messages : 50
    Par défaut Merci j'ai reussi à la faire fonctionner
    ça marche! Merci beaucoup!

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

Discussions similaires

  1. extraction fichier
    Par Seb4657 dans le forum Langage
    Réponses: 18
    Dernier message: 12/01/2006, 19h19
  2. Modifier un fichier spool d'impression
    Par Jluck dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 05/10/2005, 17h56
  3. Fichier spool avec date
    Par Jean-Matt dans le forum Oracle
    Réponses: 2
    Dernier message: 10/05/2005, 13h12
  4. contenu d'un fichier "spool"
    Par Tonio20 dans le forum Oracle
    Réponses: 4
    Dernier message: 22/02/2005, 12h03
  5. Récupérer le nom du fichier spool correspondant à un job
    Par chtiot dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 23/02/2004, 20h28

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