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 d'une boucle For each next


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
    Controlling & BI
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Controlling & BI
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut Lenteur d'une boucle For each next
    Bonjour,

    j'ai un problème avec une boucle, elle marche bien mais est particulièrement lente. Je pense que c'est la syntaxe for each...next.
    Je travaille sur un fichier avec 50 onglets et aurais besoin d'un code qui marche vite:

    Voici mon essai:

    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
    Sub SupprCells()
     
    Dim vcell As Variant
    Application.ScreenUpdating = False
    Dim i As Byte
     
    For i = 5 To ActiveWorkbook.Sheets.Count
    ActiveWorkbook.Sheets(i).Select
    Range(Cells(6, 4), Cells(87, 41)).Select
    For Each vcell In Selection
    If vcell.HasFormula = False And IsNumeric(vcell) = True Then
    vcell.ClearContents
    End If
    Next
    Next
    End Sub
    Merci de votre aide!

  2. #2
    Membre éprouvé
    Inscrit en
    Mai 2011
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 85
    Par défaut
    Tu peux ajouter Application.screenupdating=false au début et Application.screenupdating=true. Normalement ça gagne pas mal de temps.

    Après je pense que tu peux gagner du temps en définissant une plage et en faisant for each vcell in plage plutôt que de selectionner à chaque fois la plage. Parce que la selection fait perdre du temps d'après mes souvenirs.

  3. #3
    Invité
    Invité(e)
    Par défaut
    En général il faut éviter tout appel à la fonction '.Select' car elle est dans la plupart des cas inutile.

    Est-ce que ce code est plus rapide ?
    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
    Option Explicit
     
    Private Sub SupprCells()
    Dim rngCell As Range
    Dim i As Long
     
        Application.ScreenUpdating = False
     
        For i = 5 To ActiveWorkbook.Sheets.Count
            With ActiveWorkbook.Sheets(i)
                For Each rngCell In .Range(.Cells(6, 4), .Cells(87, 41))
                    If rngCell.HasFormula = False And IsNumeric(rngCell) = True Then
                        rngCell.ClearContents
                    End If
                Next rngCell
            End With
        Next
     
    End Sub

  4. #4
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    hello,

    ca devrait accelerer

    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 SupprCells()
     
    	Dim vcell As Variant
    	Application.ScreenUpdating = False
    	Dim i As Byte
     
    		For i = 5 To ActiveWorkbook.Sheets.Count
    			For Each vcell In ActiveWorkbook.Sheets(i).Range(Cells(6, 4), Cells(87, 41))
    				If vcell.HasFormula = False And IsNumeric(vcell) = True Then
    					vcell.ClearContents
    				End If
    			Next
    		Next
    Application.ScreenUpdating = true
    End Sub

  5. #5
    Membre confirmé
    Femme Profil pro
    Controlling & BI
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Controlling & BI
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut Lenteur boucle for each next
    Merci pour vos réponses.
    La proposition de vcottineau ne change rien, l'ordi plante, celle d'Ashireon blocke sur la ligne 8...
    Ce qui est étonnant c'est que, bien que l'ordi n'est pas le plus rapide, il exécute des macros très longues et complexes et se blocke sur ce petit bout de code...

  6. #6
    Membre éclairé
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 479
    Par défaut
    Quelle est le message stp

  7. #7
    Membre confirmé
    Femme Profil pro
    Controlling & BI
    Inscrit en
    Mai 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Controlling & BI
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2013
    Messages : 54
    Par défaut
    Erreur 1004, erreur définie par l'application ou par l'objet

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

Discussions similaires

  1. [XL-2007] Copier coller plage de cellules dans une boucle For Each..Next
    Par JulieD33 dans le forum Excel
    Réponses: 3
    Dernier message: 02/03/2015, 11h19
  2. [XL-2007] Boucles For Each Next: problème de défilement des feuilles avec lenteur d'exécution
    Par camelia.w dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/12/2011, 20h08
  3. boucle for each next : sauter une valeur
    Par scavenger dans le forum VBScript
    Réponses: 1
    Dernier message: 18/02/2009, 10h15
  4. Boucle For Each Next non entrée
    Par Kareg dans le forum VBA Access
    Réponses: 9
    Dernier message: 21/05/2008, 14h35
  5. [VBA-E]PB sur une boucle for each next
    Par rond24 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 31/07/2006, 15h47

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