XL 2013 Rendre une macro plus simple

ksimat

XLDnaute Junior
Bonjour le forum,
Ma macro que j'ai réalisée par l'enregistreur de macro est trop longue et exécute les mêmes instructions sur plusieurs onglets. Je voudrais donc la rendre plus simple avec votre aide. Dans chaque feuille ("octobre", "novembre", "décembre" etc.) elle doit:
1 - Effacer le cellule (A1)
2 - Effacer la plage (E5:BN104)
3 - Appliquer la formule de la cellule (E3) sur la plage (E3:BN3)
Je précise que cette macro sera appelée dans une autre procédure liée elle à un bouton. En vous remerciant d'avance je colle ici la macro:

Sub MiseAJourRegistre()
Application.ScreenUpdating = False
Sheets("Octobre").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Novembre").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Décembre").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Janvier").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Février").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Mars").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Avril").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Mai").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Juin").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
Sheets("Juillet").Select
Range("A1").ClearContents
Range("E5:BN104").ClearContents
Range("E3").Select
Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
End Sub
 

Staple1600

XLDnaute Barbatruc
Re

Patrice33740
Je t'en prie ajoute le ;)
Parce qu'en plus de fainéantiser, je procrastine toujours le dimanche soir ;)

PS: Pourquoi tu passes par deux étapes ?
.Range("A1").ClearContents
.Range("E5:BN104").ClearContents
alors qu'une seule suffit, non ?
(cf mon code)
 

ksimat

XLDnaute Junior
Staple1600,
Excusez la lenteur, et merci de la patience et surtout de la quête de la perfection à laquelle vous menez l'apprenti bidouilleur que je suis.
Voilà un fichier exemple simplifié pour tester votre code. Je ne peux le faire car je rencontre des difficultés avec la formule à intégrer dans le code.
Merci et bonne fin de soirée.
 

Pièces jointes

  • simplifierMacro.xlsm
    35.6 KB · Affichages: 34

ksimat

XLDnaute Junior
Patrice33740,
Là, j'avoue que je perds. Je n'ai pas compris ton dernier post.
Par contre j'ai confirmé plus haut que ton code marche bien. J'ai signalé que le code de Staple1600 effaçait la plage (A1:BN1) à la place de l'unique cellule A1. En plus Staple1600 dit aussi dans son code
( Formule = "=ROW()*COLUMN()" 'ici mettre la vrai formule)
mettre ICI... Euh où? je me perds.
Merci
 

Noel Bedard

XLDnaute Occasionnel
Bonsoir,

En regardant le code je crois que vous devez avoir 12 feuilles une pour chaque mois. Sinon la routine va bloquer. Il y a un compte de 12.
Code:
  For numéroDeMois = 1 To 12
    On Error Resume Next
    Set feuilleDuClasseur = Worksheets(Format(29 * numéroDeMois, "mmmm"))
    On Error GoTo 0
Si j'ajoute 12 feuilles c'est OK. L'erreur ne semble pas être intercepté.

Sous toutes réserves, je suis un débutant.

Noël

Ajouté simplifierMacro(3) les feuilles remplies avec les mois.
 

Pièces jointes

  • simplifierMacro (2).xlsm
    40 KB · Affichages: 29
  • simplifierMacro (3).xlsm
    50.4 KB · Affichages: 33
Dernière édition:

eriiic

XLDnaute Barbatruc
Bonjour,

les 12 feuilles en une fois, sans boucle :
VB:
Sub test()
    Sheets(Array("Octobre", "Novembre", "Décembre", "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet")).Select
    Range("A1,E5:BN104").Select
    Selection.ClearContents
    Range("E3").Select
    Selection.AutoFill Destination:=Range("E3:BN3"), Type:=xlFillDefault
End Sub
40% plus rapide pour 12 feuilles malgré les .select
eric
 

Patrice33740

XLDnaute Impliqué
Bonsoir,
En regardant le code je crois que vous devez avoir 12 feuilles
.... Sous toutes réserves, je suis un débutant. Noël
Non si la feuille n'existe pas elle aura la valeur Nothing, d'où le test en suivant...

@Eriiic, tu nous casse la baraque !
Depuis des années on essaie d'inculquer qu'il ne faut pas utiliser Select sauf si c'est strictement indispensable ! :eek:
 

Noel Bedard

XLDnaute Occasionnel
Bonsoir, Patrice33740
Mais alors pourquoi qu'avec 7 feuilles de Novembre à Mai le code envoie une erreur.
J'ajoute les 12 pages de Janvier à Décembre et Pas de problème.

Merci de m'expliquer.
Noël

L'indice n'appartient pas à la sélection Erreur 9.
J'ai utilisé l'espion de VBA et lorsque numérodumois atteint 6 il cherche "Juin"
Il ne passe pas la condition et le message d'erreur apparaît
 
Dernière édition:

Patrice33740

XLDnaute Impliqué
Bonsoir, Patrice33740
Mais alors pourquoi qu'avec 7 feuilles de Novembre à Mai le code envoie une erreur.
J'ajoute les 12 pages de Janvier à Décembre et Pas de problème.

Merci de m'expliquer.
Noël

L'indice n'appartient pas à la sélection Erreur 9.
J'ai utilisé l'espion de VBA et lorsque numérodumois atteint 6 il cherche "Juin"
Il ne passe pas la condition et le message d'erreur apparaît

...Ajouté simplifierMacro(3) les feuilles remplies avec les mois.
Je comprend pas quel est ton problème, je viens d'essayer avec ton fichier (3), posté sur le post ci-dessus, j'ai supprimé des feuilles et ça fonctionne parfaitement quel que soit le nombre de feuilles (même avec uniquement la première "Feuil11")
 

Patrice33740

XLDnaute Impliqué
Bonjour,
Patrice33740,
Là, j'avoue que je perds. Je n'ai pas compris ton dernier post.
Par contre j'ai confirmé plus haut que ton code marche bien. J'ai signalé que le code de Staple1600 effaçait la plage (A1:BN1) à la place de l'unique cellule A1. En plus Staple1600 dit aussi dans son code
( Formule = "=ROW()*COLUMN()" 'ici mettre la vrai formule)
mettre ICI... Euh où? je me perds.
Merci
Dans ce post je te parle du code de Staple1600, comment trouver la formule à mettre ci-dessus :
VB:
'Ajoutes :
MsgBox Worksheets("Janvier").Range("E3").FormulaR1C1
Stop
'avant la ligne :
Formule = "=ROW()*COLUMN()" 'ici mettre la vrai formule
Lances le code et notes la formule affichée puis insère la dans le code (de Staple1600)

Pour l'effacement, il a fait petite une erreur :
VB:
'au lieu de :
.Range("A1", "E5:BN104") = ""
'écrire
.Range("A1, E5:BN104") = ""
(comme quoi, parfois il vaut mieux écrire 2 lignes :))
 

Noel Bedard

XLDnaute Occasionnel
Bonjour à tous,
Patrice33740
Pour faire la feuille ou je rencontre un problème, j'ai pris le code du post #15 et la feuille du poste #17.
J'ai adressé le bouton et lancé la routine donc erreur.
Je vous retourne le fichier #3 que vous dites avoir essayé, j'ai supprimé les feuilles de juin à octobre et là j'ai l'erreur. (c'est ce qui revient à mon premier essaie avec post #15 et 17).

De la mon post, rien de bien grave, je ne suis pas ici pour reprendre personne bien au contraire, vous m'impressionné tous du merveilleux travail que vous faites.

Bien à vous, bonne journée
Noël
 

Pièces jointes

  • simplifierMacro (3)(erreur).xlsm
    38.8 KB · Affichages: 30

Patrice33740

XLDnaute Impliqué
Bonjour à tous,
Patrice33740
Pour faire la feuille ou je rencontre un problème, j'ai pris le code du post #15 et la feuille du poste #17.
J'ai adressé le bouton et lancé la routine donc erreur.
Je vous retourne le fichier #3 que vous dites avoir essayé, j'ai supprimé les feuilles de juin à octobre et là j'ai l'erreur. (c'est ce qui revient à mon premier essaie avec post #15 et 17).

De la mon post, rien de bien grave, je ne suis pas ici pour reprendre personne bien au contraire, vous m'impressionné tous du merveilleux travail que vous faites.

Bien à vous, bonne journée
Noël
Chez moi ton fichier fonctionne (normalement), il n'y a pas pas d'erreur.
C'est anormal que ça ne fonctionne pas chez toi, étant donné que le rôle de On Error Resume Next est de relancer la macro sur l'instruction suivante sans générer d'erreur !
 

Discussions similaires

Statistiques des forums

Discussions
312 198
Messages
2 086 117
Membres
103 121
dernier inscrit
SophieS