begin process at 2012 02 14 06:31:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Langages dérivés

 > 

VBA

 > 

Accelerer une Boucle


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Accelerer une Boucle

mercredi 10 octobre 2007 à 16:43:34 | Accelerer une Boucle

ITALIA

Membre Club
Bonjour voici un morceau de code vba, il permet de lire une plage de valeur de bas en haut et de gauche à droite.
Il supprimer les cases vides et decale les valeurs non nul vers l'extreme gauche.
Cette plage est assez importante  car :

nb_ligne= 3779
nb_col=40

Il faut plus d'une heure pour l'executer...avez vous une idée pour accelerer ce traitement


Application.ScreenUpdating = False ' Désactivation de la mise à jour de l'affichage
For i = -nb_ligne - 1 To -2
    For J = -nb_col - 2 To -3
        Cells(-i, -J).Select
        If Cells(-i, -J) >= Max Then
            Selection.Delete Shift:=xlToLeft
        End If
    Next J
Next i
Application.ScreenUpdating = True ' Réactivation de la mise à jour de l'affichage


It@li@
mercredi 10 octobre 2007 à 16:46:44 | Re : Accelerer une Boucle

ITALIA

Membre Club
Désolé  cette boucle enléve les cellule >= Max
Max=450

It@li@
mercredi 10 octobre 2007 à 18:42:09 | Re : Accelerer une Boucle

BruNews

Administrateur CodeS-SourceS
Reagarde ici comment on traite:
http://www.vbfrance.com/forum.v2.aspx?ID=1019844

Faut faire avec objet Range, c'est en interne un pointeur d'adresse sur les données.
Vire les 'select', rien à faire dans de grosses boucles, ça ruine les perfs.

ciao...
BruNews, MVP VC++
mercredi 10 octobre 2007 à 22:22:34 | Re : Accelerer une Boucle

us_30

Membre Club

Bonsoir,

100% d'accord avec Brunews... Voici ce que ton code réécrit normalement donne :

Sub es()

'Paramètres
Dim Nb_Ligne As Long, Nb_Col As Long, Max As Double
Dim i As Long, j As Long

Nb_Ligne = 4000
Nb_Col = 40
Max = 60

'Algo
For i = 1 To Nb_Ligne
    For j = 1 To Nb_Col
        If Cells(i, j) >= Max Then Cells(i, j) = ""
    Next j
Next i

End Sub

=

Amicalement,
Us.

jeudi 11 octobre 2007 à 00:15:12 | Re : Accelerer une Boucle

SMaverick

Salut,
Si Nb_Ligne et Nb_Col et Max ne changent pas, pourquoi faire reference a la variable, c'est du boulot en plus pour le programme .... Utilisent les valeurs directement dans le programme, c'est pas une revolution mais ça permet de gagner un peu de temps ... tutorial sur l'optimisation http://www.vbfrance.com/tutorial.aspx?id=519

bon courage

jeudi 11 octobre 2007 à 09:58:44 | Re : Accelerer une Boucle

ITALIA

Membre Club
Bonjour à tous et merci de vos remarques..

us_30 : ton code ne decale pas les lignes < Max vers la gauche .... donc ne repond pas entierement à mon besoin.

BruNews : je ne vois pas comment faire avec un objet Range....peux tu m'aider s'il te plait


It@li@


Cette discussion est classée dans : boucle, gauche, nb, plage, accelerer


Répondre à ce message

Sujets en rapport avec ce message

nb de rep ??? boucle ??? recherche rep dans rep ??? besoin coup de pouce !!! [ par gnosis35 ] j'aimerai creer un variable de type integer qui contient le nombre de repertoire d'un chemin que je saisi dans un text box comment faire ??je dois uti plage de cellules [ par renaud97434 ] bonjour, j'ai un tableaux excel avec des lignes et colonnes.je fais un compte avec une boucle pour déterminer le nombre de lignes dans la colonnedans vba - excel 2003 - Boucle sur une plage nommée [ par Djrome ] Salut les Kracks, Je souhaiterai imprimer des onglets en créant une boucle qui balaie une [color=purple]plage "b10:b30 sheet57"[/color] comportant le Copier Coller plage cellules avec boucle pour test sur date [ par podzob56 ] Bonjour à tous je cherche à créer une macro qui copie une plage de cellule (ex: A1:A10) dans la sheet1 et qui va la coller dans un hsitorique en sheet Créer une boucle afin de Sélectionner en fonction d'une valeur dans une colonne la plage qui y correspond la copier et la coller dans un autre fichier [ par rvtoulon ] Bonjour, j'ai un tableau excel dans lequel figure divers éléments:<col style="WIDTH: 34pt; mso-width-source: userset; mso-width-a [Catégorie encore modifiée .Net -> VBA] transformation plage de cellule [ par jbbaudouin ] bonjour à tous, je voudrais tracer plusieurs grahique dans une boucle, seulement la plage de cellule fournit par défaut ne permet pas de faire une bo Fonction Nb.si généralisée à tout type de critère [ par RODAVAFLO ] Bonjour,La formule Nb.si permet de déterminer le nombre de cellules qui répondent à un critère dans une plage définie.  J'aimerais pouvoir avoir une p pb de syntaxe pour des liens de cellules (important!!) [ par DaziooM07 ] Bonjour à tous, J'expose rapidement mon problème. J'aimerais mettre une formule dans ma cellule active par exemple "= B13 + J13" Cependant, dans ma si bloquer Clic gauche et droit de la souris sur un control image [ par liocifer ] Bonjour,Comment procède-t-on pour bloquer le clic gauche et droit de la souris sur un control image au passage de la souris sur ce control.(peut-être


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,218 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales