cedana
Messages postés12Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention18 octobre 2013
-
19 oct. 2010 à 10:13
cedana
Messages postés12Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention18 octobre 2013
-
19 oct. 2010 à 16:22
Bonjour à tous.
Voici mon problème. Dans une feuille, en fonction de la valeur saisie en colonne D, le curseur se déplace en colonne E ou F. Lorsque je saisie une valeur dans l'une de ces 2 dernières colonnes ou les 2 (mais c'est très rare) je souhaite après validation de la saisie qu'une autre procédure soit appelée. Mais je n'y arrive pas, alors je vous sollicite pour un peu d'aide.
J'utilise Excel 2000. Merci d'avance.
Voici la 1ère partie du code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Set Plage = Range("D" & Target.Row)
If Plage.Value >= 7000 And Plage.Value <= 8750 Then Plage.Font.ColorIndex = 1
If Plage.Value >= 7000 And Plage.Value <= 8750 Then Plage.Offset(0, 1).Select
If Plage.Value >6000 And Plage.Value < 7000 Then Plage.Font.ColorIndex 3
If Plage.Value >= 6000 And Plage.Value < 7000 Then Plage.Offset(0, 2).Select
End Sub
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 19 oct. 2010 à 13:29
Salut
Prends note de la catégorie de ta question pour la prochaine fois - merci.
Avec ton code actuel, dès qu'il se passe quelque chose n'importe où sur ta feuille, tu vas faire des actions.
C'est, à mon avis, inutile et perturbant puisque tu imposes un déplacement.
Pourquoi ne pas conditionner tes coloriages et déplacement uniquement lorsqu'un élément de la colonne D est modifié ?
Dim oRange As Range
Set oRange = Intersect(Target, Range("D:D"))
If Not oRange Is Nothing Then
Debug.Print "Une donnée changée dans la cellule " & oRange.Address
End If
Dans tes If, tu répètes deux fois chaque test : Inutile, il te suffit de passer à la ligne après le Then pour y coller les instructions, sans oublier d'ajouter un End If (même structure que mon exemple)
Voir aussi les ElseIf pour éviter de retester les valeurs intermédiaires, exemple :
If r >= 7000 And r <= 8750 Then
' Code
ElseIf r >= 6000 Then
' Code
End If
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
cedana
Messages postés12Date d'inscriptionjeudi 3 juin 2010StatutMembreDernière intervention18 octobre 2013 19 oct. 2010 à 16:22
Merci Jack pour ta réponse. Dans mon code j'ai oublié une ligne:
If Not Intersect(Target, Columns("D:D") Is Nothing, mais ça ne change rien quant à la mauvaise utilisation des If et Then. Je vais donc modifier ce code comme indiqué.
Merci encore pour ton aide.
A+ sur le forum.