Erreur 424

Fermé
Lemarv - Modifié par pijaku le 27/08/2014 à 12:04
eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 - 1 sept. 2014 à 14:50
Bonjour,

Je bloque sur cette ligne de code:

reponse = Range("D6:D169").value.Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False).Activate

Je cherche à trouver un nombre dans une colonne définie. L'objet n'est pas défini à croire l'intitulé de l'erreur. Voici mon programme complet:

Sub recherche()
    Dim feuille As String, reponse As Integer, secondreponse As Integer
    
    Dim Cells As Range
    
    feuille = ActiveSheet.Name
    Sheets("MEMOIRE").Activate
    MsgBox "Cherchons l'adresse d'une armoire"
    'recherche de l'armoire
    reponse = InputBox("Quelle est le numero de l'armoire à localiser?")
    
            'reponse = Range("D6:D169").value.Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False).Activate
        'If nothing
            'While
             MsgBox "numéro hors répertoire, entrez un autre numéro d'armoire svp"
                'secondreponse = InputBox("Quelle est le numero de l'armoire à localiser?")
                'secondreponse = Range("D6:D169").value.Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False).Activate
            'Wend
        'End if
    
End Sub


En espérant que vous saurez me sortir de cette panade!
Bonne lecture

2 réponses

eriiic Messages postés 24585 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 27 juin 2024 7 226
Modifié par eriiic le 1/09/2014 à 14:51
Bonjour,

.find retourne un range qui est un objet.
Donc c'est Set ... = ...find(,,,)
Par exemple :
Sub recherche()
    Dim reponse As Long, c As Range
    Sheets("MEMOIRE").Activate
    MsgBox "Cherchons l'adresse d'une armoire"
    'recherche de l'armoire
    Do
        reponse = InputBox("Quelle est le numero de l'armoire à localiser?")
        Set c = Range("D6:D169").Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart)
    Loop Until Not c Is Nothing
    MsgBox c.Address
End Sub

eric


En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
27 août 2014 à 11:13
la méthode find ne s'applique que sur des range donc il faut que tu enlève le .value et que tu le place après le find (en prenant soins d'enlever le activate qui ne sert à rien.

ensuite pour le if nothing ça va pas marcher (reponse est un integer donc il a forcement une valeur). j'ai essayer un truc mais je pense que tu vas avoir une erreur si il ne trouve rien don je me suis permis de remplace tes integer par des range. pour extraire les valeurs tu n'aura plus qu'à faire réponse.value

enfin il n'y a pas de condition sur le while donc ça va boucler à l'infini ;-)

essaye :

Sub recherche() 
Dim feuille As String, reponse As Range, secondreponse As Range

Dim Cells As Range 

feuille = ActiveSheet.Name 
Sheets("MEMOIRE").Activate 
MsgBox "Cherchons l'adresse d'une armoire" 
'recherche de l'armoire 
reponse = InputBox("Quelle est le numero de l'armoire à localiser?") 

reponse = Range("D6:D169").Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False)

'recuperr la valeur 
reponse.value

If reponse is nothing then  
    While 
        MsgBox "numéro hors répertoire, entrez un autre numéro d'armoire svp" 
        secondreponse = InputBox("Quelle est le numero de l'armoire à localiser?") 
        secondreponse = Range("D6:D169").Find(what:=reponse,LookIn:=xlValues,lookat:=xlPart,searchorder:=xlByRows,searchdirection:=xlNext,MatchCase:=False) 
    Wend 
End if 

End Sub 
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 749
27 août 2014 à 12:09
Salut ,

@borntobealive :
lemarv va être bien embêté avec ta macro...
Le While sans condition va le contraindre à une sortie sauvage...
De plus, si reponse est typé as range, la ligne :
reponse = InputBox("Quelle est le numero de l'armoire à localiser?") 
va tilter non?
De plus :
Dim Cells As Range
Cells est à éviter car c'est un nom utilisé par VBA. Cel est mieux...
Dim Cel As Range
Mais bon tu n'utilises pas cells, ni feuille par ailleurs...

@lemarv :
quel est l'intérêt de :
feuille = ActiveSheet.Name 
Sheets("MEMOIRE").Activate
0
borntobealive Messages postés 138 Date d'inscription jeudi 17 juillet 2014 Statut Membre Dernière intervention 25 février 2019 7
Modifié par borntobealive le 27/08/2014 à 14:07
j'avais pas regarder ces déclarations (elles étaient déjà dans son code) vu que j'en avais pas besoin
un
reponse.value
arrangera le probleme non ? (sinon il peut declarer une autre variable).

au départ je voulais utiliser ses integer :
reponse = Range("D6:D169").Find(what:=reponse, LookIn:=xlValues, lookat:=xlPart, searchorder:=xlByRows, searchdirection:=xlNext, MatchCase:=False).value

mais je pense que ça va renvoyer une erreur si la cellule n'existe pas non ?

Le While était déjà sans condition et comme je ne sais pas ce qu'il veut en faire je ne peux pas vraiment l'inventer
0