Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Ma macro ne fonctionne qu'une fois sur deux

  • Initiateur de la discussion Initiateur de la discussion chich
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
    95.7 KB · Affichages: 41
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
 
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
 
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:
Re
votre fonction revoie double ?
Cordialement
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
581
Réponses
7
Affichages
286
Réponses
4
Affichages
439
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…