Change / Selection Change

Valentin_Loupe

XLDnaute Occasionnel
Bonjour à tous,

Je voudrais tout d'abord connaître la différence entre Change et Selection Change.

Ensuite je voudrais savoir comment faire lorsque l'on veut insérer plusieurs conditions différentes dans une procédure Change : je m'explique : j'ai :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    ActiveSheet.Name = Range("C3").Value
    If Range("C110") = "Local" Then
        Range("C111").Validation.Delete
        Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesLocal"
    ElseIf Range("C110") = "Sous Sol" Then
        Range("C111").Validation.Delete
        Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesSousSol"
    ElseIf Range("C110") = "Vide Sanitaire" Then
        Range("C111").Validation.Delete
        Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesVideSanitaire"
    ElseIf Range("C110") = "Combles" Then
        Range("C111").Validation.Delete
        Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesCombles"
    ElseIf Range("C110") = "Circulation intérieure, sans paroi extérieure" Then
        Range("C111").Validation.Delete
        Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesCirculationIntérieure"
    End If
End Sub

Sauf que désormais je voudrais ajouter :

Code:
If Target.Address = "$C$141" Then
    [$C$142] = "Précisez..."
    End If
If Target.Address = "$C$141" Then
    [$C$173] = "Précisez..."
    End If
If Target.Address = "$C$141" Then
    [$C$202] = "Précisez..."
    End If

Mais aussi :

Code:
    If Range("C172") = "Local" Then
        Range("C173").Validation.Delete
        Range("C173").Validation.Add Type:=xlValidateList, Formula1:="=TextesLocal"
    ElseIf Range("C172") = "Sous Sol" Then
        Range("C173").Validation.Delete
        Range("C173").Validation.Add Type:=xlValidateList, Formula1:="=TextesSousSol"
    ElseIf Range("C172") = "Vide Sanitaire" Then
        Range("C173").Validation.Delete
        Range("C173").Validation.Add Type:=xlValidateList, Formula1:="=TextesVideSanitaire"
    ElseIf Range("C172") = "Combles" Then
        Range("C173").Validation.Delete
        Range("C173").Validation.Add Type:=xlValidateList, Formula1:="=TextesCombles"
    ElseIf Range("C172") = "Circulation intérieure, sans paroi extérieure" Then
        Range("C173").Validation.Delete
        Range("C173").Validation.Add Type:=xlValidateList, Formula1:="=TextesCirculationIntérieure"
    End If
End Sub

Et enfin :
Code:
    If Range("C201") = "Local" Then
        Range("C202").Validation.Delete
        Range("C202").Validation.Add Type:=xlValidateList, Formula1:="=TextesLocal"
    ElseIf Range("C201") = "Sous Sol" Then
        Range("C202").Validation.Delete
        Range("C202").Validation.Add Type:=xlValidateList, Formula1:="=TextesSousSol"
    ElseIf Range("C201") = "Vide Sanitaire" Then
        Range("C202").Validation.Delete
        Range("C202").Validation.Add Type:=xlValidateList, Formula1:="=TextesVideSanitaire"
    ElseIf Range("C201") = "Combles" Then
        Range("C202").Validation.Delete
        Range("C202").Validation.Add Type:=xlValidateList, Formula1:="=TextesCombles"
    ElseIf Range("C201") = "Circulation intérieure, sans paroi extérieure" Then
        Range("C202").Validation.Delete
        Range("C202").Validation.Add Type:=xlValidateList, Formula1:="=TextesCirculationIntérieure"
    End If
End Sub

Merci de votre aide précieuse !

Valentin
 
G

Guest

Guest
Re : Change / Selection Change

Bonjour,

Il y a dans excel une aide excelente qui explique les différences entre Change et Selection_Change.

Bref: Evènement Change -> quand une cellule change de valeur
Evènement Selection_Change -> quand la selection change

Les if elseif peuvent être favorablement changé en
Select case range(???)
case "Local"
case "machin"
case "truc"
end Select

L'aide en ligne est très efficace pour cela aussi.


Pour le reste, je m'en tiens là car je m'absente.

Peut-être à plus tard
 

chris

XLDnaute Barbatruc
Re : Change / Selection Change

Bonjour
Le select case proposé par Hasco est une réponse.
On ne connait pas ton classeur ni sa finalité mais je ne suis pas sûre que tout ce code doivent dépende d'une seule cellule.
Il faut optimiser :
  • plutot utiliser des positions relatives que des adresses en dur si tu ne veux pas avoir tout à refaire au moindre changement
  • remplacer ce type de code
    If Target.Address = "$C$141" Then
    [$C$142] = "Précisez..."
    End If
    If Target.Address = "$C$141" Then
    [$C$173] = "Précisez..."
    End If
    If Target.Address = "$C$141" Then
    [$C$202] = "Précisez..."
    End If

    par
    If Target.Address = "$C$141" Then
    [$C$142] = "Précisez..."
    [$C$173] = "Précisez..."
    [$C$202] = "Précisez..."
    End If
  • le code
    If Range("C110") = "Local" Then
    Range("C111").Validation.Delete
    Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=TextesLocal"
    .....
    .....
    ......
    par
    Range("C111").Validation.Delete
    Range("C111").Validation.Add Type:=xlValidateList, Formula1:="=Textes" & Replace(Range("C110").value," ","")

    car sauf erreur de ma part, la logique ne changeant pas, 2 lignes remplacent toutes les autres
Edit : replace ajouté pour tenir compte des espaces dans les libellés de C110
 
Dernière édition:

Discussions similaires

Réponses
16
Affichages
2 K
Réponses
3
Affichages
588

Membres actuellement en ligne

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU