Decalage sur une cellule en VBA

a3lain

XLDnaute Junior
Bonjour,
Newbie,
Je voudrais parcourir une plage de cellule afin de voir si une valeur est négative ou non. Quand elle l'est , je voudrais colorier en rouge le fond ET placer un caractère type fleche pointant vers le bas dans la colonne juste à sa droite.
Je ne sais pas comment récuperer la cellule où je suis pour faire un decalage vers la droite du type par exemple si j'ai en d14 une valeur negative, ecrire en e14 'NEG' par exemple.
Si j'utilise seulement ActiveCell, je suis logiquement n'importe où.
PS :Est ce que c = 'd14' puis 'd15' dans mon exple ci dessous?

For Each c In Range('d14:d70')
If c <> '' Then
If c < 0 Then
c.Interior.ColorIndex = 3
ActiveCell.Offset(0, 1) = 'Y'
Else: c.Interior.ColorIndex = 4
End If
Else: c.Interior.ColorIndex = 0
End If
Next c

Merci
 

a3lain

XLDnaute Junior
Bonsoir,

C'est ce que j'ai fait. Cela marchote mais seulement le problème est que je pars dans une boucle sans fin en ayant toujours le sablier. Je ne peux sortir que par escape.

Une idée? C'est un peu comme si je me décalais dans la colonne réellement?

Merci.
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir a3lain, JeanMarie, N_Christian,

C'est ce que j'ai fait. Cela marchote mais seulement le problème est que je pars dans une boucle sans fin en ayant toujours le sablier. Je ne peux sortir que par escape.
Humm, n'aurais-tu pas inclus ce code dans l'évènement Change() de la feuille par hasard ? C'est pour moi, la seule chose qui pourrait expliquer ce qui t'arrive... et si ton objectif est de faire marcher ce code 'à la volée', c'est à dire à chaque saisie de valeur dans la plage D14:D70, je te proposerais plutôt ce genre de code (à placer dans le module de code de la feuille) :

Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Application.Intersect(Target, Range('D14:D70')) Is Nothing Then
            With Target
                  Select Case .Value
                  Case ''
                        .Interior.ColorIndex = xlNone
                  Case Is < 0
                        .Interior.ColorIndex = 3
                        .Offset(0, 1) = 'Y'
                  Case Is >= O
                        .Interior.ColorIndex = 4
                  End Select
            End With
      End If
End Sub
Cordialement,

Message édité par: myDearFriend!, à: 01/09/2005 01:19
 
A

a3lain

Guest
Bonjour et merci à tous,

Je vais essayer ce code en l'adaptant à mon cas mais surtout en le comprenant mieux. Etant Newbie, il faut que je me forme en comprenant au mieux ce que je fais.

Par contre, est ce qaue l'on pourrait m'aiguiller sur ce qui se passe du fait d'utiliser l'evenement Change car je ne vois pas de difference majeure entre l'effet de nos codes respectifs, d'autant que si j'enlève uniquement la ligne c.Offset(0, 1) = 'Y', tout semble fonctionner. C'est sa presence qui met tout en boucle.

Private Sub Worksheet_Change(ByVal Target As Range)
For Each c In Range('d14:d70')
If c <> '' Then
If c < 0 Then
c.Interior.ColorIndex = 3
c.Offset(0, 1) = 'Y'
Else: c.Interior.ColorIndex = 4
End If
Else: c.Interior.ColorIndex = 0
End If
Next c
End Sub

Merci encore
 
R

Reynald

Guest
Bonjour

Normal car ta boucle redémarre chaque fois que tu place ton Y.

Essaie plutôt ce code :

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Target.Column = 2 And Target.Row >= 14 And Target.Row <= 70 Then
If Target <> '' Then
If Target < 0 Then
Target.Interior.ColorIndex = 3
Target.Offset(0, 1) = 'Y'
Else: Target.Interior.ColorIndex = 4
End If
Else: Target.Interior.ColorIndex = 0
End If
End If
End Sub

Bonn journée
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour A3lain, Didier, Jena-Marie, le Forum

Ton problème semble provenir d'une certaine incompréhension de la macro évènementielle 'Worksheet_Change'...

Chez Didier, il applique :
If Not Application.Intersect(Target, Range('D14:D70')) Is Nothing Then


Chez toi tu appliques :
For Each c In Range('d14:d70')


La différence primordiale est que chez Didier la maco évènementielle ne se déclenchera que si on change une des Cellules D14:D70...

Chez toi elle se déclenche à tous les changement sur toute la feuille (y compris sur le Offset dans la colonne 'E')...

C'est ceci qui semble clocher...

Bonne Journée
[ol]@+Thierry[/ol]

EDITION !!!

BOnjour Reynald, désolé je ne t'avais pas vu, mais nous sommes bien dans le même sens de solution pour ce problème.

Bonne Journée
[ol]@+Thierry[/ol]

Message édité par: _Thierry, à: 01/09/2005 09:08
 
A

a3lain

Guest
Merci à tous,

Grace à vous tous , je crois commencer à comprendre effectivement ce qui se passe (explication de la boucle après écriture dans la feuille par le programme notamment). Je vais tester tout ceci dans la journée et je vous dirais par un post là où j'ai abouti mais je crois entrevoir la sortie.

Merci
 

Discussions similaires

Statistiques des forums

Discussions
312 333
Messages
2 087 375
Membres
103 529
dernier inscrit
gonzi