IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Fonction de recherche dans une autre feuille [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut Fonction de recherche dans une autre feuille
    Salut,

    J'ai créé une fonction assez simple pour déterminer le status d'une ligne en fonction de ces cellules.
    Sauf que je plante sur une étape.
    je dois vérifié que la valeur de ma cellule ASRCN soit bien présente dans la colonne d'une seconde feuille (ASR_CN en l'occurrence).
    J'ai tenté le coup avec une sorte de IN mais c'est pas bon!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    Function CalculateStatus(ASRType As String, ASRState As String, ASRCN As String)
     
    Dim strResult As String
     
       If ASRType = "ASR Problem" Then
            If ASRState = "Waiting" Then
                If ASRCN <> "" Then
                    strResult = "ERROR1"
                Else
                    If ASRCN in Range(ASR_CN!B:B).Cells then
                        strResult = "Waiting for CN resolution"
                    Else
                        strResult = "ERROR2"
                    End If
                End If
            End If
        End If
     
        CalculateStatus = strResult
     
    End Function
    Dans le meilleur des mondes, ma cellule ASRCN à le même format que la colonne B:B de la seconde feuille.
    En gros:
    Feuille 1
    ASR-1
    ASR-2
    ASR-3

    Feuille 2
    ASR-4
    ASR-1

    donc la comparaison est simple.
    Mais parfois, sur le feuille1, je peux avoir pour ma cellule ASRCN des valeurs tels que:
    ASR-152, ASR-153
    ASR-15, ASR-16, ASR-17

    Comment vérifié si chacune des valuers ASR-15, ASR-16, ASR-17 est bien présent dans ma colonne B:B de la seconde feuille?

    Je sais, je suis gourmand

    Par avance merci

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Sans avoir regardé l'ensemble du code, il y a un problème dans le type des arguments et surtout pour ASRCN.
    Soit c'est un range (cellule), soit c'est un string et le traitement est différent.
    Petit exemple, ci-dessous avec une fonction qui fait la somme d'une plage.
    Exemple 1 - Argument de Type Range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function SommePlage(asrn As Range) as Double
     SommePlage = Application.WorksheetFunction.Sum(asrn)
    End Function
    Exemple 2 - Argument de type String (Chaine de caractères)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function SommePlage(asrn As String) as Double
     SommePlage = Application.WorksheetFunction.Sum(Range(asrn))
    End Function
    Le résultat renvoyé par la fonction sera le même sauf que dans l'exemple 1, on sélectionne une plage, dans l'exemple 2, il faut entrer une chaîne de caractère par exemple "A2:A10"
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut
    Merci pour ta réponse Corona, par contre, je ne suis pas sur de suivre.

    Mon problème porte sur la partie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If ASRCN in Range(ASR_CN!B:B).Cells then
                        strResult = "Waiting for CN resolution"
    si je ma remplace par exemple par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    If ASRCN ="Toto" then
                        strResult = "Waiting for CN resolution"
    pas de soucis.
    Dans ma feuille excel ensuite, lorsque sur ma cellule Z2 je rentre =CalculateStatus(A2;C2;K2)
    le résultat est correct.

    Mais je dois vérifier que la valeur de ma cellule ASRCN soit bien présente dans la colonne d'une seconde feuille (ASR_CN en l'occurrence).
    J'ai tenté le coup avec une sorte de IN mais c'est pas bon.

    C'est pour cela que je ne vois pas le rapport avec la fonction somme que tu me décrits!
    Désolé, je débutes

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    J'ai lu un peu rapidement ton code.
    Si tu cherches une chaîne de caractères dans un range, regarde du côté de la méthode FIND.
    Petit exemple ci-dessous. La fonction Recherche te renvoie l'adresse du string recherché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Recherche(ASRN As String)
      Recherche = Range("Feuil1!A:A").Find(ASRN).Address
    End Function
    Ajout : J'ai oublié de dire que cette instruction sauf ignorance de ma part, et c'est toujours possible, n'existe pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ASRCN in Range(ASR_CN!B:B).Cells
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2010
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 84
    Points : 47
    Points
    47
    Par défaut
    merci
    je pense être proche du but!

    une autre question néanmoins, comment faire un test pour vérifier si le retour est vide ou non. J'ai essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("ASR_CN!B:B").Find(ASRCN).Address <> "" Then
    mais cela ne semble pas bon.

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Essais comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Range("ASR_CN!B:B").Find(ASRCN) is nothing Then
    Jérôme

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Petit exemple : Si la chaine est trouvée la fonction renvoie "Trouvé", sinon "Pas trouvé".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Function Recherche(ASRN As String)
      Dim celF As Range
      With Worksheets("Feuil1").Range("A:A")
       Set celF = .Find(ASRN, Lookat:=xlWhole)
       If Not celF Is Nothing Then
         Recherche = "Trouvé"
        Else
         Recherche = "Pas trouvé"
       End If
      End With
    End Function
     
    Sub test()
     msgbox Recherche("ToTo")
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] recherche emplacement d'une date dans une autre feuille
    Par wuging dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 27/08/2010, 16h19
  2. [XL-2003] Recherche d'une même valeur dans une autre feuille
    Par Rrrroh dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/06/2010, 09h03
  3. Réponses: 1
    Dernier message: 10/02/2008, 19h56
  4. Recherche dans une autre feuille de Excel même classeur
    Par kourria dans le forum Windows Forms
    Réponses: 4
    Dernier message: 02/06/2007, 22h29
  5. appel d'une fonction dans une autre feuille
    Par mardona dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2007, 17h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo