Des cellules capricieuses

Bonjour à vous tous, et surtout à celui (ou ceux) qui réussira à m'aider !

Je fais actuellement une formation BTS comptabilité et gestion. J'ai un dossier à préparer pour le 5 novembre sur excel

J'ai réussis, mais ma prof que j'aime tant à décidé de me mettre des bâtons dans les roues !

Il faut que je fasse clignoter certaines cellules quand ma condition est vérifiée. J'ai regardé et lu beaucoup de postes là dessus, et je n'y arrive pas. Or je n'aime pas ne pas comprendre

Et c'est là où vous pouvez intervenir.

Il faudrait que les cellules de L6 à L25 clignotent quand la condition entrée est vérifiée.

J'ai cru comprendre qu'il fallait faire des trucs de macros et tout ça...

Quelqu'un pourrait m'aider ?

Merci !

PS : le fichier joint est mon travail, les macros présentes sont des tests qui n'ont pas réussis.

Bonjour Emma,

voici la solution la plus simple : dis à ta prof adorée qu'Excel est un tableur et pas un sapin de Noël !

dhany

Merci !

Alors.. J'y ai réellement songé. Je lui ai envoyé un mail elle a répondu quoi ... "demandez aux personnes qui connaissent bien excel.. Mais il faut trouver!"

alors peut-être que ce fichier, que j'avais fait y'a pas mal de temps, pourra t'inspirer :

19exo-kleon.xlsm (20.59 Ko)

regarde la 1ère feuille ; puis va sur la 2ème feuille et clique sur le bouton « Tirage »

dhany

Alors oui je vois, merci

Par contre, comment je peux faire pour que la cellule clignote seulement quand la condition est vérifiée ?

regarde ce code VBA :

Private Sub Flash(couleur)
  Sleep ms2: [B3:D7].Interior.ColorIndex = couleur
End Sub

Sub Tirage()
  '...
  For nb = 1 To 5
    Flash 19: Flash 35: Flash 20
  Next nb
End Sub

c'est ça qui fait le flash ! en haut, la sub Flash() fait une pause de ms2 millisecondes avant de changer la couleur de remplissage de la plage de cellules fusionnées (mais le système marche aussi pour une cellule unique) ; en bas, à la fin de la Sub Tirage(), la boucle For fait 5× un triple appel de Flash(), avec successivement ces 3 codes d'index de couleurs différents : 19 ; 35 ; et 20.

donc il te suffit de faire : si la condition est vraie, alors appel de Flash avec une 1ère couleur, puis avec une 2ème couleur ; bien sûr, il faut au moins 2 couleurs différentes pour pouvoir percevoir un changement ; et c'est en ajustant le temps de pause en millisecondes que tu obtiens un clignotement plus ou moins rapide.

si ta prof croit à l'arrivée des pompiers ou de la police et te met 20/20, c'est pas ma faute, hein ?


attention : pour le Sleep (la pause en millisecondes), il faut mettre obligatoirement cette ligne de code VBA vers le début du module.

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

dans le code VBA, c'est ici, juste sous les 2 constantes :

Option Explicit

Const ms1 As Byte = 50  ' nombre de ms roulette (à adapter)
Const ms2 As Byte = 120 ' nombre de ms flash (à adapter)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

dhany

En faite, ce que je n'arrive pas à faire, c'est justement les codes :

Demande de faire telle ou telle chose. Je ne sais pas comment les traduire

Les histoires de flashs j'avais bien compris

Merci pour ton aide en tout cas !

Bonjour EmmaLoutre, Dhany,

Un autre exemple, peut-etre plus simple.....

32test-clignote.xlsm (20.93 Ko)

Cordialement,

Sub NOEL()
'
' NOEL Macro
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Flash(couleur)
Sleep ms2: [L25].Interior.ColorIndex = couleur

End Sub

J'ai fait ça pour voir ce que ça me marquait. Et y'a un message d'erreur qui me met "Erreur de compilation. Seuls les commentaires peuvent apparaître [...]"

réponse courte :

If ConditionVraie Then
  Flash 19: Flash 35
End If

l'ennui, c'est que dans le texte de ton énoncé, t'as pas précisé quelle est la condition !

alors pour une réponse plus longue et plus adaptée, j'vais télécharger ton fichier ; A+

dhany

La condition c'est que K25 soit égale à C25. Et ça doit être la cellule L25 qui clignote dans ce cas !

oh là, NON !!!! j'ai dit que la ligne spéciale doit être au début du Module !!! pas au début de la sub !!!

ligne spéciale :

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

dhany

Ah, oups xD

Promis un jour je réussirais !

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub NOEL()
'
' NOEL Macro
If K25 = C24 Then

Private Sub Flash(couleur)
Sleep ms2: [L25].Interior.ColorIndex = couleur

End Sub

Du coup j'en suis là

c'est mieux, mais pas encore ça ! patiente un moment, j'te prépare la suite (tu vas trop vite pour moi ! ).

Ahah, pas de soucis, je patiente !

Option Explicit

Const ms As Byte = 120  'nombre de millisecondes (à adapter)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub Flash(couleur)
  Sleep ms: [L25].Interior.ColorIndex = couleur
End Sub

Sub NOEL()
  If [K25] = [C24] Then
    For nb = 1 To 5
      Flash 19: Flash 35 'mets les 2 codes d'index couleur de ton choix
    Next nb
  End If
End Sub

dhany

Merci !

Je viens d'essayer et il me dit "Impossible d’exécuter le code en mode arrêt"

Qu'est-ce que cela signifie ?

* va sur Visual Basic via Alt F11 et fais Alt x r (menu Exécution / Réinitialiser)

* ensuite, relance la macro

Et maintenant ça me met "variable non définie" pour "nb"

ouppps ! j'ai oublié de déclarer nb !

Sub NOEL()
  Dim nb As Byte
  If [K25] = [C24] Then
    For nb = 1 To 5
      Flash 19: Flash 35 'mets les 2 codes d'index couleur de ton choix
    Next nb
  End If
End Sub
Rechercher des sujets similaires à "capricieuses"