Se connecter avec
S'enregistrer | Connectez-vous
Résolu

Macro évenementielle

Dernière réponse : dans Programmation
Partagez

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.

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3. If Intersect(Range("plage1"), Target) Is Nothing Then Exit Sub
  4.  
  5. Worksheets("feuille2").Activate
  6.  
  7.  
  8. End Sub


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.

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3. If Intersect(Range("plage1"), Target) Is Nothing Then Exit Sub
  4.  
  5. Worksheets("feuille2").Activate
  6.  
  7.  
  8. 'If Intersect(Range("plage2"), Target) Is Nothing Then Exit Sub
  9.  
  10. 'Worksheets("feuille3").Activate
  11.  
  12.  
  13. End Sub


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 ;) 

Autres pages sur : macro evenementielle

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 ;) 

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

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.  
  3. If Not Application.Intersect(Range("Plage1"), Target) Is Nothing Then
  4.  
  5. Worksheets("feuille2").Activate
  6.  
  7. End If
  8.  
  9. If Not Application.Intersect(Range("Plage2"), Target) Is Nothing Then
  10.  
  11. Worksheets("feuille3").Activate
  12.  
  13.  
  14. End If
  15.  
  16. End Sub


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

Cordialement

Meilleure solution

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 à :
  1. If Not Application.Intersect(Target, Range("Plage1")) Is Nothing Then
  2. Worksheets("feuille2" ).Activate
  3. Else
  4. If Not Application.Intersect(Target, Range("Plage2" )) Is Nothing Then
  5. Worksheets("feuille3" ).Activate
  6. End If
  7. End If


Ou mieux encore :
Donc un code propre devrait ressembler à :
  1. If Not Application.Intersect(Target, Range("Plage1")) Is Nothing Then
  2. Worksheets("feuille2" ).Activate
  3. ElseIf Not Application.Intersect(Target, Range("Plage2" )) Is Nothing Then
  4. Worksheets("feuille3" ).Activate
  5. End If
Contenus similaires
Posez votre question
Posez votre question