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 SubSub 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 Submerci 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
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").ClearContentsSi 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 SubBonne journée
bonjour Bansai
merci pour ton message mais le fichier est toujours aussi lent !
j'avoue j'y perd mon latin .....