CathyAstuce

VBA

GEMCCAP CONSEIL INFORMATIQUE BUREAUTIQUE
Formation - Conception Sites Internet
Applications Informatiques Personnalisées
Communauté partenaire Microsoft

Fonctions pour EXCEL

  Somme des valeurs d'une plage selon la couleur de fond de cette plage
Numéro de la semaine
Jour de Pâques
  Nom du classeur, de l'onglet, du dossier contenant le classeur
Un timer (code s'exécutant toutes les x secondes)

Remonter I. Somme des valeurs d'une plage selon la couleur de fond de cette plage

Public Function SOMME_SI_COULEUR(PlageSomme As Range, PlageCouleur As Range) As Double
   Dim Cel As Range
  Dim Som As Double

   For Each Cel In PlageSomme
    If Cel.Interior.ColorIndex = PlageCouleur.Interior.ColorIndex Then Som = Som + Cel
   Next
   SOMME_SI_COULEUR = Som
End Function

Cette fonction pose un problème, car elle ne se met pas automatiquement à jour lorsque vous changez la couleur de fond de PlageCouleur ou une couleur de fond d'une ou plusieurs cellules de la plage PlageSomme. En conséquence, vous êtes obligé de 'bidouiller' : soit vous fermer le classeur en enregistrant, puis vous le réouvrez, soit vous modifiez une cellule entrant en compte dans la formule d'une autre cellule, soit vous sélectionnez la cellule contenant la fonction  SOMME_SI_COULEUR, vous cliquez dans la barre de formule et appuyez sur la touche Entrée.

Remonter II. Numéro de la semaine

Cette fonction donne le numéro de la semaine selon la norme Européenne (1ère semaine = 1ère semaine de 4 jours) :

Public Function NoSem(UneDate As Date) As Integer 
   On Error Resume Next 
   NoSem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays))
End Function

Remonter III. Nom du classeur, de l'onglet, du dossier contenant le classeur

Dans une cellule, vous pouvez utiliser la fonction CELLULE("nomfichier") pour insérer le nom complet d'un fichier, mais vous n'avez aucune fonction qui vous propose le simple nom du fichier, le chemin du classeur et le nom de l'onglet. Vous pouvez donc tapez ces fonctions dans un module du classeur et les utiliser comme fonction dans une cellule.

Public Function Nom_Classeur() As String
On Error Resume Next
   Nom_Classeur = ActiveWorkbook.Name
End Function

Public Function Chemin_Classeur() As String
On Error Resume Next
   Chemin_Classeur = ActiveWorkbook.Path
End Function

Public Function Nom_Onglet(Plage As Range) As String
On Error Resume Next
   Nom_Onglet = Plage.Parent.Name
End Function

Dans une procédure si vous avez besoin du nom complet du classeur (chemin & nom) utiliser la propriété FullName :(ActiveWorkbook.FullName).

Remonter IV. Jour de Pâques

L' auteur de ce code est Marc Salacroup et je l'ai trouvé sur "Le petit monde de Visual Basic".

Public Function Jour_Paques(An As Integer) As Date

Dim a As Integer, b As Integer, c As Integer, d As Integer, e As Integer, f As Integer
Dim g As Integer, h As Integer, i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer, n As Integer, p As Integer

  a = An Mod 19
  b = An \ 100
  c = An Mod 100
  d = b \ 4
  e = b Mod 4
  f = (b + 8) \ 25
  g = (b - f + 1) \ 3
  h = (19 * a + b - d - g + 15) Mod 30
  i = c \ 4
  k = c Mod 4
  l = (32 + 2 * e + 2 * i - h - k) Mod 7
  m = (a + 11 * h + 22 * l) \ 451
  n = (h + l - 7 * m + 114) \ 31
  p = (h + l - 7 * m + 114) Mod 31
  Jour_Paques = DateSerial(An, n, p + 1)
End Function

Remonter V. Un timer (code s'exécutant toutes les x secondes)

Dans un module tapez le code suivant :

Dim Lheure As Double
Dim Interval as Integer

Sub LancerTimer(NbS as integer)
'L'application ExecutionTimer se lancera toutes les 0 heure, 0 minute et Interval seconde
   Interval =NbS
   Application.OnTime Now + TimeSerial(0, 0,Interval ), "ExecutionTimer"
End Sub

Sub ArretTimer()
   On Error Resume Next
   Application.OnTime Lheure, "ExecutionTimer", , False
End Sub

Sub ExecutionTimer()
'code à exécuter à la fin de chaque Interval secondes

'code obligatoire
   Lheure = Now + TimeSerial(0, 0, Interval )
   Application.OnTime Lheure, "ExecutionTimer"
End Sub

Vous lancez le timer en appelant la procédure LancerTimer(N), puis elle exécute le code de ExecutionTimer toutes les N secondes et enfin, vous l'arrêter avec ArretTimer.

AccueilDébut de la page