Bonjour =E0 tous,
J'aimerai savoir comment faire en vba pour savoir si la=20
cellule selectionn=E9e est dans une plage nomm=E9?
J'aimerai mettre ce code dans l'=E9v=E9nement Selection_Change.
En fonction de la plage je dois afficher un userform=20
diff=E9rent.
Merci de votre aide.
Cordialement.
Jed
" s'il y a présence d'une plage nommée dynamiquement (DECALER...) "
et tu aurais pu ajouter, Nom représentant une constante, une formule ...
En voici une spécialement pour toi ;-))
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news: Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
Bonjour AV,
" s'il y a présence d'une plage nommée dynamiquement (DECALER...) "
et tu aurais pu ajouter, Nom représentant une constante, une formule ...
En voici une spécialement pour toi ;-))
'---------------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next
For Each N In ThisWorkbook.Names
Nom = Range(N.RefersTo).Name.Name
If Err = 0 Then
Set Rg = Intersect(Target, Range(Nom))
If Not Rg Is Nothing Then
MsgBox "La cellule " & Target.Address(0, 0) & _
" fait parti de la plage nommée : " _
& Nom & " ."
End If
Else
Err = 0
End If
Next
Set Rg = Nothing
End Sub
'---------------------------------
Salutations!
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news: eBvKzKLzEHA.2692@TK2MSFTNGP10.phx.gbl...
Ave Denis,
Un bémol :
Il me semble que la méthode va échouer s'il y a présence d'une plage nommée
dynamiquement (DECALER...)
" s'il y a présence d'une plage nommée dynamiquement (DECALER...) "
et tu aurais pu ajouter, Nom représentant une constante, une formule ...
En voici une spécialement pour toi ;-))
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news: Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
AV
En voici une spécialement pour toi ;-))
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" ! Et mon message si je suis "dans" ma plage hein ? Faudrait voir à s'appliquer un peu....
AV
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news:
Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
En voici une spécialement pour toi ;-))
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" !
Et mon message si je suis "dans" ma plage hein ?
Faudrait voir à s'appliquer un peu....
AV
'---------------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next
For Each N In ThisWorkbook.Names
Nom = Range(N.RefersTo).Name.Name
If Err = 0 Then
Set Rg = Intersect(Target, Range(Nom))
If Not Rg Is Nothing Then
MsgBox "La cellule " & Target.Address(0, 0) & _
" fait parti de la plage nommée : " _
& Nom & " ."
End If
Else
Err = 0
End If
Next
Set Rg = Nothing
End Sub
'---------------------------------
Salutations!
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
eBvKzKLzEHA.2692@TK2MSFTNGP10.phx.gbl...
Ave Denis,
Un bémol :
Il me semble que la méthode va échouer s'il y a présence d'une plage nommée
dynamiquement (DECALER...)
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" ! Et mon message si je suis "dans" ma plage hein ? Faudrait voir à s'appliquer un peu....
AV
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news:
Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
michdenis
Bonjour AV,
Ce n'est que pour le plaisir parce que le demandeur n'utilise jamais ce type de bidule !!!
;-)
Je compte sur toi pour tester tous les cas de figure !
'---------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rg As Range, N As Name, Nom As String, A As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = "" If InStr(1, N.RefersTo, "OFFSET", vbTextCompare) <> 0 Then A = Right(N.RefersTo, Len(N.RefersTo) - 1) Nom = Range(A).Parent.Name & "!" & Range(A).Address Else Nom = Range(N.RefersTo).Name.Name End If Set rg = Intersect(Target, Range(Nom)) If Err = 0 Then If Not rg Is Nothing Then Message = Message & "La cellule " & _ Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & N.Name & " ." & vbCrLf End If Else Err = 0 End If Next If Message <> "" Then MsgBox Message End If Set rg = Nothing End Sub '----------------------------------------
Salutations!
"AV" a écrit dans le message de news:
En voici une spécialement pour toi ;-))
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" ! Et mon message si je suis "dans" ma plage hein ? Faudrait voir à s'appliquer un peu....
AV
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news:
Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
Bonjour AV,
Ce n'est que pour le plaisir parce que le demandeur n'utilise jamais ce type de bidule !!!
;-)
Je compte sur toi pour tester tous les cas de figure !
'----------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rg As Range, N As Name, Nom As String, A As String
On Error Resume Next
For Each N In ThisWorkbook.Names
Nom = ""
If InStr(1, N.RefersTo, "OFFSET", vbTextCompare) <> 0 Then
A = Right(N.RefersTo, Len(N.RefersTo) - 1)
Nom = Range(A).Parent.Name & "!" & Range(A).Address
Else
Nom = Range(N.RefersTo).Name.Name
End If
Set rg = Intersect(Target, Range(Nom))
If Err = 0 Then
If Not rg Is Nothing Then
Message = Message & "La cellule " & _
Target.Address(0, 0) & _
" fait parti de la plage nommée : " _
& N.Name & " ." & vbCrLf
End If
Else
Err = 0
End If
Next
If Message <> "" Then
MsgBox Message
End If
Set rg = Nothing
End Sub
'----------------------------------------
Salutations!
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news: uHEcXaLzEHA.3360@TK2MSFTNGP10.phx.gbl...
En voici une spécialement pour toi ;-))
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" !
Et mon message si je suis "dans" ma plage hein ?
Faudrait voir à s'appliquer un peu....
AV
'---------------------------------
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next
For Each N In ThisWorkbook.Names
Nom = Range(N.RefersTo).Name.Name
If Err = 0 Then
Set Rg = Intersect(Target, Range(Nom))
If Not Rg Is Nothing Then
MsgBox "La cellule " & Target.Address(0, 0) & _
" fait parti de la plage nommée : " _
& Nom & " ."
End If
Else
Err = 0
End If
Next
Set Rg = Nothing
End Sub
'---------------------------------
Salutations!
"AV" <alainPFFFvallon@wanadoo.fr> a écrit dans le message de news:
eBvKzKLzEHA.2692@TK2MSFTNGP10.phx.gbl...
Ave Denis,
Un bémol :
Il me semble que la méthode va échouer s'il y a présence d'une plage nommée
dynamiquement (DECALER...)
Ce n'est que pour le plaisir parce que le demandeur n'utilise jamais ce type de bidule !!!
;-)
Je compte sur toi pour tester tous les cas de figure !
'---------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rg As Range, N As Name, Nom As String, A As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = "" If InStr(1, N.RefersTo, "OFFSET", vbTextCompare) <> 0 Then A = Right(N.RefersTo, Len(N.RefersTo) - 1) Nom = Range(A).Parent.Name & "!" & Range(A).Address Else Nom = Range(N.RefersTo).Name.Name End If Set rg = Intersect(Target, Range(Nom)) If Err = 0 Then If Not rg Is Nothing Then Message = Message & "La cellule " & _ Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & N.Name & " ." & vbCrLf End If Else Err = 0 End If Next If Message <> "" Then MsgBox Message End If Set rg = Nothing End Sub '----------------------------------------
Salutations!
"AV" a écrit dans le message de news:
En voici une spécialement pour toi ;-))
Pffff... tu vas quand même pas t'en tirer avec "On Error Resume Next" ! Et mon message si je suis "dans" ma plage hein ? Faudrait voir à s'appliquer un peu....
AV
'--------------------------------- Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim Rg As Range, N As Name, Nom As String
On Error Resume Next For Each N In ThisWorkbook.Names Nom = Range(N.RefersTo).Name.Name If Err = 0 Then Set Rg = Intersect(Target, Range(Nom)) If Not Rg Is Nothing Then MsgBox "La cellule " & Target.Address(0, 0) & _ " fait parti de la plage nommée : " _ & Nom & " ." End If Else Err = 0 End If Next Set Rg = Nothing End Sub '---------------------------------
Salutations!
"AV" a écrit dans le message de news:
Ave Denis,
Un bémol : Il me semble que la méthode va échouer s'il y a présence d'une plage nommée dynamiquement (DECALER...)
AV
AV
Ce n'est que pour le plaisir parce que le demandeur n'utilise jamais ce type de bidule !!!
Si, si ...! Il n'a simplement pas osé le demander...!
Je compte sur toi pour tester tous les cas de figure ! Pfff..... faut tout faire ici !
AV
Ce n'est que pour le plaisir parce que le demandeur n'utilise jamais ce type
de bidule !!!
Si, si ...! Il n'a simplement pas osé le demander...!
Je compte sur toi pour tester tous les cas de figure !
Pfff..... faut tout faire ici !