macro --> fonction

clav

XLDnaute Nouveau
Bonjour,

voici une macro qui calcul la somme de toutes les cellules D1 de toutes les feuilles de mon classeurs dont le nom est compris entre 0 et 9999 et qui l'affiche dans la feuille "result" dans la cellule A1 :

Sub Macro1()
Dim Somme As Long
Dim Ctr As Integer
Somme = 0
For Ctr = 1 To Sheets.Count
If (Sheets(Ctr).Name > 1000) And (Sheets(Ctr).Name < 9999) Then
Sheets(Ctr).Select
Somme = Somme + ActiveSheet.Range("D1").Value
End If
Next
Sheets("Result").Select
ActiveSheet.Range("A1").Value = Somme
End Sub


Comment dois-je faire pour que cette macro s'execute automatiquement, sans que j'ai besoin de la lancer via un bouton.
Dois-je en faire une fonction? Comment?
Je débute...

Merci

Clav
 

Creepy

XLDnaute Accro
Re : macro --> fonction

Hello all,

Tu peux mettre ta macro dans Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) dans thisworkbook.

Ainsi à chaque changement dans une feuille la macro sera executée.

Tu peux aussi la mettre en Private Sub Workbook_SheetActivate(ByVal Sh As Object) mais là, ta macro ne s'activera qu'à chaque changement de feuille.

Pour ne pas faire perdre de temps à l'utilisateur, tu peux mettre une condition pour que la macro ne se lance que si tu cliques sur la feuille result par exemple

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If ActiveSheet.Name = "Result" Then 
  MsgBox "Feuille Result !"
end if
End Sub

Ce code est valable si tu parts du principe que l'utilisateur va sur la feuille result voir le resultat de ta macro.

@+

Creepy
 

clav

XLDnaute Nouveau
Re : macro --> fonction

en fait j'ai encore des petits problemes.
1 .Je ne sais pas ou mettre ce code. Dans un "module"? dans "this workbook"? ailleurs?
J'ai essayé un peu partout, mais ca ne semble pas fonctionner.
Pouvez-vous m'expliquer ou on doit coller le code et pouquoi.
2. La macro a fonctionné une fois mais elle est partie en boucle et ne s'est arrêtée qu'apres un Ctrl+Alt+Del.. Pourquoi? voyez vous une boucle qui ne se fini pas?


Merci de votre aide
 

Kobaya

XLDnaute Occasionnel
Re : macro --> fonction

Salut clav,

En fait il semblerait que creepy ait fait une petite erreur. le bon code devrait être :
Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    If Sh.Name = "Result" Then 
      Call Macro1
    end if
End Sub

Ce code doit être placé dans ThisWorkbook.

La remarque de creepy est toujours valable : "Ce code est valable si tu pars du principe que l'utilisateur va sur la feuille result voir le resultat de ta macro"
 

clav

XLDnaute Nouveau
Re : macro --> fonction

ca fonctionne. La macro se lance lorsque je change de feuille, mais... il ya toujorus un "mais...", ca tourne toujorus en boucle pendant 5min. Le probleme doit venir du fait que la macro fait la somme puis la place dans la feuille "result" et comme la feuille "result" est sélectionnée, la macro se relance.. a l'infini!
J'ai pensé passer par une autre feuille nommée data qui déclenche la macro, mais ca revient finalement a lancer la macro avec un bouton.
N'y a t'il pas un moyen pour que ma macro se lance, simplement lors d'un changement dans les feuilles dont le nom est compris entre 0 et 9999??

Merci
 

Creepy

XLDnaute Accro
Re : macro --> fonction

Hello all,

Ton anlyse est bonne Clav comme tu fais ca :

Sheets("Result").Select
ActiveSheet.Range("A1").Value = Somme

Ca boucle à l'infini à cause du select.
Remplace par ceci et tu devrais plus avoir de problème :

Sheets("Result").Range("A1").Value = Somme

Plus de sélection, plus de souci !!!

@+

Creepy
 

Discussions similaires

Réponses
1
Affichages
196

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia