Erreur de macro ou long calcul ?

Bonjour à vous tous,

après quelques recherches, voici que je réussi ma première macro tout seul (excel 2007 / win XP).......

Sub Schaltfläche1_KlickenSieAuf()

Application.ScreenUpdating = False

For i = 914 To 2 Step -48

For b = i To i + 47

If Range("g" & i).Value = "X" Then

Rows(b).Hidden = True

ElseIf Range("g" & i).Value <> "X" And Rows(b).Hidden = True Then

Rows(b).Hidden = False

End If

Next b

Next i

Application.ScreenUpdating = True

End Sub

La macro fonctionne, par contre, j'ai environ 5 min d'attente (Heu non on ne rigole pas), du coup je me demande si la macro est bien écrite ?

Le but de la macro étand de masquer/REafficher un certain nombre de lignes ceci dépendant de la variable "X" se trouvant en colone G.

Je suis ouvert à tout avis et vous remercie du temps déjà passé à me lire.

Au plaisir de vos réponces.

Bonjour,

Cette macro parait bien bizarre, cependant elle fonctionne instantanément.

Peut-être y-a-il une macro qui effectue un recalcul en arrière plan ?

Essaie :

Sub Schaltfläche1_KlickenSieAuf()
Application.ScreenUpdating = False
Application.EnableEvents = False
For i = 914 To 2 Step -48
   For b = i To i + 47
      If Range("g" & i).Value = "X" Then
         Rows(b).Hidden = True
      ElseIf Range("g" & i).Value <> "X" And Rows(b).Hidden = True Then
         Rows(b).Hidden = False
      End If
   Next b
Next i
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

A+

Bonjour galopin01 et merci,

je viens de tester et hélas, je n'ai pas constaté de changements...

Le fichier est joint tout se passe entre les deux premiers onglets.

Tout de suite, avec un petit fichier joint, ça aide !

La solution :

Sub Schaltfläche1_KlickenSieAuf()
Application.ScreenUpdating = False
For i = 914 To 2 Step -48
      ii = i + 47
      Rows(i & ":" & ii).Hidden = Range("G" & i) = "X"
Next i
Application.ScreenUpdating = True
End Sub

A+

Ceci prouve par a + b que nom de dieu j'ai encore bien à apprendre....

Déjà merci, ça fonctionne super.

Du reste, ma logique n'était pas totalement fausse mais voyons si j'ai bien compris ....

Sub Schaltfläche1_KlickenSieAuf()

Application.ScreenUpdating = False

For i = 914 To 2 Step -48

Jusque la on est ok

ii = i + 47

La aussi sauf que tu simplifie le For mais on reste en définition de zone

Rows(i & ":" & ii).Hidden = Range("G" & i) = "X"

Ici la valeur IF disparait

Mais est remplacé par une triple vérité a savoir

Quand x se trouve (=) au croisement de i (ligne) et de "G" (colone) on est sur que(=) les lignes partant de i jusqu'a ii sont caché

Next i

Application.ScreenUpdating = True

End Sub

La on termine

Bonjour,

ii = i + 47

"on reste en définition de zone"

Ce n'est pas qu'une question de forme : On évite ainsi au proc de faire une boucle For mais en plus de recalculer à chaque fois la fin de cette boucle...

En matière de temps de traitement YAPA de petites économies...

Rows(i & ":" & ii).Hidden = Range("G" & i) = "X"

On appelle cela un "switch"

Range("G" & i) = "X"

...est évalué par VBA comme VRAI ou FAUX donc les lignes sont cachées ...ou démasquées :

Rows(i & ":" & ii).Hidden = VRAI/FAUX

Par suite tu remplaces directement une évaluation de IF...ELSE à chaque ligne de ta bouche For par

une seule affection de propriété "en bloc" pour 47 lignes...

YAPA de petites économies...

Sur 1000 lignes le gain de temps n'est pas considérable, mais sur 60 000 ça peut rapidement devenir scatologique !

A+

Rechercher des sujets similaires à "erreur macro long calcul"