Ma macro ne fonctionne qu'une fois sur deux

chich

XLDnaute Occasionnel
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
 

Patrice33740

XLDnaute Impliqué
Bonjour,

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
 

chich

XLDnaute Occasionnel
Bonjour,

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 merci
le problème persiste malgré correction
 

Pièces jointes

  • Corr.GIF
    Corr.GIF
    95.7 KB · Affichages: 38

chich

XLDnaute Occasionnel
Bonjour,

et si tu disais ce que tu as besoin plutôt que de mettre un code que tu dis être erroné ?
eric
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
 

Dranreb

XLDnaute Barbatruc
Bonsoir.
Ajoutez devant :
VB:
If celluletrouvee Is Nothing Then MsgBox "Numéro " _
   & Numéro & " non trouvé", VbCritical: Exit Sub

Remarque: veillez à ce que les numéros ne soient pas enregistrés sous forme de texte si vous voulez pouvoir le rechercher avec un Integer.
 

chich

XLDnaute Occasionnel
Bonsoir.
Ajoutez devant :
VB:
If celluletrouvee Is Nothing Then MsgBox "Numéro " _
   & Numéro & " non trouvé", VbCritical: Exit Sub

Remarque: veillez à ce que les numéros ne soient pas enregistrés sous forme de texte si vous voulez pouvoir le rechercher avec un Integer.
Re
ca ne veux pas j' ai passer la la colonne L au format nombre
j 'ai toujours cette ligne qui pose problème
ligne = celluletrouvee.Row
Cordialement
 

Dranreb

XLDnaute Barbatruc
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
 
Dernière édition:

chich

XLDnaute Occasionnel
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
Re
votre fonction revoie double ?
Cordialement
 

Theze

XLDnaute Occasionnel
Bonjour,

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
 

Discussions similaires

Réponses
2
Affichages
156

Statistiques des forums

Discussions
312 345
Messages
2 087 473
Membres
103 553
dernier inscrit
jhnm