Bonjour,
Ma macro dysfonctionne une fois sur deux
je demande son optimisation si possible SVP
Merci
Private Sub Worksheet_Change(ByVal Target As Range)
Dim numéro As Integer
Dim celluletrouvee As Range
Dim ligne As Integer
Dim col As Integer
numéro = Range("T1")
Set celluletrouvee = Range("L2:L10").Find(numéro)
ligne = celluletrouvee.Row
col = celluletrouvee.Column
celluletrouvee.Select
ActiveWindow.ScrollRow = Selection.Row
End Sub
Règles fondamentales :
- Ne pas utiliser Select et Selection
- Éviter les références implicites
c-à.d sans préciser le parent d'un Range et sans préciser la propriété attendue, autrement dit, ne pas écrire :
numéro = Range("T1")
mais :
numéro = ActiveSheet.Range("T1").value
EDIT : ou dans ce cas :
numéro = Me.Range("T1").value
Règles fondamentales :
- Ne pas utiliser Select et Selection
- Éviter les références implicites
c-à.d sans préciser le parent d'un Range et sans préciser la propriété attendue, autrement dit, ne pas écrire :
numéro = Range("T1")
mais :
numéro = ActiveSheet.Range("T1").value
EDIT : ou dans ce cas :
numéro = Me.Range("T1").value
re
j'ai en T1 une liste déroulante de numéro 1,2,3,4........
en colonne L j'ai une suite de numéro identique a la liste déroulante
je souhaite qu'a la selection d'un numéro dans la liste déroulant
on le recherche dans la colonne L et que la ligne ou il se trouve remonte en haut
de la feuille
cordilement
Il n'y a pas d'autre possibilité: il ne trouve pas de cellule ayant la valeur de Numéro.
Changer le format de cellules ne suffit pas à changer le type de donnée de leurs valeurs.
(sauf pour les types Date, Double et Currency entre eux)
J'utilise souvent cette fonction perso pour y voir plus clair :
VB:
Function TypeDon(ByVal Cel As Range) As String
TypeDon = TypeName(Cel.Value)
End Function
Il n'y a pas d'autre possibilité: il ne trouve pas de cellule ayant la valeur de Numéro.
Changer le format de cellules ne suffit pas à changer le type de donnée de leurs valeurs.
(sauf pour les types Date, Double et Currency entre eux)
J'utilise souvent cette fonction perso pour y voir plus clair :
VB:
Function TypeDon(ByVal Cel As Range) As String
TypeDon = TypeName(Cel.Value)
End Function
Il serait bien de préciser les constantes de recherche pour la méthode Find() :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Numero As Integer
Dim celluletrouvee As Range
Dim ligne As Integer
Dim col As Integer
Numero = Range("T1").Value
'ne pas négliger les constantes :
'xlWhole (recherche exacte) ou xlPart (recherche partielle)
'et
'xlValues (constante la plus utilisée) ou xlFormula (à voir pour les dates et autres si xlValues ne donne pas satisfaction)
Set celluletrouvee = Range("L2:L10").Find(Numero, , xlValues, xlPart)
If celluletrouvee Is Nothing Then Exit Sub
ligne = celluletrouvee.Row
col = celluletrouvee.Column
celluletrouvee.Select
ActiveWindow.ScrollRow = Selection.Row
End Sub