Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Formule Vba sur classeur

  • Initiateur de la discussion Initiateur de la discussion Calvus
  • Date de début Date de début

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 !

Calvus

XLDnaute Barbatruc
Bonjour,

Pouvez vous m'expliquer pourquoi ce code ne fonctionne pas :

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Range("b1") = "=Sum(a1:a3)"
End Sub

J'ai également essayé ceci, mais sans plus de succès.

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
With Sheets("feuil1:feuil3")
Range("b1") = "=Sum(a1:a3)"
End With
End Sub

Le code fonctionne évidemment placé dans une feuille unique.

Merci
 
Dernière édition:
Re : Formule Vba sur classeur

Bonjour Calvus, Gilbert,

Pas besoin de macro dans les feuilles, uniquement dans ThisWorkbook :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.[B1].Formula <> "=SUM(A1:A3)" Then Sh.[B1] = "=SUM(A1:A3)"
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Workbook_SheetActivate Sh
End Sub

'celle-ci n'est pas absolument indispensable
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
Workbook_SheetActivate Sh
End Sub
A+
 
Re : Formule Vba sur classeur

Re,

Ceci est beaucoup mieux car les cellules B1 sont remplies dès l'ouverture du classeur :

Code:
Private Sub Workbook_Open()
Dim w As Worksheet
For Each w In Worksheets
  Workbook_SheetChange w, w.[B1]
Next
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If Sh.[B1].Formula <> "=SUM(A1:A3)" Then Sh.[B1] = "=SUM(A1:A3)"
End Sub
Vous aurez compris que les formules en B1 ne peuvent plus être effacées.

A+
 
Re : Formule Vba sur classeur

Bonjour Job, Gilbert,

Gilbert, le code fonctionne, seulement dès qu'une entrée est tapée dans une feuille, la macro change de feuille immédiatement, ce qui n'est évidemment pas pratique.
Par ailleurs, les codes de Job ont l'avantage d'être plus simples. Merci.

Job, j'avoue ne pas avoir compris la différence entre les deux codes. Je tâtonne en Vba, vous devez certainement vous en souvenir.

Vous aurez compris que les formules en B1 ne peuvent plus être effacées.

Dans le premier code non plus il me semble, non ?

Pour la suite, j'aurai donc deux questions si vous voulez bien.

1/ Est il possible d'exclure certaines feuilles de ce code ? Mon classeur en contient près d'une soixantaine.

2/ Est il judicieux de suivre cette voie, sachant que mon idée était de transformer un classeur empli de formules et de les remplacer par du code. Ce classeur fait 20 Mo; je pensais l'alléger (enfin apprendre à essayer) en le transformant en Vba, mais je me rends compte que le code sur lequel j'ai demandé une explication ne fait que remplir les cellules avec des formules. Je n'ai donc pas l'impression que cela fera une différence à la fin. J'ai également dans l'idée qu'il faudrait programmer directement en Vba, ce dont je me sens bien incapable pour l'instant.

Exemple de formules contenues dans mon classeur :

Code:
=SI(ET(I$10<>"";OU(MOD(Formats!$T5-I$6;1)<=(J$6-I$6);MOD(Formats!$T5-I$6;1)=1;MOD(Formats!$T5-I$7;1)<MOD(Formats!$T5-J$7;1);MOD(Formats!$T5-I$8;1)<MOD(Formats!$T5-J$8;1)));OU(SOMMEPROD((I$6<=Formats!$T5)*(Formats!$T5<J$6));SOMMEPROD((I$7<=Formats!$T5)*(MOD(Formats!$T5-I$7;1)<MOD(Formats!$T5-J$7;1)));SOMMEPROD((I$8<=Formats!$T5)*(MOD(Formats!$T5-I$8;1)<MOD(Formats!$T5-J$8;1))))*1;"")

Je peux ouvrir une nouvelle discussion si nécessaire.

Merci de vos réponses.
Cordialement
 
Re : Formule Vba sur classeur

Bonjour Calvus, Gilbert,

1/ Est il possible d'exclure certaines feuilles de ce code ?

Modifier comme suit :

Code:
Private Sub Workbook_Open()
Dim w As Worksheet
For Each w In Worksheets
  Workbook_SheetChange w, w.[B1]
Next
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
Dim a, i As Integer
a = Array("Feuil1", "Feuil2", "Feuil3") 'CodeNames des feuilles à exclure
For i = 0 To UBound(a)
  If Sh.CodeName = a(i) Then Exit Sub
Next
If Sh.[B1].Formula <> "=SUM(A1:A3)" Then Sh.[B1] = "=SUM(A1:A3)"
End Sub
A+
 
- 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

Réponses
7
Affichages
454
Réponses
9
Affichages
508
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…