XL 2016 Exécution macro au démarrage d'un classeur

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Yoyo01000

XLDnaute Occasionnel
Bonjour à tous, je m'en réfère à vos talents pour un problème que je n'arrive à résoudre :
J'aimerais, lorsque j'ouvre un classeur Excel, que la seconde feuille s'affiche avec l'exécution d'une macro étant liée à cette feuille.
J'ai 2 codes dans ce classeur :

le 1er dans [ThisWorbook] étant celui-ci :

Private Sub Workbook_Open()
Select Case MsgBox("Ne pas supprimer les cellules comportant des formules !", vbOKOnly + vbExclamation, "AVERTISSEMENT")
End Select
End Sub

le 2ème dans la feuille 2 :


Sub macro_formules()

Range("B3").Select
ActiveCell.FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",R[-1]C+1)"
Range("B3").Resize(998).FillDown
Range("H2").Select
ActiveCell.FormulaR1C1 = "=IF(C6=""AC"",""2"","""")&IF(C6=""ICP"",""3"","""")&IF(C6=""P"",""2"","""")&IF(C6=""Q"",""2"","""")&IF(C6=""S"",""1"","""")&IF(C6=""TM"",""1"","""")"
Range("H2").Resize(999).FillDown
Range("E2").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-1]>0,EDATE(RC[-1],1),"""")"
Range("E2").Resize(999).FillDown

End Sub

J'ai essayé plusieurs solutions mais le problème est que quand je ferme le classeur en étant sur la feuille 2 après enregistrement, j'ai un message d'erreur venant de VBA dès que je l'ouvre à nouveau.
 
Bonjour,
Tu dois préciser sur quelle feuille le range se trouve.
Tu mets Range("B3").Select, le code sélectionne la cellule B3 mais de quelle feuille?
Soit tu mets le code name ex: Feuil1.Range("B3").Select
soit Sheets("MaFeuille").Range("B3").Select - MaFeuille est le nom de l'onglet.

nb: évite les select
il vaut mieux écrire:
Feuil1.Range("B3").FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",R[-1]C+1)"

Bonne journée.
 
Merci pour ta réponse et sur le conseil d'éviter les ''select" 🙂
Je viens de récrire mon code, en suivant tes conseils :

Sub macro_formules()
Feuil2.Range("B3").FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",R[-1]C+1)"
Feuil2.Range("B3").Resize(998).FillDown
Feuil2.Range("H2").FormulaR1C1 = "=IF(C6=""AC"",""2"","""")&IF(C6=""ICP"",""3"","""")&IF(C6=""P"",""2"","""")&IF(C6=""Q"",""2"","""")&IF(C6=""S"",""1"","""")&IF(C6=""TM"",""1"","""")"
Feuil2.Range("H2").Resize(999).FillDown
Feuil2.Range("E2").FormulaR1C1 = "=IF(RC[-1]>0,EDATE(RC[-1],1),"""")"
Feuil2.Range("E2").Resize(999).FillDown
End Sub

Pour exécuter ce code au démarrage du classeur, voici ma macro dans ThisWorkBook :

Private Sub Workbook_Open()
Feuil2.Range("B3").FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",R[-1]C+1)"
Feuil2.Range("B3").Resize(998).FillDown
Feuil2.Range("H2").FormulaR1C1 = "=IF(C6=""AC"",""2"","""")&IF(C6=""ICP"",""3"","""")&IF(C6=""P"",""2"","""")&IF(C6=""Q"",""2"","""")&IF(C6=""S"",""1"","""")&IF(C6=""TM"",""1"","""")"
Feuil2.Range("H2").Resize(999).FillDown
Feuil2.Range("E2").FormulaR1C1 = "=IF(RC[-1]>0,EDATE(RC[-1],1),"""")"
Feuil2.Range("E2").Resize(999).FillDown
End Sub

Tout fonctionne comme je le souhaitais, merci beaucoup 🙂
 
Dernière édition:
Bonjour.
La place normale de cette procédure serait un module standard, non le module de l'objet Worksheet Feuil2 qui représente la deuxième feuille Excel. Cela ne se justifierait que si elle était uniquement appelée depuis une procédure évènement de cet objet. Et dans ce cas je mets d’habitude Me au lieu de son nom dans le code qui lui est intimement attaché.
 
Dernière édition:
Si ce n'est n'est utilisé qu'à l'ouverture de classeur, oui, si c'est utilisé en plusieurs endroits mettez le seulement dans une Sub macro_formules() d'un module standard (de la rubrique Modules) et non d'un module objet (de n'importe quelle autre rubrique), et invoquez la simplement par son nom, à la rigueur avec Call devant, mais ça ne s'impose pas, partout où il faut.
 
Bonsoir Dranreb😉, Yoto😉,

Dans le module ThisWorkbook met ce code
VB:
Private Sub Workbook_Open()
Select Case MsgBox("Ne pas supprimer les cellules comportant des formules !", vbOKOnly + vbExclamation, "AVERTISSEMENT")
End Select
Feuil2.Activate 'ici activation feuil2 (ici c'est le codeName qui est utilisé
End Sub
Ensuite, fais un clic-droit sur l'onglet de la feuil2, et tu colles ce code qui s’exécute à chaque activation de la feuille
VB:
Private Sub Worksheet_Activate()
Me.Range("B3").FormulaR1C1 = "=IF(ISBLANK(RC[-1]),"""",R[-1]C+1)"
Me.Range("B3").Resize(998).FillDown
Me.Range("H2").FormulaR1C1 = "=IF(C6=""AC"",""2"","""")&IF(C6=""ICP"",""3"","""")&IF(C6=""P"",""2"","""")&IF(C6=""Q"",""2"","""")&IF(C6=""S"",""1"","""")&IF(C6=""TM"",""1"","""")"
Me.Range("H2").Resize(999).FillDown
Me.Range("E2").FormulaR1C1 = "=IF(RC[-1]>0,EDATE(RC[-1],1),"""")"
Me.Range("E2").Resize(999).FillDown
End Sub
Bonne soirée😀
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
233
Réponses
7
Affichages
106
Réponses
4
Affichages
147
Retour