Probleme macro recherche

Bonjour,

j'ai un souci avec la macro suivante:

Private Sub CommandButton5_Click()
arg1 = Cells(17, 1)
If arg1 > 0 Then
Worksheets("Feuil3").Select
Range(arg1).Select
End If
End Sub

et le message "la méthode range de l'objet worksheets a échoué", pourquoi?

Je veux simplement qu'il me trouve une cellule dans une autre feuille.

Merci de votre aide
Configuration: Windows XP
Internet Explorer 6.0

7 réponses

  • Votes
  • Date
  • Date décroissante
Résumé de la discussion

Le problème porte sur une macro VBA qui doit atteindre une cellule sur une autre feuille en utilisant une variable arg1, mais la méthode Range échoue lorsque arg1 n’est pas un Range valide. Des réponses préconisent de rendre arg1 explicitement un objet Range, par exemple Set arg1 = Range("A17"), puis If arg1.Value > 0 Then Worksheets("Feuil3").Select Range(arg1.Address).Select End If. D’autres précisent de vérifier le contenu de A17 et de distinguer entre l’adresse à rechercher et la valeur à tester, en utilisant arg1.Address ou Range("A17").Value selon le cas. En pratique, l’emploi de .Address et la qualification des feuilles dans Range(arg1.Address) évitent les erreurs lorsque les noms de feuilles varient ou lorsque des modules déplacent la portée des références.

Bobot (l’IA à votre service)
  1. tu confonds objet et variable

    qu'y-t-il dans arg1? ou quel est le contenu de cell(17,1)?

    veux-tu te déplacer à l'adresse indiquée dans "arg1" ou aller à cell(17,1) sur la feuille3?

    tu devrais écrire qq chose comme ça

    set arg1=range("A17") ' objet contenant toutes les infos de la cellule A17

    If arg1.value > 0 Then
    Worksheets("Feuil3").Select
    Range(arg1.address).Select
    End If

    En espérant que cela t'aidera
    1. alors j'ai essayé mais le message suivant apparaît "la methode select de la classe range a échoué".

      En fait ce que je souhaite faire c'est avoir une macro qui me cherche la cellule A17 de la feuille fiche chantier dans la feuille 3 et qu'il se positionne dessus.
      1. bon j'avais pas bien compris.
        ' arg1 est une variable

        Sub test()

        arg1 = Range("A17").Value ' Valeur de A17 mis dans arg1

        If arg1 > 0 Then

        Sheets("Feuil3").Select ' si la feuille s'appelle bien "Feuil3" dans le même classeur
        Range("a17").Select ' on va à la cellule A17
        End If

        ne confond pas non plus Sheets : la feuille du classeur
        et workbook le classeur.

        j'ai testé ça fonctionne.
        1. J'ai de nouveau le premier message:
          la méthode select de la classe range a échoué.

          Je ne comprends pas pourquoi?

          Vois-tu une erreur de frappe?

          Private Sub CommandButton5_Click()
          arg1 = Range("a17")
          If arg1 > 0 Then
          Sheets("Feuil3").Select
          Range("a17").Select
          End If
          End Sub

          Merci
        2. @relomydie" Vois-tu une erreur de frappe? " non mais un oubli peu-être
          sur quelle feuille commences-tu? ou est ton bouton?
          En supposant sur la feuille1
          la methode select échoue si l'enfant ou le parent n'est pas accessible.
          la cellule dépend de la feuille.
          sépare feuille et cellule et tu sauras ce qui ne va pas.
          un exemple ci dessous.

          Private Sub CommandButton5_Click()

          sheets("Feuil1").select
          arg1 = Range("a17")
          If arg1 > 0 Then
          Sheets("Feuil3").Select
          Range("a17").Select
          End If
          End Sub
        3. @Bidouilleu_R"sur quelle feuille commences-tu?" "ou es ton bouton"
          Je commence sur la feuille fiche chantier et le bouton est sur cette feuille.

          Je souhaite que la macro recherche la valeur de la cellule A17 de la feuille fiche chantier et la trouve et se positionne dans la feuille 3.

          MAis en rajoutant sheets("fiche chantier").select le message apparaît toujours.

          Par exemple, la cellule A17 de la feuille fiche chantier est: A170763depl (cette valeur est une concaténation de deux cellules voisines)

          Je veux que la macro me trouve cette valeur dans la feuille 3 et se positionne dessus.

          Je ne sais pas si c'est plus clair?
      2. je pense que tu as laché prise, mais faut pas se prendre la tete.
        1. bon j'ai trouvé mes excuses.

          dans command buton 5 tu mets
          call recherche1 ' par exemple
          end sub

          puis alt f11

          insertion module
          et tu mets ça et c'est ok

          Sub recherche1()
          arg1 = Range("A17").value
          Sheets("feuil3").Select
          Range(arg1).Select
          End Sub
          si tu as besoin n'hésite pas
          1. Merci, mais je ne comprends toujours pas pourquoi il me mets ce message:

            "la méthode range de l'objet worksheets a échoué"
          2. Sub recherche1()
            arg1 = Range("a17").Value
            Sheets("feuil3").Select
            Range(arg1).Select ----> c'est à ce niveau qui surligne l'erreur
            End Sub
          3. Ok donc pour la valeur 3, je ne comprends pas trop.
            Que faudrait il à la place? car ce qu'il signifie reste un mystere....

            Car en tapant cette macro j'obtiens le message suivant:

            "la méthode select de la classe range a échoué".

            Je dois terminer ce programme pour le boulot avant ce soir et tout allait bien jusqu'à cette macro.

            Penses-tu qu'il y a un moyen plus simple en faisant une macro, de faire une recheche de cellule d'une feuille dans une autre?

            Merci beaucoup de prendre de ton temps pour m'aider
          4. @relomydieD'après les informations que tu donnes
            La cellule A17 contient A170763depl
            la fonction left récupère dans arg1 les 3 premiers charactère soit A17
            sheets("Feuil3").select ' selectionne la feuille
            la méthode range(arg1).select correspond à range("A17") et celle-ci fonctionne très bien chez moi
            je ne vois pas où est le problème
            Essaie d'executer le code en pas à pas F8 et regarde le contenu de arg1
          5. @relomydieEn fait pour explication
            dans la cellule A17 tu fais une concaténation et A17 contient A17xxxxx
            pour être sûr de récupérer cette adresse il te faudrait un espace par exemple : A17 xxxxx
            ou une autre information mais cela c'est toi qui doit le dire

            la méthode range qui échoue, dans commandbutton là je n'ai pas d'idées.
            j'utilise ces boutons pour lancer un module VBA
        2. voici ce que tu écris
          ' Par exemple, la cellule A17 de la feuille fiche chantier est: A170763depl

          'je suppose donc que A17 de la feuille chantier contient : A170763depl

          si arg1 prend la valeur "A170763depl" il ne trouvera pas d'adresse correspondante.
          j'ai donc changé comme ci-après mais le code pas "propre en ce sens
          que la valeur 3 est arbitraire dans : arg1 = Left(Range("a17").Value, 3)
          il faudrait pouvoir obtenir un argument de recherche supplémentaire
          à moins que cela te convienne.

          Sub recherche1()
          arg1 = Left(Range("a17").Value, 3)
          Sheets("feuil3").Select
          Range(arg1).Select '----> c'est à ce niveau qui surligne l'erreur
          End Sub

          A+ Roger