> Tous les forums > Forum Bureautique
 execution code tres longSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
vieuxmonsieur
  Posté le 12/12/2012 @ 05:13 
Aller en bas de la page 
Astucien

bonjour,

est-il possible d'accelerer ce code svp :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim maVar1 As String
Dim cel As Range
Application.ScreenUpdating = False
If Not Intersect(Target, Range("$G$1")) Is Nothing Then
End If
Select Case Range("G1").Value
Case 1
Call MasquerLignesSTEA
Case 2
Call MasquerLignesSTES
End Select
Next
Application.ScreenUpdating = True
End Sub

Dans un module :

Sub MasquerLignesSTEA()
Dim ligne As Integer
For Each cel In Range("D5:D35000")
For ligne = 5 To 100
If Cells(ligne, 4) = "STEA" Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
Next
Next
Range("A5").Activate
End Sub

Sub MasquerLignesSTES()
Dim ligne As Integer
For Each cel In Range("D5:D35000")
For ligne = 5 To 100
If Cells(ligne, 4) = "STES" Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
Next
Next
Range("A5").Activate
End Sub

en vous remerciant



Modifié par vieuxmonsieur le 12/12/2012 05:18
Publicité
ferrand
 Posté le 12/12/2012 à 09:41 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bizarre ces deux lignes qui se suivent :

If Not Intersect(Target, Range("$G$1")) Is Nothing Then
End If

ferrand
 Posté le 12/12/2012 à 09:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Quelle durée ?

Et peux-tu préciser plus exactement ce que l'exécution du code doit produire ?



Modifié par ferrand le 12/12/2012 09:55
vieuxmonsieur
 Posté le 12/12/2012 à 12:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

bonjour ferrand,

effectivement, je m'en suis apercu et corrige comme suit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim maVar1 As String
Dim cel As Range
Application.ScreenUpdating = False
If Not Intersect(Target, Range("$G$1")) Is Nothing Then
Select Case Range("G1").Value
Case 1
Call MasquerLignesSTEA
Case 2
Call MasquerLignesSTES
End Select
Next
End If

Application.ScreenUpdating = True
End Sub

ainsi que :

Dans un module :

Sub MasquerLignesSTEA()
Dim ligne As Integer
For ligne = 5 To 100
If Cells(ligne, 4) = "STEA" Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
Next
Range("A5").Activate
End Sub

Sub MasquerLignesSTES()
Dim ligne As Integer
For ligne = 5 To 100
If Cells(ligne, 4) = "STES" Then
Rows(ligne & ":" & ligne).EntireRow.Hidden = True
End If
Next
Range("A5").Activate
End Sub

car j'avais 2 boucles.

le but de ce code, selon valeur en G1, j'appelel le code MasquerLignesSTEA ou MasquerLignesSTES pour masquer des lignes dont la colonne D contient uniquement STEA ou STES, le tout sur environ 35000 lignes.

mais je commence a patauger.

cordialement.

ferrand
 Posté le 12/12/2012 à 12:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

35000 ou 100 ? C'est pas pareil !

vieuxmonsieur
 Posté le 12/12/2012 à 13:02 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

100 c'etait pour tester

vieuxmonsieur
 Posté le 12/12/2012 à 14:08 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

c'est Ok avec ce code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim maVar1 As String
Dim cel As Range
Dim ligne As Integer
maVar = "Sélectionnez un concours."
'Désactivation de l'écran
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = False

Select Case Range("$G$1").Value
Case 1
'Call MasquerLignesSTES
For Each cel In Range("D5:D105") 'Plage à adapter
If cel.Value = "STES" Then
cel.EntireRow.Hidden = True
End If
Next


Case 2
'Call MasquerLignesSTEA
For Each cel In Range("D5:D105") 'Plage à adapter
If cel.Value = "STEA" Then
cel.EntireRow.Hidden = True
End If
Next

Case 3
Cells.EntireRow.Hidden = False
Range("A1").Activate

Case Else
Exit Sub
End Select
'Réactivation de l'écran
Application.ScreenUpdating = True
End Sub

ferrand
 Posté le 12/12/2012 à 14:52 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Pas vu ta dernière version. Suis sur plusieurs choses en même temps, mais j'avais commencé une simplification du jet précédent :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$G$1" Then MasquerLignes Target.Value
End Sub

Sub MasquerLignes(s As Integer)
Dim ligne As Long, ste As String
Select Case s
Case 1
ste = "STEA"
Case 2
ste = "STES"
Case Else
Exit Sub
End Select
Application.ScreenUpdating = False
For ligne = 5 To 35000
If Cells(ligne, 4).Value = ste Then Rows(ligne).EntireRow.Hidden = True
Next ligne
Application.ScreenUpdating = True
Range("A5").Activate
End Sub

A voir.

ferrand
 Posté le 12/12/2012 à 15:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Adaptation rapide prenant en compte tes derniers éléments, dans la structure antérieure (proc. MasquerLignes):

Sub MasquerLignes(s As Integer)
Dim ligne As Long, ste As String
Select Case s
Case 1
ste = "STEA"
Case 2
ste = "STES"
Case 3
Rows.EntireRow.Hidden = False
Exit Sub
Case Else
Exit Sub
End Select
Application.ScreenUpdating = False
Rows.EntireRow.Hidden = False
For ligne = 5 To 35000
If Cells(ligne, 4).Value = ste Then Rows(ligne).EntireRow.Hidden = True
Next ligne
Application.ScreenUpdating = True
Range("A5").Activate
End Sub

On peut sans doute améliorer.

ferrand
 Posté le 12/12/2012 à 15:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Autres remarques :

Inversion des lignes masquées entre tes deux versions. Choisir la bonne...

MaVar1 n'est pas utilisée dans les deux versions (et dans la seconde tu déclares MaVar1 mais tu affectes MaVar [non déclarée]).

vieuxmonsieur
 Posté le 14/12/2012 à 11:39 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bonjour ferrand,

je te reponds un peu tardivement, mais j'ai reussi en fait a faire ce que je voulais. merci de t'etre peche sur mon probleme.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
SSD Lexar NS100 SATA 256 Go
18,99 € 29,99 € -37%
@Amazon
Détecteur de fumée et de monoxyde de carbone Aegislink
22,32 € 34,99 € -36%
@Amazon
Faitout Tefal Duetto (inox, 20 cm, 3L, couvercle en verre filrant, induction, four)
25,49 € 41,99 € -39%
@Amazon
Clé USB 3.2 Kingston DataTraveler Exodia DTX 128 Go
9,19 € 18 € -49%
@Amazon
Stop-Rouille Facom 125 ml
8,99 € 14,90 € -40%
@Amazon
Veste Bomber JACK & JONES
28,26 € 49,99 € -43%
@Amazon

Sujets relatifs
délai ouverture google très long
Fichier exel 2007 tres long à s'ouvrir
Amélioration rapidité exécution du code
Execution de tri tres lente sous Excel 2003
Excel 2000 Enregistrement très long
accès à Word 200 très long
Word et excel trés long
Recherche le code ASCII pour le tiret long
Libre Office devenu très lent
Word : Comment régler Tabulation et Effacement, car trop long
Plus de sujets relatifs à execution code tres long
 > Tous les forums > Forum Bureautique