Erreur 424

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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
    1. 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 
      1. Modérateur
        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
      2. 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