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 :

Créer une rechercheV avec correspondances multiples [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Créer une rechercheV avec correspondances multiples
    Bonjour à tous,

    Je travaille dans la comptabilité et suis souvent amené à faire des rapprochements entre deux bases de données.
    Pour gérer les correspondances multiples, ma méthode actuelle est de faire une recherchev et à côté un nb.si qui m'indique s'il y a plusieurs correspondances ou non. S'il y en a plusieurs, je vais les chercher manuellement.

    Je voudrais m'épargner ce travail car lorsqu'on travaille sur des bases avec quelques milliers de lignes, ça prend la journée !

    J'aimerais donc créer une fonction "RechercheVMultiple" qui me permettrait de faire sortir toutes les correspondances d'un coup !

    Pour l'instant j'ai réussi à avoir ça :

    https://dl.dropboxusercontent.com/u/...ns%20titre.jpg

    En colonne E il y a la recherche V normale (=RECHERCHEV(D2;A:B;2;0) pour la cellule E2), en colonne F le résultat obtenu avec ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Function recherchevmultiple(c) 
    If Application.CountIf([A:A], c.Value) = 0 Then Resultat = "aucune correspondance" 
    If Application.CountIf([A:A], c.Value) = 1 Then Resultat = Application.VLookup(c.Value, [A1:B10], 2, 0) 
    If Application.CountIf([A:A], c.Value) > 1 Then Resultat = "plusieurs correspondances" 
    recherchevmultiple = Resultat 
    End Function
    Comme vous pouvez le constater, je ne sais pas comment faire pour que ma fonction ait les mêmes arguments qu'une recherchev normale du coup je suis obligé de les rentrer en VBA. Idéalement, il faudrait que RechercheVMultiple demande le critère, la plage, le numéro de colonne à renvoyer avec toujours une correspondance exacte.

    Enfin, en colonne G vous trouverez le résultat que je souhaite obtenir avec cette fonction.

    Pouvez-vous m'aider ? Ce serait merveilleux !

    Merci d'avance.

  2. #2
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    janvier 2014
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : janvier 2014
    Messages : 41
    Points : 42
    Points
    42
    Par défaut
    Hello,

    Il se trouve que j'ai eu besoin de ça l'autre jour et j'ai trouvé mon bonheur sur: http://www.developpez.net/forums/d40...ats-possibles/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function rmult(valcherch As Variant, x As Range, colonne As Long) As Variant
    Dim u As Variant
    Dim nb As Long
    Dim boucle As Long
    For boucle = 1 To x.Rows.Count
    If x(boucle, 1) = valcherch Then
    u = u & "|" & x(boucle, colonne)
    nb = nb + 1
    End If
    Next boucle
    u = nb & u
    rmult = Split(u, "|")
    End Function
    Merci à Random

    Après il est possible de modifier le u de rmult afin de ressortir ce que l'on veut de ces multiples résultats (le max, la somme ou bien encore le formatage des résultats trouvés.

    Bonne journée,
    YanBos

  3. #3
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup ! J'ai adapté ça à ma sauce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function RECHERCHEVMULTIPLE(C As Variant, Plage As Range, Colonne As Integer) As Variant
    If Application.CountIf(Plage.Columns(1), C.Value) > 0 Then
        Dim Resultat As String
        Dim Boucle As Integer
            For Boucle = 1 To N
                    If Plage(Boucle, 1) = C Then
                        Resultat = Resultat & "/" & Plage(Boucle, Colonne)
                    End If
        Next Boucle
    Else
    Resultat = "x"
    End If
    RECHERCHEVMULTIPLE = Right(Resultat, Len(Resultat) - 1)
    End Function
    La dernière chose : Je voudrais que N soit le rang de la dernière cellule non vide de la première colonne de la plage. Comment faire ?

    Merci !

  4. #4
    Candidat au Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    avril 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Finalement 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Function OPTIONCELLULE(Cellule1 As Variant, Plage1 As Range, Colonne1 As Integer) As Variant
    If Application.CountIf(Plage1.Columns(1), Cellule1.Value) > 0 Then
        Dim Resultat1 As String
        Dim Boucle1 As Integer
            For Boucle1 = 1 To 10000
                If Plage1(Boucle1, 1) = Cellule1 Then
                    Resultat1 = Resultat1 & "/" & Plage1(Boucle1, Colonne1)
                End If
            Next Boucle1
    Else
        Resultat1 = "xAucune correspondance"
    End If
    OPTIONCELLULE = Right(Resultat1, Len(Resultat1) - 1)
    End Function
     
    Function OPTIONCHAINE(Cellule2 As Variant, Plage2 As Range, Colonne2 As Integer) As Variant
    If Application.CountIf(Plage2.Columns(1), "*" & Cellule2.Value & "*") > 0 Then
        Dim Resultat2 As String
        Dim Boucle2 As Integer
            For Boucle2 = 1 To 10000
            Chaine = "*" & Cellule2.Value & "*"
                If Plage2(Boucle2, 1) Like Chaine Then
                    Resultat2 = Resultat2 & "/" & Plage2(Boucle2, Colonne2)
                End If
            Next Boucle2
    Else
        Resultat2 = "xAucune correspondance"
    End If
    OPTIONCHAINE = Right(Resultat2, Len(Resultat2) - 1)
    End Function
     
    Function RECHERCHE1POURN(Cellule3 As Variant, Plage3 As Range, Colonne3 As Integer, I As Integer) As Variant
        Dim Resultat3 As String
        If I = 1 Then
            Resultat3 = OPTIONCHAINE(Cellule3, Plage3, Colonne3)
        ElseIf I = 0 Then
            Resultat3 = OPTIONCELLULE(Cellule3, Plage3, Colonne3)
        Else
            Resultat3 = "Erreur argument"
        End If
    RECHERCHE1POURN = Resultat3
    End Function
    Du coup je peux faire une recherchev multiple avec option recherche d'une chaîne de caractères.
    Merci pour votre aide !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/04/2008, 09h39
  2. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 13h37
  3. Réponses: 4
    Dernier message: 09/02/2005, 11h44
  4. Créer une grille avec centage
    Par lil_jam63 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 16/08/2004, 17h21
  5. [Image]Créer une image avec JAVA 1.1
    Par burno dans le forum 2D
    Réponses: 4
    Dernier message: 11/08/2004, 10h19

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