VBA imbriquer deux worksheet change

Bonjour,

je n'arrive pas a imbriquer deux worksheet change ensemble sur une même feuille.

L'une permet de ce déplacer dans une feuille suivant liste déroulante. Seule, elle fonctionne.

L'autre permet de se déplacer d'une feuille à l'autre. Elle devienne active et visible.

premier (liste en I2):

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range

If Not Intersect(Range("I2"), Target) Is Nothing Then
If Target.Cells(1, 1) = "" Then Exit Sub
Set Cel = Columns("AK").Find(what:=Target.Cells(1, 1), LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Application.ScreenUpdating = False
Application.Goto Cel, Scroll:=True
ActiveWindow.ScrollRow = Cel.Row - 1
ActiveWindow.ScrollColumn = 1

End If
End Sub

second (liste en M2):

Private Sub Worksheet_Change2(ByVal Target As Range)

If Target.Address = ThisWorkbook.ActiveSheet.Range("M2").Address Then
For recherche_sheet = 1 To ThisWorkbook.Worksheets.Count
If ThisWorkbook.Worksheets(recherche_sheet).Name = ThisWorkbook.ActiveSheet.Range("M2").Value Then
ThisWorkbook.Worksheets(recherche_sheet).Select
Exit Sub
End If
Next recherche_sheet 'poursuite boucle
End If
End Sub

Merci beaucoup de votre aide

Bonsoir,

essayez avec un ElseIf :

If première condition avec un test de change sur la cellule I2 then
' on va sur la feuille sélectionnée sur la liste de choix
ElseIf deuxième test de condition Target.Address = ThisWorkbook.ActiveSheet.Range("M2").Address then
' on fait la deuxième action
End If

@ bientôt

LouReeD

Bonjour à tous,

au passage :
If Target.Address = ThisWorkbook.ActiveSheet.Range("M2").Address Then
est équivalent à :
If Target.Address = "M2" Then
eric

Bonjour…

Avec mes interprétations de l’action : choix de la colonne et de l’onglet pour la cellule visée (voir fichier joint)

Je pense être le promoteur du If Target.Address = [I2].Address Then , que des utilisateurs ne savent pas qu’elle permet d’éviter, dans certaines situations, des problèmes (par exemple : récursivité, effacement malvenu de cellules).

Eric (), tu as un autre problème dans ta proposition , c’est plutôt If Target.Address = "$M$2" Then

D’où mes proposition (voir fichier joint, ici 2 cas)

Private Sub Worksheet_Change(ByVal R As Range)
  Dim C As Range, n As Byte
  If R.Address = [I2].Address Then
    If R = "" Then Exit Sub
    Set C = Columns("AK").Find(R.Value, MatchCase:=1)
    If Not C Is Nothing Then Application.Goto C(1, 1)
  End If
  If R.Address = [M2].Address Then Application.Goto Sheets(R.Text).Cells(1, [I2].Value)
End Sub
'ou
Private Sub Worksheet_Change(ByVal R As Range)
  Dim C As Range, n As Byte
  If R.Address = [M2].Address Then
    If R = "" Then Exit Sub
    Set C = Columns("AK").Find(R.Value, MatchCase:=1)
    If Not C Is Nothing Then Application.Goto Sheets(R.Text).Cells(1, [I2].Value)
  End If
End Sub
7aller-vers.xlsm (19.66 Ko)

LouReed (), le Application.Goto réclame une cellule précise, il n’est pas précisé laquelle.

J’aurais pu proposer (2 lignes de plus avec le Else)

   …
   If Not C Is Nothing Then
     Application.Goto C(1, 1)
  else
     If R.Address = [M2].Address Then Application.Goto Sheets(R.Text).Cells(1, 1) ‘ou autre
   End if
End Sub

Bonjour,

oui, tu as raison Ordonc, à cette heure j'économise les neurones et les caractères.
Le $ est beaucoup trop cher en ce moment

Je ne vois pas trop dans quel cas = [M2].Address pourrait avoir une plus-value sur = "$M$2" vu que ça retourne la même chose.
Tu saurais m'en dire plus stp ?
eric

Bonsoir,

Je pense être le promoteur du If Target.Address = [I2].Address Then ,

Pourquoi 2 calculs, alors que "$I$2" n'en requière aucun?

[I2] évalue la valeur de la cellule, .Address calcule son adresse...

Bref, comme promoteur, ????

bonsoir,

merci de vos réponse très intéressant pour moi qui en apprend tout les jours.

Mais, j'ai mal expliqué ma demande. Je recherche a combiner une liste pour descendre la feuille active (sur des lignes plus bas), et une seconde liste différente pour sauter sur une autre feuille.

Merci pour votre recherche que je réutiliserais.

Bonsoir,

voir fichier joint avec un "ElseIf" et une navigation en fonction d'une liste de nom des feuilles et une liste de numéro de ligne pour le scroll.
Le tout est mis dans "ThisWorkbook" afin que ceci fonctionne sur toutes les feuilles par exemple :

@ bientôt

LouReeD

RE (avec un peu de retard )

Salut LooReed (à cause du RE)

Vous ne devez pas souvent travailler avec des tableaux d’onglet, non ?

Exemple lors de la conception * d’un Tableau (nommé TB), tester cette évènementielle (clic sur le premier titre de ce tableau)

Private Sub Worksheet_SelectionChange(ByVal R As Range)
  If Intersect(R, [TB]) Is Nothing And R.CountLarge = 1 Then
    If R.Address = "$B$2" Then MsgBox "OUI" Else MsgBox "NON"
    If R.Address = [TB].Item(0, 1).Address Then MsgBox "OUI" Else MsgBox "NON"
  End If
End Sub

vous aurez OUI OUI

*oups, pas prévu au départ un déplacement du tableau dans la feuille !

Quand cela sera fait, avec la même événementielle vous n’aurez pas la même réponse !

Pour vous éviter beaucoup de dépenses (en $ n'est-ce pas Eric ?) vous avez, ici, un fichier joint …

Bonjour à tous,

Notez que si Eriiic souhaite économiser les dollars (il a raison, les taux US montent...)

Ce sera donc If Target.Address(0, 0) = "M2" Then

Afin que l'adresse ne soit plus en absolue mais en relative.

Bonjour,

surtout que deux 0 c'est 2 fois rien, ne nous retenons pas
eric

Bonsoir,

Salut LouReed (à cause du RE)

@ bientôt

LouReeD

Rechercher des sujets similaires à "vba imbriquer deux worksheet change"