|
| quillet | Posté le 01/05/2008 @ 11:11 |
Petit astucien
94 Messages
| Bonjour à tous, Je voudrais figer les valeurs d'un tableau comportant des formules, par copier-coller puis protéger la feuille, mais pas manuellement. Je voudrais que cette opération s'effectue automatiquement en changeant de feuille. J'ai fait les macro ci-dessous mais celà ne fonctionne pas. Dans un module Sub Macro1() Range("S62:AD73").Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Dans la feille J1 Private Sub Worksheet_Deactivate() Macro1 End Sub Pourrais-je savoir ce qui cloche dans ces macros. Comment faire pour que celà fonctionne? Merci poue votre aide
|
| |
| |
| Publicité |
|
|
| galopin01 | Posté le 01/05/2008 à 11:28 |
Astucien
4321 Messages
| bonjour, Quand la macro déactivate s'exécute la feuille n'est déjà plus la feuille active puisqu'elle a été lancée par l'activation de la feuille 2... Ta macro 1 s'applique alors à la nouvelle feuille active... C'est l'inconvénient de tous les Select, ActiveCell, ActiveSheet et autres ActiveQuelqueChose... Toujours préférer l'adressage absolu. (sans select) Remplacer les 2 macros par cette macro unique : Private Sub Worksheet_Deactivate() With Worksheets("J1").Range("S62:AD73") .Copy .PasteSpecial Paste:=xlPasteValues .Protect DrawingObjects:=True End With Application.CutCopyMode = False End Sub A+ Modifié par galopin01 le 01/05/2008 17:18 |
| |
|
| quillet | Posté le 01/05/2008 à 12:06 |
Petit astucien
94 Messages
| MERCI Galopin pour ta réponse ultra rapide. J'ai supprimé les 2 macros et installé la tienne dans la feuille J1; hélas celà ne marche pas. Lorsque je passe à la feuille J2 une fenêtre indique "Erreur de compilation; Sub ou Function non définie" Clic sur OK montre la maco avec le Worksheet de la 2ème ligne surligné en bleu. |
| |
|
| galopin01 | Posté le 01/05/2008 à 12:33 |
Astucien
4321 Messages
| Euh... Cela est du à une modif de dernière minute. Mettre un s à Worksheet ! With Worksheets("J1")... A+ Modifié par galopin01 le 01/05/2008 12:35 |
| |
|
| quillet | Posté le 01/05/2008 à 15:10 |
Petit astucien
94 Messages
| Celà ne fonctionne toujours pas. La fenêtre qui apparait indique "Erreur d'execution '9':L'indice n'appartient pas à la selection" et la 2ème ligne de la macro est surlignée en jaune. Que faut-il faire SVP? |
| |
|
| galopin01 | Posté le 01/05/2008 à 15:44 |
Astucien
4321 Messages
| Est-tu sur que que ta feuille est bien nommée "J1" et qu'il n'y a pas un espace indésirable : par exemple "J1 " ? Modifié par galopin01 le 01/05/2008 15:45 |
| |
|
| quillet | Posté le 01/05/2008 à 15:55 |
Petit astucien
94 Messages
| Bien vu Galopin. J'ai supprimé l'espace entre J et 1. Mais à présent, s'ouvrent sans arrêt et alternativement les feuilles J2 et J1. Que faire? |
| |
|
| galopin01 | Posté le 01/05/2008 à 17:21 |
Astucien
4321 Messages
| Ben... Faut dire que c'est un peu tiré par les cheveux ta règle de sortie...  Remplacer la macro comme suit : Private Sub Worksheet_Deactivate() On Error Resume Next Application.ScreenUpdating = True Application.EnableEvents = False With Worksheets("J1").Range("S62:AD73") .Copy .PasteSpecial Paste:=xlPasteValues .Protect DrawingObjects:=True End With Application.CutCopyMode = False Application.EnableEvents = True End Sub A+ Modifié par galopin01 le 01/05/2008 17:22 |
| |
|
| quillet | Posté le 01/05/2008 à 17:42 |
Petit astucien
94 Messages
| Merci beaucoup Galopin. Ça marche J'admire ta maîtrise, car pour moi ta macro, c'est de l'hébreu et, j'en suis désolé mais je crois que je n'y comprendrai jamais rien. Heureusement que vous êtes là pour aider les ignares A+ |
| |
|
| galopin01 | Posté le 01/05/2008 à 21:41 |
Astucien
4321 Messages
| Les macros évènementielles sont parfois difficiles à manier car elles entraînent des évènements en chaine si l'on n'y prend pas garde. Si tu réactives ta feuille (pour faire des modifications) à chaque fois que tu la désactives, tu vas pas arrêter de faire des modifications puisque à chaque fois que tu vas la quitter, tu vas aussitot la réactiver pour faire tes modifications. Et comme après tu vas la désactiver pour la réactiver pour faire tes modifications, ça fait un peu comme pour les shadocks à force de la désactiver pour la réactiver évidement ça fatigue... C'est là que j'interviens : mine de rien et sans en avoir l'air, je fais les modifications sans avoir l'air d'y toucher pour pas qu'il se rende compte que j'ai réactivé la feuille que tu viens de réactiver... 
A+ Modifié par galopin01 le 01/05/2008 21:46 |
| |
|
| quillet | Posté le 02/05/2008 à 00:11 |
Petit astucien
94 Messages
| Bravo Galopin, ton explication est amusante et beaucoup plus claire pour moi que le langage VBA. Effectivement de toujours pomper, celà fatigue. Mais si je voulais cette macro, c'est justement pour ne plus toucher à la feuille par la suite. Merci, A + |
| |
|
|
| Haut de la page |