OVH Cloud OVH Cloud

Range dans une proc. Change

6 réponses
Avatar
Gadget
Salut à tous à nouveau.
Voilà mon prob :
Je veux que, quand on change la valeur d'un cellule dans une colonne
définie, une procédure recherche si la nouvelle valeur de la cellule existe
dans les valeurs d'une colonne d'une autre feuille (feuille "salariés"), et
me renvoie le n° de la ligne où cette valeur se trouve. Mais dès que l'on
arrive à la ligne qui recherche cette valeur, cela me renvoie un message "la
méthode range de l'objet à échoué". Pourquoi? D'autant plus que la même
ligne dans une autre proc fonctionne parfaitement.

Merci de vos réponses.

Voilà ma procédure :


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("N")) Is Nothing Then

LigneSal = Range("Salariés!w2:" & Range("Salariés!w2")._
End(xlDown).Address).Find(Target.Value).Row

If LigneSal <> 0 Then
Target.Value = Worksheets("Salariés").Cells(LigneSal, 25)
End If

End If

End Sub


--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!

6 réponses

Avatar
Ellimac
Bonjour,

Essaie ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("N")) Is Nothing Then
With Worksheets("Salariés").Range("a1:a500")
Set c = .Find(Target.Value, LookIn:=xlValues)
If Not c Is Nothing Then
r = c.Row
MsgBox r
End If
End With
End If
End Sub

Camille

-----Message d'origine-----
Salut à tous à nouveau.
Voilà mon prob :
Je veux que, quand on change la valeur d'un cellule dans
une colonne

définie, une procédure recherche si la nouvelle valeur de
la cellule existe

dans les valeurs d'une colonne d'une autre feuille
(feuille "salariés"), et

me renvoie le n° de la ligne où cette valeur se trouve.
Mais dès que l'on

arrive à la ligne qui recherche cette valeur, cela me
renvoie un message "la

méthode range de l'objet à échoué". Pourquoi? D'autant
plus que la même

ligne dans une autre proc fonctionne parfaitement.

Merci de vos réponses.

Voilà ma procédure :


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("N")) Is Nothing Then

LigneSal = Range("Salariés!w2:" & Range("Salariés!
w2")._

End(xlDown).Address).Find
(Target.Value).Row


If LigneSal <> 0 Then
Target.Value = Worksheets("Salariés").Cells
(LigneSal, 25)

End If

End If

End Sub


--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!


.



Avatar
Gadget
Merci ca marche (mais cela ne m'explique pas pourquoi ma proc ne
fonctionnait pas...)


--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Ellimac" a écrit dans le
message de news:09f301c35b53$93262670$
Bonjour,

Essaie ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns("N")) Is Nothing Then
With Worksheets("Salariés").Range("a1:a500")
Set c = .Find(Target.Value, LookIn:=xlValues)
If Not c Is Nothing Then
r = c.Row
MsgBox r
End If
End With
End If
End Sub

Camille

-----Message d'origine-----
Salut à tous à nouveau.
Voilà mon prob :
Je veux que, quand on change la valeur d'un cellule dans
une colonne

définie, une procédure recherche si la nouvelle valeur de
la cellule existe

dans les valeurs d'une colonne d'une autre feuille
(feuille "salariés"), et

me renvoie le n° de la ligne où cette valeur se trouve.
Mais dès que l'on

arrive à la ligne qui recherche cette valeur, cela me
renvoie un message "la

méthode range de l'objet à échoué". Pourquoi? D'autant
plus que la même

ligne dans une autre proc fonctionne parfaitement.

Merci de vos réponses.

Voilà ma procédure :


Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("N")) Is Nothing Then

LigneSal = Range("Salariés!w2:" & Range("Salariés!
w2")._

End(xlDown).Address).Find
(Target.Value).Row


If LigneSal <> 0 Then
Target.Value = Worksheets("Salariés").Cells
(LigneSal, 25)

End If

End If

End Sub


--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!


.



Avatar
Gadget
Merci ca marche (mais cela ne m'explique pas pourquoi ma proc ne
fonctionnait pas...)
Est-ce parce qu'il est interdit de faire référence à une autre feuille que

celle concernée par l'objet Worksheet dans lequel est la procédure ? Dans ce
cas, la référence à une autre feuille fonctionnerait si je "délocalisait" la
procédure dans un module général? C'est ca?

Avatar
Ellimac
Re,

Ce que je ne comprend pas dans la procédure c'est ce que
peut renvoyer :
LigneSal = Range("Salariés!w2:" & Range("Salariés!w2")._
End(xlDown).Address).Find(Target.Value).Row
puisque dans le .Find il faut lui indiquer ce que tu
cherches et où.
Et là on n'indique pas ce que l'on cherche !!!
Je pense que là est le problème.
Camille

-----Message d'origine-----



Merci ca marche (mais cela ne m'explique pas pourquoi
ma proc ne


fonctionnait pas...)
Est-ce parce qu'il est interdit de faire référence à une

autre feuille que

celle concernée par l'objet Worksheet dans lequel est la
procédure ? Dans ce

cas, la référence à une autre feuille fonctionnerait si
je "délocalisait" la

procédure dans un module général? C'est ca?


.




Avatar
Frédéric Sigonneau
Bonjour,

Je pense que la référence à la plage de recherche dans la feuille Salariés n'est
pas assez précise, sachant que ce code est appelé depuis une autre feuille (dans
la module ThisWorkbook ça passerait sans doute tel que). Essaye avec cette
syntaxe :

With Sheets("Salariés")
LigneSal = .Range("w2:" & .Range("w2")._
End(xlDown).Address).Find(Target.Value).Row
End With

FS
--
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://perso.wanadoo.fr/frederic.sigonneau
Si votre question sur Excel est urgente, évitez ma bal !


Salut à tous à nouveau.
Voilà mon prob :
Je veux que, quand on change la valeur d'un cellule dans une colonne
définie, une procédure recherche si la nouvelle valeur de la cellule existe
dans les valeurs d'une colonne d'une autre feuille (feuille "salariés"), et
me renvoie le n° de la ligne où cette valeur se trouve. Mais dès que l'on
arrive à la ligne qui recherche cette valeur, cela me renvoie un message "la
méthode range de l'objet à échoué". Pourquoi? D'autant plus que la même
ligne dans une autre proc fonctionne parfaitement.

Merci de vos réponses.

Voilà ma procédure :

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns("N")) Is Nothing Then

LigneSal = Range("Salariés!w2:" & Range("Salariés!w2")._
End(xlDown).Address).Find(Target.Value).Row

If LigneSal <> 0 Then
Target.Value = Worksheets("Salariés").Cells(LigneSal, 25)
End If

End If

End Sub

--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!


Avatar
Gadget
Ca marche, mais...
en fait, voilà le code tel que je l'utilise :

With Sheets("Salariés")
LigneSal = .Range("w2:" &
.Range("w2").End(xlDown).Address).Find(Target.Value).Row
End With

Target.Value = Worksheets("Salariés").Cells(LigneSal, 23)

et evidemment, quand la dernière ligne s'execute, keskispass... la proc
_change est appelée à nouveau (normal), d'ou auto-appel de ladite proc, d'ou
pb. Comment faire pour pouvoir modifier la valeur de la cellule concernée
dans la proc _Change sans que cela ne rappelle ladite procédure???


--
--
Carpe Diem Quam Minimum Credula Postera
Bicose
Sic Transit Gloria Mundi, et
Arx Tarpeia Capitoli Proxima !!
"Frédéric Sigonneau" a écrit dans le message
de news:
Bonjour,

Je pense que la référence à la plage de recherche dans la feuille Salariés
n'est

pas assez précise, sachant que ce code est appelé depuis une autre feuille
(dans

la module ThisWorkbook ça passerait sans doute tel que). Essaye avec cette
syntaxe :

With Sheets("Salariés")
LigneSal = .Range("w2:" & .Range("w2")._
End(xlDown).Address).Find(Target.Value).Row
End With