Erreur 424

Lemarv -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    2
  2. borntobealive Messages postés 167 Statut Membre 7
     
    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 
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
    2. borntobealive Messages postés 167 Statut Membre 7
       
      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