[Catégorie modifiée .Net --> VBA] Worksheet_Change

cedana Messages postés 12 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 18 octobre 2013 - 19 oct. 2010 à 10:13
cedana Messages postés 12 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 18 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

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cedana Messages postés 12 Date d'inscription jeudi 3 juin 2010 Statut Membre Dernière intervention 18 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.
0
Rejoignez-nous