Problème sur code VBA

bonsoir à toutes et à tous,

il y a quelque chose que je ne comprends pas suite à l'enregistrement en manuel d'une Macro, j'ai effectué la même manipulation sur 2 fichiers différents (avec quelques zone de sélection différentes) et j'ai un temps d'exécution très différent. Pour le 1er code, la durée d'exécution est normale par contre, pour la seconde, la durée est d'env 10 sec

voici les codes des 2 macros "manuelles" :

1°)

Sub validation_offre_client()
'
' validation_offre_client Macro
' Macro enregistrée le 07/02/2011 par chb44'

'
    Sheets("coutants").Select
    ActiveWindow.SmallScroll Down:=-135
    Range("A1:N143").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=123
    Range("A147").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("validation").Select
End Sub
Sub validation_offre_client()
'
' validation_offre_client Macro
' Macro enregistrée le 01/04/2011 par chb44'

'
    Range("H10").Select
    Sheets("COUTANTS FCL").Select
    ActiveWindow.SmallScroll Down:=-102
    Range("A1:Q102").Select
    Selection.Copy
    ActiveWindow.SmallScroll Down:=87
    Range("A106").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("validation").Select
    Range("H21").Select
End Sub

merci de vos lumières

Bonjour

Une piste à voir

Regardes si dans le fichier (le + lent) tu n'aurais pas des macros évènementielles, des fonctions personnalisées ou beaucoup de formules matricielles (SOMMEPROD en fait partie)

Mais sans fichier pas facile à trouver

Bonne journée

Bonsoir,

Si j'ai bien compris, tu as testé ces deux macros sur deux fichiers différents, et la premiere macro est plus rapide que la seconde ?

Dans ce cas, je ne comprends pas non plus, car le code est assez similaire et 10s de différence ca semble être trop élevé. As tu ressayé récemment et as tu le même problème ?

edit : Sheets("COUTANTS FCL").Select et Sheets("coutants") t'es macros s'executent sur des feuille différentes, j'avais pas fait attention. Le problème doit certainement provenir de ce que Banzai t'as dit. cordialement

bonsoir

merci pour vos remarques, afin que vous puissiez analyser d'où vient le problème, veuillez trouver en pj les fichiers dont je fais référence

merci par avance de vos remarques

24test-2-2011.rar (68.90 Ko)
21test-v1-9.rar (71.24 Ko)

Bonsoir

Au début de ton code dans la feuille "Coutants" pour le Test1

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
.
.

Au début de ton code dans la feuille "Coutant FCL" pour le Test2

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
.
.

Cela améliorera la vitesse

Edit: Pour le plaisir je t'ai modifié le code de recopie (donc à tester)

Seulement pour le Test1

Bonne soirée

Bonjour Banzai

merci pour te commentaires avisés et merci d'avoir boosté la recopie sur le fichier Test1

pour le deuxième fichier, celui qui est trop lent, j'ai adapté ton code de recopie de recopie sur le fichier, je pensais que cela améliorerait la vitesse d'éxecution mais il n'en ait rien, voici le code que j'ai établi :

Sub validation_offre_client()

'

' validation_offre_client Macro

' Macro enregistrée le 07/02/2011 par BAILLEUL Christophe

'

'

With Sheets("COUTANTS FCL")

.Range("A1:Q102").Copy

.Range("A106").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=False

'

' Pour que l'évènement Change de la feuille ait lieu

' Pense à la modifier si cette cellule risque d'être employée

'

.Range("R1").ClearContents

End With

' Sheets("coutants").Select

' ActiveWindow.SmallScroll Down:=-135

' Range("A1:N143").Select

' Selection.Copy

' ActiveWindow.SmallScroll Down:=123

' Range("A147").Select

' Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

' :=False, Transpose:=False

' Sheets("validation").Select

End Sub

par ailleurs, tu m'as précisé le code qui améliorerait la vitesse, peux-tu, s'il te plait, m'expliquer où l'insérer car j'ai essayé de l"insérer au début du code ci-dessus mais cela ne fonctionne pas, je pense que je me suis trompé alors si tu peux m'aider, merci !

Bonjour

Dans le fichier que j'ai posté, tu regardes dans le code de la feuille "coutants"

Il y a une ligne rajoutée juste après Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

La même chose dans le code de la page "fiche exploitation"

Pour

'
' Pour que l'évènement Change de la feuille ait lieu
' Pense à la modifier si cette cellule risque d'être employée
'
.Range("R1").ClearContents

Si j'ai rajouté cette partie c'est que je soupçonne qu'une fois les données copiées il faut que tu actualises une page (masquage/démasquage des lignes)

C'est pour cela que je fais une modification (ClearContents) d'une cellule qui entraine l'évènement Change de la feuille

Si des soucis encore n'hésites pas

Bonne journée

Bonjour Banzai

j'ai suivi tes conseils et cela va beaucoup plus vite, merci.

Par contre, le code ci-dessous ne fonctionne plus, peux-tu m'éclairer ?

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

With Application

.EnableEvents = False

.ScreenUpdating = False

.Calculation = xlCalculationManual

End With

With Sheets("offre FCL")

.Rows("44:45").Hidden = Range("f114") = 0

.Rows("46:47").Hidden = Range("f115") = 0

.Rows("48:49").Hidden = Range("f116") = 0

.Rows("50:51").Hidden = Range("f117") = 0

.Rows("52:53").Hidden = Range("f118") = 0

.Rows("54:55").Hidden = Range("f119") = 0

.Rows("56:57").Hidden = Range("f120") = 0

.Rows("58:59").Hidden = Range("f121") = 0

.Rows("60:61").Hidden = Range("f122") = 0

If Range("c112") = "OUI" Then

Sheets("offre FCL").Rows("44:61").Hidden = True

Else: Sheets("offre FCL").Rows("42:43").Hidden = True

End If

.Rows("64:65").Hidden = Range("f124") = 0

.Rows("66:67").Hidden = Range("f125") = 0

.Rows("68:69").Hidden = Range("f126") = 0

.Rows("70:71").Hidden = Range("f127") = 0

.Rows("72:73").Hidden = Range("f128") = 0

.Rows("74:75").Hidden = Range("f129") = 0

If Range("c123") = "OUI" Then

Sheets("offre FCL").Rows("64:75").Hidden = True

Else: Sheets("offre FCL").Rows("62:63").Hidden = True

End If

.Rows("78:79").Hidden = Range("f131") = 0

.Rows("80:81").Hidden = Range("f132") = 0

.Rows("82:83").Hidden = Range("f133") = 0

.Rows("84:85").Hidden = Range("f134") = 0

.Rows("86:87").Hidden = Range("f135") = 0

.Rows("88:89").Hidden = Range("f136") = 0

.Rows("90:91").Hidden = Range("f137") = 0

.Rows("92:93").Hidden = Range("f138") = 0

.Rows("94:95").Hidden = Range("f139") = 0

.Rows("96:97").Hidden = Range("f140") = 0

If Range("c130") = "OUI" Then

Sheets("offre FCL").Rows("78:97").Hidden = True

Else: Sheets("offre FCL").Rows("76:77").Hidden = True

End If

If Range("c143") = "OUI" Then

Sheets("offre FCL").Rows("42:97").Hidden = True

Else: Sheets("offre FCL").Rows("92:92").Hidden = True

End If

.Rows("103:104").Hidden = Range("f149") = 0

.Rows("105:106").Hidden = Range("f150") = 0

.Rows("107:108").Hidden = Range("f151") = 0

.Rows("109:110").Hidden = Range("f152") = 0

.Rows("111:112").Hidden = Range("f153") = 0

.Rows("113:114").Hidden = Range("f154") = 0

.Rows("115:116").Hidden = Range("f155") = 0

.Rows("117:118").Hidden = Range("f156") = 0

.Rows("119:120").Hidden = Range("f157") = 0

.Rows("101:102").Hidden = Range("f160") = 0

If Range("c161") = "OUI" Then

Sheets("offre FCL").Rows("101:120").Hidden = True

Else: Sheets("offre FCL").Rows("121:122").Hidden = True

End If

.Rows("128:129").Hidden = Range("f170") = 0

.Rows("130:131").Hidden = Range("f171") = 0

.Rows("132:133").Hidden = Range("f172") = 0

.Rows("134:135").Hidden = Range("f173") = 0

.Rows("136:137").Hidden = Range("f174") = 0

.Rows("138:139").Hidden = Range("f175") = 0

.Rows("140:141").Hidden = Range("f176") = 0

.Rows("142:143").Hidden = Range("f177") = 0

.Rows("144:145").Hidden = Range("f179") = 0

.Rows("146:147").Hidden = Range("f180") = 0

.Rows("148:149").Hidden = Range("f181") = 0

.Rows("150:151").Hidden = Range("f182") = 0

.Rows("152:153").Hidden = Range("f183") = 0

.Rows("154:155").Hidden = Range("f184") = 0

.Rows("156:157").Hidden = Range("f185") = 0

.Rows("158:159").Hidden = Range("f186") = 0

.Rows("160:161").Hidden = Range("f187") = 0

If Range("c190") = "OUI" Then

Sheets("offre FCL").Rows("126:161").Hidden = True

Else: Sheets("offre FCL").Rows("126:127").Hidden = True

End If

.Rows("165:183").Hidden = Range("b197") = 0

.Rows("175:181").Hidden = Range("b199") = 0

End With

With Application

.EnableEvents = True

.ScreenUpdating = True

.Calculation = xlCalculationAutomatic

End With

End Sub

Bonjour

Pas de soucis ici avec le fichier que j'ai

Que cela soit dans la page "offre" ou dans la page "fiche exploitation" des lignes sont masquées

Il faudrait le fichier en cause et les lignes qui ne sont pas modifiées coloriées

A suivre

Bonne journée

bonjour bansai

je te renvoie le fichier ce midi, on en reparle

-- 18 Avr 2011, 13:51 --

bansai

comme convenu, tu trouveras en pj le fichier pour lequel j'ai adapté ton code

si tu saisies une données dans un onglet et qu'ensuite, tu vas sur l'onglet validation et que tu cliques sur les 2 boutons, rien n'apparait sur l'onglet offre

si tu enlèves If Target.Count > 1 Then Exit Sub, cela fonctionne mais toujours très lentement

merci de tes lumières

bonjour

je renvoie le post, merci de vos lumières

Bonjour

Désolé je n'avais pas vu passer la seconde partie de ton post

A remplacer dans module2

Et à tester

Sub validation_offre_client()

    With Sheets("COUTANTS FCL")
      .Range("A1:Q102").Copy
      .Range("A106").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
                                  SkipBlanks:=False, Transpose:=False
      '
      ' Pour que l'évènement Change de la feuille ait lieu
      ' Pense à la modifier si cette cellule risque d'être employée
      '
      .Range("R1").ClearContents
    End With

End Sub

Bonne journée

bonjour Bansai

merci pour ton message mais le fichier est toujours aussi lent !

j'avoue j'y perd mon latin .....

Rechercher des sujets similaires à "probleme code vba"