cellule clignotante
#1
Débutant XLPages

Inscription: 09/04/2009

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 09-04-2009 22h18
bonsoir à vous
je viens de télécharger la feuille excel qui traite des cellules clignotantes et j'ai un souci dans la compréhension de la macro, j'ai presque honte de poser ma question tant je la sens idiote, mais je me jette a l'eau.
L'exemple donné est dès qu'une valeur superieure a 9 sera notée dans la cellule, celle-ci a se mettra a clignoter, mais ou et comment doit-on determiner cette valeur? je n'arrive pas a trouver.
Je m'interesse à excel depuis peu de temps et par simple curiosité et je dois reconnaitre que ces cellules clignotantes me fascinent.
Meme si je me doute que ma question n'est pas tres palpitante, pourriez vous m'expliquer.
En vous remerciant par avance
Jean christophe

Hors Ligne
Rapport   Haut 

Re: cellule clignotante
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 09-04-2009 23h14
Bonsoir JeanSolla, le Forum,

Bienvenue sur XLpages.com !

Je vais essayer de t'expliquer le fonctionnement de ce classeur Cellules et Alertes clignotantes

Tout d'abord, il te faut quelques notions de VBA, ou au moins savoir comment te rendre dans l'éditeur VBE pour y observer le code utilisé. Je pense notamment que tu as lu cet Article qui traite de la méthode OnTime et t'expliquera le fonctionnement des procédures Clign() et StopClign(). Se sont elles qui gère le clignotement proprement dit.

Maintenant, passons plus précisément à l'objet de ta question : comment sont déclenchées ces procédures ?

Tout se passe dans la procédure évènementielle Workbook_SheetChange() que tu retrouves dans le module de code de l'objet ThisWorkbook et qui se présente comme suit :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim F As Worksheet
    If Target.Count > 1 Then Exit Sub
    If Not Application.Intersect(Target, Sh.Range("B3")) Is Nothing Then
        'S'assure que la même valeur apparaisse en B3 sur chaque feuille
        Application.EnableEvents = False
        For Each F In Worksheets
            If F.Name <> Sh.Name Then
                F.Range("B3").Value = Target.Value
            End If
        Next F
        Application.EnableEvents = True
        'Lance ou stoppe le clignotement
        If Val(Target.Value) > 9 Then Clign Else StopClign
    End If
End Sub

Je vais décomposer cette procédure pour tenter de t'expliquer...

Tout d'abord, l'évènement lui même :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
...
...
...
End Sub
C'est dans cette procédure que tout se passe... Cet évènement se déclenche lorsque l'utilisateur modifie le contenu de n'importe quelle cellule sur n'importe quelle feuille du classeur. Dès que l'utilisateur valide une modification dans une cellule, le code VBA situé à l'intérieur de cette procédure se déclenche. L'argument Sh pointe sur la feuille en cours et l'argument Target pointe sur la cellule qui vient d'être modifiée.

   If Target.Count > 1 Then Exit Sub
Avec cette ligne de code, on décide de ne prendre en compte que la modification d'une cellule isolée : Target.Count donne le nombre de cellules en cours de sélection au moment de la modification par l'utilisateur. Si la sélection contient plusieurs cellules (et non une seule), alors on sort de la procédure sans rien faire (Exit Sub).
Par exemple, si l'utilisateur sélectionne une plage de cellules et appuie sur la touche Suppr, alors Target.Count sera supérieur à 1 (c-à-d que plus d'une cellule vient d'être modifiée), on sort donc de la procédure sans continuer le traitement qui suit.

   If Not Application.Intersect(Target, Sh.Range("B3")) Is Nothing Then
       ...
       ...
       ...
    End If
Le code VBA situé à l'intérieur de ce bloc conditionnel ne sera exécuté que si Target correspond à la cellule B3 (quelque soit la feuille de calcul). Autrement dit, on ne fait le traitement qui suit que si l'utilisateur vient de modifier une cellule située en "B3" (c'est là qu'est la fameuse valeur qu'il convient de surveiller !)

       'S'assure que la même valeur apparaisse en B3 sur chaque feuille
        Application.EnableEvents = False
        For Each F In Worksheets
            If F.Name <> Sh.Name Then
                F.Range("B3").Value = Target.Value
            End If
        Next F
        Application.EnableEvents = True
L'utilisateur vient donc de modifier la cellule B3 d'une feuille de calcul. Comme le précise le commentaire en vert dans le code, ce bloc d'instructions permet de reporter cette même valeur dans chaque cellule B3 sur chacune des feuilles du classeur (pour que chaque onglet réponde au même test de valeur).

       'Lance ou stoppe le clignotement
        If Val(Target.Value) > 9 Then Clign Else StopClign
Je pense que c'est cette dernière partie qui répondra à ta question : c'est ici que la procédure Clign() ou la procédure StopClign() sera déclenchée. On teste ici la valeur de Target et on lance Clign() si cette valeur est supérieure à 9. On lancera StopClign() dans le cas contraire.

Voilà, j'espère que ça t'aidera un peu à comprendre le fonctionnement de l'ensemble...

A vrai dire, j'ai fait ce classeur Exemple il y a à peu près 3 ans... Je m'aperçois aujourd'hui qu'il conviendrait que je revois un peu ce code VBA à l'occasion. Ca demande certainement un peu d'optimisation me semble-t'il...

Cordialement,




Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: cellule clignotante
#3
Débutant XLPages

Inscription: 09/04/2009

Messages: 2

Système d'exploitation:
PC
Version Excel utilisée:
2003
Posté le : 10-04-2009 19h20
Bonsoir Didier,

Un grand merci pour ce temps que tu m'as accordé avec cette réponse très détaillée.
Je vais la décortiquer avec attention et mettre tout ça en pratique.
J'ai une autre question, je ne sais pas si c'est le lieu pour la poser cependant elle découle de ta réponse.
J'ai commencé à m'interesser aux macros d'excel en découvrant que l'on pouvait enregistrer ce que l'on faisait sur une feuille excel grâce à l'enregistreur.J'ai appris quelques bases grâce a celui-ci mais aujourd'hui je tourne un peu en rond.
Quel ouvrage me conseille-tu pour me mettre vraiment à Vba?

Merci et bon week end de Pâques
Jean Christophe.

Hors Ligne
Rapport   Haut 

Re: cellule clignotante
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 10-04-2009 21h09
Bonsoir Jean-Christophe,

Je ne saurais te conseiller un livre particulier pour apprendre VBA. Certains te diront qu'un livre ne sert à rien... Je ne suis pas de cet avis pour ma part, mais je dois t'avouer que les livres qui m'ont permis d'apprendre ne sont plus d'actualité aujourd'hui. Aussi, comme je préfère parler de ce que je connais bien, je me garderais de te donner telle ou telle référence de livre.

Je te conseillerais simplement de toujours faire une recherche sur le net lorsque tu as repéré un éventuel achat de ce type. Tu trouveras presque toujours des commentaires et avis de lecteurs. Fais notamment une recherche sur l'auteur : ça te donnera une idée du sérieux du livre en question.

Par ailleurs, voici ce que j'ai écrit il y a quelques temps à un visiteur qui m'a posé la question sur "comment commencer avec VBA ?" :
(je pense que cette réponse est également adaptée à ta demande)

Tu trouveras pas mal de choses déjà dans le présent site (voir notamment la catégorie d'articles VBA pour débutants)   et sur le net en général (voir la rubrique "liens Web" de ce site par exemple). Il te faut par contre, te confronter souvent à de la documentation dans la langue de Shakespeare. C'est comme ça.

Voici la liste des prérequis qui me semblent indispensables si tu souhaites apprendre VBA, il te faut :
- un bon projet que tu construiras toi-même, de façon progressive au fur et à mesure de tes connaissances (pas la peine d'aller trop vite si tu souhaites vraiment comprendre et apprendre).
- un bonne habitude de consulter l'aide VBA (indispensable !).
- une fréquentation régulière des forums de discussions Excel, ici ou ailleurs (on apprend plein de choses dans ces communautés). Par ailleurs, n'hésite pas à exposer dans ces endroits les points que tu ne comprends pas : nombre de bénévoles partageront volontiers leurs connaissances et leur expérience. Pour rappel, ici j'ai créé un forum "Espace débutants", il est fait essentiellement pour ça. Par ailleurs, c'est là que je puise les idées de tutoriels pour le présent site, alors n'hésite pas.
- un bon bouquin sur les bases de la programmation VBA (pourquoi pas ?).
- Et enfin,... de la patience et de la persévérance !

N'hésites pas à revenir ici si tu as des questions à poser au fur et à mesure de ton apprentissage...

Cordialement,

Et bon week-end de Pâques !

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 


Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Qui consulte actuellement ce sujet ?   1 Utilisateur(s) anonymes