Macro événementielle ou fonction ?

Gruick

XLDnaute Accro
Bonjour,

Afin d'améliorer la réponse au sujet https://www.excel-downloads.com/threads/gestion-flotte-vehicules.143568/, je suis devant deux solutions :
- la première consiste à transformer ma macro en deux fonctions, mais ça ne calcule pas (même en mettant des "Calculate"), sauf si je retape dans la cellule concernée la fonction créée,

Code:
Function Contrôle()
For c = Cells(2 ^ 16, 4).End(xlUp).Row To Cells(14, 4).Row Step -1
  If Cells(c, 4) = "CT" Then
    Contrôle = DateSerial(Year(Cells(c, 1)) + 1, Month(Cells(c, 1)), Day(Cells(c, 1))): Calculate
    Exit Function
  End If
Next c
Contrôle = DateSerial(Year(Cells(4, 5)) + 1, Month(Cells(4, 5)), Day(Cells(4, 5))): Calculate
End Function
Code:
Function Révision()
For r = Cells(2 ^ 16, 4).End(xlUp).Row To Cells(14, 4).Row Step -1
  If Cells(r, 4) = "Révision" Then
    Révision = ((Cells(r, 2) + 30000) \ 30000) * 30000: Calculate
  Exit Function
  End If
Next r
Révision = ((Cells(5, 5) + 30000) \ 30000) * 30000: Calculate
End Function



- la deuxième consiste à en faire la même macro événementielle, sur chaque nouvelle feuille, ce qui alourdira le fichier, et comment la recopier par macro ?

Code:
Private Sub Worksheet_Activate()
For c = Cells(2 ^ 16, 4).End(xlUp).Row To Cells(14, 4).Row Step -1
  If Cells(c, 4) = "CT" Then
    Cells(8, 3) = DateSerial(Year(Cells(c, 1)) + 1, Month(Cells(c, 1)), Day(Cells(c, 1)))
    GoTo Révision
  End If
Next c
Cells(8, 3) = DateSerial(Year(Cells(4, 5)) + 1, Month(Cells(4, 5)), Day(Cells(4, 5)))
Révision:
For r = Cells(2 ^ 16, 4).End(xlUp).Row To Cells(14, 4).Row Step -1
  If Cells(r, 4) = "Révision" Then
    Cells(8, 6) = ((Cells(r, 2) + 30000) \ 30000) * 30000
  Exit Sub
  End If
Next r
Cells(8, 6) = ((Cells(5, 5) + 30000) \ 30000) * 30000
End Sub
Si vous avez une idée, une astuce, une trouvaille... je patauge dans mon lisier. Merci d'avance

Gruick
 

Pierrot93

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Bonjour Gruick,

pas tout suivi, mais pourquoi ne pas utiliser l'événement "Workbook_SheetActivate", s'appliquera à toutes les feuilles du classeur. à placer dans le module "thisworkbook" :

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'ton code
End Sub

bon après midi
@+
 

Gruick

XLDnaute Accro
Re : Macro événementielle ou fonction ?

Bonjour Pierrot, et bravo pour tes 8 kilos !

C'est le déluge sur Chelles...

Ce que je voudrais, c'est que la macro événementielle ne fonctionne que pour certaines feuilles, et pas sur d'autres.
J'ai créé un modèle, avec sa macro événementielle, que je duplique et renomme à chaque besoin, et ce grâce à un bouton sur un USF, mais ça ne copie pas la macro événementielle.

Je préférerai donc les macro-fonctions, si j'étais sûr qu'elles donnent satisfaction, ce qui n'est pas le cas.

V'la le dossier pour voir la globalité du problème.
Sur la feuille "Modèle" la macro événementielle
Sur la feuille "Bugatti", les macro-fonctions, qui rament.

Merci d'avance.

Gruick

Edit :
Pourquoi ne pas exclure les deux feuilles interdites au début de la macro de Pierrot.
 

Pièces jointes

  • Gestion_Parc_Auto_03.xls.zip
    37.8 KB · Affichages: 19
  • Gestion_Parc_Auto_03.xls.zip
    37.8 KB · Affichages: 19
  • Gestion_Parc_Auto_03.xls.zip
    37.8 KB · Affichages: 17
Dernière édition:

Pierrot93

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Re,

Merci Gruick,
Tu vas dire que j'insiste... lol... mais l'on peut tester le nom de la feuille activée... et exécuter le code ou pas le cas échéant...

Code:
Option Explicit
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name <> "nom" And Sh.Name <> "nom2" Then
    'ton code
End If
End Sub
 

Pierrot93

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Re,

A noter, dans les codes que tu donnes, je vois une fonction nommée "Révision"
Code:
Function Révision()
ainsi qu'une étiquette dans ta "sub"
Code:
Révision:

Perso j'éviterais des noms identiques, non...
 

Gruick

XLDnaute Accro
Re : Macro événementielle ou fonction ?

re,

Pendant que tu postais ta réponse, j'ai fait ce que tu me disais et ça marche...
Code:
If ActiveSheet.Name = "Stat 2010" Or ActiveSheet.Name = "Présentation" Then Exit Sub
du tonnerre, euh non, c'est pas le moment, le soleil revient.

Merci Pierrot.

Gruick
 

Dull

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Salut Shoei83, François:) , Pierrot:) , le Forum

j'ai pas tout compris au fichier mais j'ai retenu ça:

...Ce que je voudrais, c'est que la macro événementielle ne fonctionne que pour certaines feuilles, et pas sur d'autres.
Alors pourquoi ne met tu pas ta macro dans le ThisWorkbook

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
      If Sh.Name <>"Ta1èreFeuille" And Sh.Name <>"Ta2èmeFeuille" Then[COLOR=Green] ' Etc...[/COLOR]
            'TonCode
      End iF
End Sub
EDITION: Heu...C'estpasdujeu...:p

Bonne Journée
 
Dernière édition:

Gruick

XLDnaute Accro
Re : Macro événementielle ou fonction ?

Salut Dull,

C'est fait, j'y ai pensé juste au moment où je postais mon message, et puis vous m'avez pris de vitesse. J'ai remplacé le And par un Or.

Résultat final posté dans le message originel de Shoei, puisque c'est pour lui que nous avons oeuvré.

Merci les gars.

Gruick
 

Pierrot93

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Re, bonjour Dull:)

Aarf, j'aurais laissé le "and", test dans un fichier de 3 feuilles, nommées "nom1", "nom2" et "nom3" par exemple.... ne se déclenchera que sur "nom3"

Code:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name <> "nom1" And Sh.Name <> "nom2" Then
    MsgBox Sh.Name
End If
End Sub
 

Dull

XLDnaute Barbatruc
Re : Macro événementielle ou fonction ?

Re le Fil

je ne doutait pas un seul instant de ta réactivité ami Gruick ;) ...mais fais gaffes... L'ami Pierrot:) sait que je ledéteste...mêmepasvrai :D net'ymetpasaussi...:eek:

Bonne Journée les amis
 

Discussions similaires

Réponses
2
Affichages
512