Résolu Macro évenementielle

SCHMITX

Habitué
Bonjour,

Je souhaiterai, créer sur Excel une procédure évenementielle qui renverrait à une autre feuille lorsque la valeur d'une cellule change.
Jusque là, je n'ai pas rencontré de problème particuliers.

[cpp]Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Range("plage1"), Target) Is Nothing Then Exit Sub

Worksheets("feuille2").Activate


End Sub[/cpp]

Le problème arrive lorsque je souhaite mettre plusieurs conditions.

Par exemple:

Si la valeur change dans une plage de cellule (plage1) alors on renvoie à la feuille 2 mais, si la valeur change dans une autre plage de cellule (plage2), alors on renvoie à la feuille 3.

[cpp]Private Sub Worksheet_Change(ByVal Target As Range)

If Intersect(Range("plage1"), Target) Is Nothing Then Exit Sub

Worksheets("feuille2").Activate


'If Intersect(Range("plage2"), Target) Is Nothing Then Exit Sub

'Worksheets("feuille3").Activate


End Sub[/cpp]

Je n'arrive pas à trouver la bonne synthaxe afin que le code fonctionne.

Si vous pouvez me suggerer vos avis
Merci de vos réponses ;)
 

zeb

Modérateur
Salut,

M'enfin, c'est juste devant toi : Tes Exit Sub sont mal placés !

Mets un Stop à la ligne 2.
Lorsque la macro s'arrête, appuie sur [F8] pour voir par où ça passe ;)
 

SCHMITX

Habitué
Après quelques réflexions je suis parvenue à faire fonctionner le code.
Cependant je suis partie sur une autre syntaxe, qui ne nécessite plus l'utilisation des "exit sub"

Voici le code

[cpp]Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Range("Plage1"), Target) Is Nothing Then

Worksheets("feuille2").Activate

End If

If Not Application.Intersect(Range("Plage2"), Target) Is Nothing Then

Worksheets("feuille3").Activate


End If

End Sub[/cpp]

Peux-tu m'expliquer la différence entre "if intersect" et "if not Application.Intersect" ?

Cordialement
 

zeb

Modérateur
Meilleure réponse
Rhooooo :pfff:


If Not Application.Intersect(Plage1, Target) Is Nothing Then
Si pas intersection de plage1 et de target est rien alors ...

En bon français :
Si l'intersection de la plage 1 et de la cellule concernée n'est pas vide alors...

"Ne pas être vide" peut se dire "est plein" !

Si l'intersection de la plage 1 et de la cellule concernée existe alors...

Donc un code propre devrait ressembler à :
Code:
If Not Application.Intersect(Target, Range("Plage1")) Is Nothing Then
    Worksheets("feuille2" ).Activate
Else
    If Not Application.Intersect(Target, Range("Plage2" )) Is Nothing Then
        Worksheets("feuille3" ).Activate
    End If
End If

Ou mieux encore :
Donc un code propre devrait ressembler à :
Code:
If Not Application.Intersect(Target, Range("Plage1")) Is Nothing Then
    Worksheets("feuille2" ).Activate
ElseIf Not Application.Intersect(Target, Range("Plage2" )) Is Nothing Then
        Worksheets("feuille3" ).Activate
End If
 

zeb

Modérateur
On est là pour t'expliquer ! :)

Mais bon, dans la mesure où c'est TON code, tu as eu l'occasion d'y réfléchir, non ?
:lol:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 125
Messages
6 717 792
Membres
1 586 361
Dernier membre
Florian3549
Partager cette page
Haut