Sub - compteur de modifications
Bonjour à tous!
Débutant avec les "sub", fonctions avancées d'Excel etc., je me tourne vers vous qui pourrez peut-être m'éclairer. J'ai consulté des tuto qui m'ont un peu aidé mais je n'arrive décidément pas à faire fonctionner ma fonction.
Tout d'abord, afin de présenter le "contexte" (mais cette première partie de la formule fonctionne):
Dans un but de calcul de statistiques, j'aimerais qu'une cellule compte le nombre de fois qu'une autre cellule est modifiée.
J'ai utilisé ceci:
Sub Worksheet_Change(ByVal Target As Range)
Compteur = [AW1]
If Target.Row = 2 And Target.Column = 25 Then Compteur = Compteur + 1
[AW1] = Compteur
End Sub
J'avais, pendant un temps, utilisé Target = [X1], qui semblait fonctionner aussi.
Je n'ai jusqu'ici réussi à faire fonctionner cette fonction qu'en la mettant dans le "code" d'une feuille. J'en ai 12: une par mois. J'ai tenté de le mettre en "Module" et d'y mettre la mention "Public" pour qu'il agisse sur toutes mes feuilles: sans succès.
Dans le "pire" des cas, je pourrais bien entendu recopier la fonction dans chaque feuille... mais si je peux comprendre comment faire plus simplement, je préfèrerais évidemment
J'aimerais de plus, et c'est là que ça se corse (pour moi, en tous cas), ajouter un second compteur. Celui-ci se mettrait à jour à chaque consultation du fichier. Pour ce faire, j'avais pensé utiliser une fonction "=AUJOURDHUI()" et un compteur identique au premier. Cependant, voici mes deux problèmes:
1) Il semble que je ne puisse pas mettre deux "sub" sur une seule feuille. J'avais tout d'abord tenté ceci:
Sub Worksheet_Change(ByVal Target As Range)
Compteur = [AW1]
If Target.Row = 2 And Target.Column = 25 Then Compteur = Compteur + 1
[AW1] = Compteur
End Sub
Sub Worksheet_Change(ByVal Target As Range)
Compteur = [AY1]
If Target.Row = 1 And Target.Column = 50 Then Compteur = Compteur + 1
[AY1] = Compteur
End Sub
Ça ne fonctionne malheureusement pas.
J'ai tenté de renommer les compteurs du second "sub" en "compteur2", sans succès.
J'ai tenté ceci:
Sub Worksheet_Change(ByVal Target As Range)
Compteur = [AW1]
If Target.Row = 2 And Target.Column = 25 Then Compteur = Compteur + 1
[AW1] = Compteur
Compteur = [AY1]
If Target.Row = 1 And Target.Column = 50 Then Compteur = Compteur + 1
[AY1] = Compteur
End Sub
qui ne fonctionne pas plus. N'existe-t-il pas un "mot lien" me permettant de faire coexister ces deux fonctions?
2) Je pensais mettre une cellule "=AUJOURDHUI()" comme référence. À chaque ouverture du fichier, elle serait "mise à jour automatiquement"... Mais j'ai l'impression qu'en réalité, puisque la formule de la cellule ne change pas, ma sub ne comptera pas cette mise à jour comme une variation et n'ajoutera rien au compteur... Je n'ai pas pu vérifier, puisque, comme indiqué au point 1), ma seconde "sub" ne fonctionne pas
D'avance, je vous remercie pour l'attention portée à mes question et pour votre aide précieuse! À défaut de solutions, un tuto me permettant de mieux comprendre ce que je fais (mal) me suffirait! Mais trouver un tuto adapté à mon besoin concret me semble compliqué...
Bonjour
Merci pour cette réponse rapide! Je ne suis pas sûr de comprendre toutes les lignes de la fonction mais elle fonctionne effectivement
Le compteur d'ouverture de fichier est parfait!
1) Je comptais initialement en mettre un sur chacune des douze feuilles de calcul: la cellule "consultée" et le compteur seraient systématiquement placés aux mêmes coordonnées mais chaque compteur compterait les modif. de la cellule du mois concerné.
Ne puis-je pas simplement ajouter les noms des autres feuilles ici:
With Sheets("Feuil2")?
J'ai essayé de "lister" sans succès. -> With Sheets("Feuil2"; "Feuil3") ou quelque chose dans le style... Est-ce possible? En utilisant un autre séparateur?
2) À quoi sert cette partie-ci du code proposé? (Pour ma culture
Select Case Sh.Name
Case "toto", "titi", "roro" ' Liste des pages non concernées
Case Else
Je suis curieux et j'aimerais être sûr de comprendre le fonctionnement de la fonction... comme ça je pourrai tenter de la décliner au besoin!
Merci!
Bonjour
Avec le même code tu peux avoir dans chaque feuille le compteur de la feuille concernée
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Select Case Sh.Name
Case "toto", "titi", "roro" ' Liste des pages non concernées
Case Else
If Target.Row = 2 And Target.Column = 25 Then
Range("B1") = Range("B1") + 1
End If
End Select
End SubLa partie Case "toto", "titi", "roro" est juste pour te montrer un exemple de code que tu pourrais avoir si tu avais des pages dans lesquelles tu ne veux pas comptabiliser les modifications
Exemple si dans ton classeur tu as tes 12 pages + la page "Total" + la page "Synthèse" ton code deviendrait
Select Case Sh.Name
Case "Total", "Synthèse" ' Liste des pages non concernées
Case ElseMais si dans ton classeur tu n'as que tes 12 pages ton code pourrait ressembler à ceci
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Row = 2 And Target.Column = 25 Then
Range("B1") = Range("B1") + 1
End If
End SubUne aide rapide et efficace, des explications simples et compréhensibles... Que demander de plus!
Merci beaucoup