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 :

Lenteur dans l'initialisation de la valeur d'une cellule [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut Lenteur dans l'initialisation de la valeur d'une cellule
    Bonjour à tous,
    J'utilise un objet de type Collection (appelé C1 dans la suite) pour stocker et réaliser des traitements sur des valeurs numériques. Cet objet C1 contient environ 700 items, chacun de ces items étant constitués de 8 variables (2 de type Date, 6 de type Variant).
    J'ai un second objet de type Collection (appelé C2) qui contient 12 items C1
    Ainsi, je me retrouve avec 12 x 700 x 8 données à traiter et afficher dans une feuille.
    Le traitement se réalise en mémoire et est quasiment instantané.
    Par contre, l'affichage dans la feuille Excel 2007 est extremement long : 40 s.
    Le même algorithme d'affichage sous Excel 2003 ne prend que 15 s.

    Le code utilisé est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Cells(15 + k - 1, 1).Value = donneesHoraires.mDate
    Cells(15 + k - 1, 2).Value = donneesHoraires.mHeure
    Cells(15 + k - 1, 3).Value = donneesHoraires.mPuissanceAppelee0
    ....
    Avez vous une solution pour accélérer l'affichage des données ?
    Merci par avance pour votre aide

  2. #2
    Membre expérimenté Avatar de arosec
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Mai 2009
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 167
    Par défaut
    Bonsoir,

    Désactiver la mise à jour de l'écran si ce n'est pas déjà fait...

    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
     
    Sub test()
    On Error GoTo lblErr
     
      Application.ScreenUpdating = False
     
      'Reste du traitement...
     
      GoTo lblFin
     
    lblErr:
      MsgBox Err.Description
    lblFin:
      Application.ScreenUpdating = True
    End Sub
    Sinon, il faudrait peut être mettre le fichier en ligne pour approfondir cela...

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    La solution c'est je pense d'écrire tes données dans une variable tableau qui a la même taille que la plage concernée.
    Tu fais pareil, sauf qu'au lieu de , tu fais ENsuite tu copies en une fois le tableau dans la feuille. Si oRng représente la plage en question Cordialement,

    PGZ

  4. #4
    Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut
    @ PGZ
    Merci Pierre pour cette suggestion. N'étant pas un pro des tableaux, pourrais tu me donner un exemple qui placerait :
    - sur la 1ere ligne les données suivantes:
    • 12/05/2011; 00h10;10;12;13

    - sur la 2eme ligne les données suivantes:
    • 12/05/2011;00h20;10;11;15

    Merci par avance

    @ arosec
    J'ai déjà desactivé la mise à jour de l'écran ainsi que la calcul en automatique.
    Merci quand même

  5. #5
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Citation Envoyé par lemaslef Voir le message
    Merci Pierre pour cette suggestion. N'étant pas un pro des tableaux, pourrais tu me donner un exemple qui placerait :
    - sur la 1ere ligne les données suivantes:
    • 12/05/2011; 00h10;10;12;13

    - sur la 2eme ligne les données suivantes:
    • 12/05/2011;00h20;10;11;15

    Merci par avance
    Ton 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
    18
    19
    Dim v As Variant
     
    v = ThisWorkbook.Worksheets("Feuil1").Range("A1:E2").Value
     
    v(1, 1) = #5/12/2011#
    v(1, 2) = TimeValue("00:10:00")
    v(1, 3) = 10
    v(1, 4) = 12
    v(1, 5) = 13
    v(2, 1) = #5/12/2011#
    v(2, 2) = #12:20:00 AM#
    v(2, 3) = 10
    v(2, 4) = 11
    v(2, 5) = 15
     
     
    ThisWorkbook.Worksheets("Feuil1").Range("A1:E2").Value = v
     
    v = Empty
    Ormonth, que je salue, t'as proposé un tuto qui devrait t'intéresser!

    Cordialement,

    PGZ

  6. #6
    Candidat au Club
    Homme Profil pro
    Responsable de projet fonctionnel
    Inscrit en
    Mai 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de projet fonctionnel
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2011
    Messages : 3
    Par défaut [Résolu]
    Bonjour,

    Je tiens à remercier pgz et ormonth pour leur aide. La mise à jour des cellules en utilisant les tableaux ne prend plus que 15s.

  7. #7
    Expert confirmé
    Avatar de Didier Gonard
    Homme Profil pro
    Formateur Office et développeur VBA en freelance
    Inscrit en
    Février 2008
    Messages
    2 805
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur Office et développeur VBA en freelance

    Informations forums :
    Inscription : Février 2008
    Messages : 2 805
    Par défaut
    Bonjour,

    vois ce tutoriel pour les tableaux :

    Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel

    cordialement,

    Didier

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

Discussions similaires

  1. [XL-2007] Déplacer des lignes dans un autre onglet selon valeur d'une cellule
    Par Accessifiante dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/05/2014, 16h45
  2. [XL-2007] probléme dans le report de la valeur d'une cellule
    Par totau dans le forum Excel
    Réponses: 4
    Dernier message: 16/08/2012, 10h05
  3. [AC-2007] Afficher dans un champs Access la valeur d'une cellule Excel
    Par wolboitijo dans le forum Access
    Réponses: 1
    Dernier message: 12/02/2010, 10h27
  4. Réponses: 4
    Dernier message: 11/04/2007, 16h03
  5. Réponses: 5
    Dernier message: 06/04/2007, 14h05

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