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 :

mettre une boucle dans une recherchev


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut mettre une boucle dans une recherchev
    Bonjour à tous

    Je ne connais rien à VBA...

    Je souhaite créer une fonction dans laquelle j'inclue une boucle à la fonction rechercheV

    Je m'explique:

    J'ai 2 colonnes A et B
    Je fais une rechercheV des elements de la colonne A (a) dans la colonne B (=vlookup(a,$B:$B;1,false)

    Pour chaque valeur (a), si le résultat de la rechercheV est #N/A je veux enlever le dernier digit et relancer la recherche, etc.
    Ainsi de suite jusqu'à obtenir un résultat autre que #N/A
    Si il n'y a plus de digit à enlever, je veux que le résultat soit "NO MATCH"

    Pour le moment j'ai fait ça :
    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
    Function check(a, B)
     
    Dim i As Integer
    i = 0
     
    check = WorksheetFunction.VLookup(Left(a, (Len(a) - i)), B, 1, False)
     
        If IsError(check) = True Then
            For i = 0 To i = Len(a)
                check = WorksheetFunction.VLookup(Left(a, Len(a) - i), B, 1, False)
            Next
            i = i + 1
                If i = Len(a) Then
                    check = "NO MATCH"
                End If
     
        End If
     
    End Function

    Le probleme c'est que la boucle ne marche pas...
    La rechercheV fonctionne normalement si le résultat existe, mais si on a besoin de la boucle le résultat est : "#VALEUR!"

    Quelqu'un veut bien m'aider?

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Déjà, à la sortie de ta boucle For next, as-tu vraiment besoin de
    i = i + 1
    Teste ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 10
    Next
    MsgBox i
    Pour le reste, je ne comprends pas. C'est check qui te retourne "#VALEUR!"
    Tu parles de deux colonnes mais je ne vois rien dans ton code qui s'en rapproche C'est pour simplifier ton pb ?
    A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci de me répondre si vite

    1- je n'ai pas particulierement besoin de "i=i+1"
    j'ai mis ca pour incrementer i dans la boucle...

    j'ai testé ce que tu me proposes: ca ne change rien du tout, et aucune boite de dialogue n'apparait (c'est pourtant le but de "Msg box i" non?)

    mais si ca se trouve je me suis gourré en faisant ta modif (je pense pas car j'ai tout essayé mais bon, encore une fois, je connais vraiment rien à VBA)

    2- oui : par exemple je suis dans mon classeur excel :
    j'ai ma colonne A en A:A et ma colonne B en B:B
    dans la cellule C1 je tape "=check(A1;$B:$B)"

    La valeur qui est en cellule A1 : si on la retrouve dans la plage $B:$B, elle apparait dans la cellule C1.
    Sinon, ce qui apparait en C1 c'est #VALEUR!

    Je suis assez clair ou pas?

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Non, le test c'était simplement pour te montrer qu'après une boucle For i = 1 to 10, à la sortie de la boucle tu as 11. Il n'est donc pas nécessaire de mettre i = i + 1
    Désolé si je t'ai perturbé.
    Pour ta question essentielle, je n'ai pas de réponse Je n'ai jamais utilisé VLookup comme tu le fais. Désolé (re)

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    merci quand meme

  6. #6
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    La syntaxe du For en VBA (appliquée à ton cas) est:
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Mai 2007
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci pour cette précision
    En fait le probleme n'est apparemment pas là.

    Après réflexion, si ma formule me renvoie "#VALEUR!", je pense que c'est parce que la recherchev ne marche pas . En principe, la réponse de recherchev s'il n'y a pas de résultat, c'est "#N/A". Mais vu que ce n'est plus exactement la fonction recherchev mais ma fonction "check", le résultat en cas de non correspondance est "#VALEUR!".

    Tout ça pour dire que dans un certain sens, je pense que ma fonction fonctionne (le résultat est correct si la correspondance existe, et il est "#VALEUR!" sinon).

    Par contre je pense que c'est bien la reconnaissance de l'argument
    Left(a, Len(a) - i)
    qui pose probleme !

    Ce qui me fait d'autant plus penser ça c'est que si je vire ma premiere condition
    If IsError(check) = True Then
    et que donc je fais systématiquement appel à ma variable "i", plus rien ne marche (meme si la correspondance existe, c.a.d si i=0)


    En résumé, il faut que j trouve un moyen pour que mon argument
    Left(a, Len(a) - i)
    puisse etre reconnu dans la fonction rechercheV.

    Je vous en supplie, ne me laissez pas tout seul dans le noir, je connais excel mais absolument rien à VBA
    Par pitité, aidez-moi!!!

    Et en tout cas un grand merci à ceux qui l'ont déjà fait

Discussions similaires

  1. Utilisation d'une boucle dans une boucle
    Par caramon _majere dans le forum Langage
    Réponses: 5
    Dernier message: 27/09/2014, 21h37
  2. mettre un swf dans une iframe dans une page html
    Par petitevero dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 16/04/2011, 02h58
  3. [XL-2003] faire une boucle dans une boucle VBA
    Par the-geut dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/04/2010, 15h06
  4. [PHP 5.0] Manipulation XML une boucle dans une boucle
    Par lepotier dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2010, 12h15
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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