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 :

Recherchev avec plusieurs résultats 2 [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut Recherchev avec plusieurs résultats 2
    Bonjour a vous,


    J'ai trouvé sur le forum une function qui me semble très intéressante et si modifié pourrais répondre a un de mes besoins. (la function a été posté par Daranc)

    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
    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
     
     
    rmult = u
     
    End Function

    Ce que je voudrais avoir comme résultat serais au lieu d'avoir un séparateur qui est ~ dans l'exemple ci-haut que les résultats sois copie dans une cellule différente dans la meme rangé

    Par exemple dans la cellule a1 résultat1, cellue b1 résultat2, etc ...


    merci encore une fois !!!

  2. #2
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut recherche...
    Bonsoir,

    La fonction recherche une valeur en colonne 1 d'une base et rend une valeur de même ligne de la colonne choisie. Toutes les valeurs rendues sont concaténées en une chaîne séparée par des "~"...
    Je pense qu'une fonction ne peut être utilisée par des "effets de bord" (par exemple écrire dans les cellules d'une feuille). Dans votre cas il vaudrait mieux la réécrire en Procédure Sub.
    J'ai fait un essai,

    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
    Sub rmult(valcherch As Variant, x As Range, colonne As Long, r As Long)
    Dim u As Variant
    Dim nb As Long
    Dim boucle As Long
     
     
    nb = 1
    For boucle = 1 To x.Rows.Count
     
        If x(boucle, 1) = valcherch Then
            x(nb, r) = x(boucle, 1)
            x(nb, r + 1) = x(boucle, colonne)
            nb = nb + 1
        End If
     
    Next boucle
     
    End Sub
     
    Sub essai()
    Dim x As String
    Dim source As Range
     
    Set source = Range("sources")
    Call rmult("riri", source, 2, 4)
    End Sub
    j'ai mis en plus le paramètre r pour la colonne résultat
    Nom : Capture.JPG
Affichages : 2810
Taille : 21,5 Ko

    cordialement
    geogeo

  3. #3
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Salut geogeo

    merci beaucoup pour ton aide , c'Es apprécié !!!

    Il faudrait que la sub choisi automatiquement l'endroit ou que la function rmul a été exécuté.

    J'aurais pensé une sub utilisant un copier spéciale valeur avec un convertir afin de créé les colonnes

    Ce qui serais vraiment le top des tops
    c'est qu'au lieu du séparateur, que chacun des valeurs soient dans la meme cellule sur une ligne différente (comme lorsque l'on fait un alt+enter). Également il faudrait que ce sois seulement les valeurs différentes qui sont trouvé.

    Est-ce qu'il y a quelqu'un qui peut m'aider ???

  4. #4
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut suite
    peux tu donner un exemple de resultat par rapport à mon exemple?

    merci
    geogeo

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Bonjour geogeo,

    Pour le alt+enter j'ai remplacer le tilde (~) par chr(10) et ca fonctionne.


    Si je me fis a ton exemple, il faudrait rajouter d'autre ligne car tu n'a pas des doublons.

    Supposons que nous aurions


    riri 8
    riri 9
    riri 10
    riri 8
    riri 11

    et que j'exécute la function, nous aurions 8, 9, 10, 8, 11

    ce que je veux c'est avoir comme résultat serais 8, 9, 10, 11



    un gros merci !!!

  6. #6
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Tu peux vérifier ceci en utilisant un dictionnaire ou alors un tableau (si les données renvoyées par ta recherche sont des valeurs) mais c'est moins beau :

    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
    Sub rmult(valcherch As Variant, x As Range, colonne As Long, r As Long)
    Dim u As Variant
    Dim nb As Long
    Dim boucle As Long
    Dim tablverif() As Variant
     
    nb = 1
    For boucle = 1 To x.Rows.Count
     
        If x(boucle, colonne) > UBound(tablverif) Then ReDim Preserve tablverif(x(boucle, colonne))
        If x(boucle, 1) = valcherch And tablverif(x(boucle, colonne)) <> 1 Then
            x(nb, r) = x(boucle, 1)
            x(nb, r + 1) = x(boucle, colonne)
            tablverif(x(boucle, colonne)) = 1
            nb = nb + 1
        End If
     
    Next boucle
     
    End Sub
    Autrement la fonction Find et Find.Next me parait mieux adaptée ou même la fonction Like.

  7. #7
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut recherche suite...
    bonjour,

    J'ai essayé de repondre à ton problème, comme tu ne mets le résultat que dans une cellule j'ai refait une fonction qui rend une chaîne contenant les valeurs cherchées en enlevant les doublons :
    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
    Option Base 1
     
    Function rmult(valcherch As Variant, x As Range, colonne As Long) As String
    Dim u As Variant
    Dim nb As Long
    Dim boucle As Long
     
    Dim tabval() As Variant
     
    ReDim tabval(x.Rows.Count)
     
    nb = 1
    u = ""
    For boucle = 1 To x.Rows.Count
        If x(boucle, 1) = valcherch Then
            tabval(nb) = x(boucle, colonne)
            nb = nb + 1
        End If
    Next boucle
    For i = 1 To nb - 1
       For j = i + 1 To nb - 1
          If tabval(i) = tabval(j) Then tabval(j) = ""
       Next j
    Next i
    For i = 1 To nb
       If tabval(i) <> "" Then u = u & tabval(i) & Chr(10)
    Next i
    If Right$(u, 1) = Chr(10) Then u = Left$(u, Len(u) - 1)
     
    rmult = u
    End Function
    Sub essai()
    Dim x As String
    Dim source As Range
     
    Set source = Range("sources")
    Range("G2") = rmult("riri", source, 2)
    End Sub
    Nom : recherche.JPG
Affichages : 3564
Taille : 28,4 Ko

    Je ne sais si tu as une base de données grande dans ce cas il vaudrait mieux placer les données dans un tableau ça irait plus vite
    Tu peux aussi uliliser la fonction en fonction personnelle de la feuille.

    cordialement
    geogeo

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par jpvba Voir le message
    Ce que je voudrais avoir comme résultat serais au lieu d'avoir un séparateur qui est ~ dans l'exemple ci-haut que les résultats sois copie dans une cellule différente dans la meme rangé
    Tu peux aussi rester comme cela puis utiliser la méthode Range.TextToColumns

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  9. #9
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub essai()
    Dim x As String
    Dim source As Range
     
    Set source = Range("sources")
    Range("G2") = rmult("riri", source, 2)
    End Sub
    Est-ce possible de définir la cellule sélectionner au lieu de donner définir un range ??? et sans définir le doublons

    Comme cela, je pourrais l'utiliser a toute les sauces

    J'ai trouvé cela sur le web que j'ai modifié mais j'ai un hic ... lorsque j'exécute la sub la première lettre de chaque mot également est éliminés ce qui est vraiment étranges ...


    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
    Sub test()
        Dim Dico, c As Range
        Set Dico = CreateObject("Scripting.Dictionary")
        On Error Resume Next
        For Each c In Range("A1", Range("k65536").End(xlUp))
            tablo = Split(c, Chr(10))
            For Each Item In tablo
                Item = Application.Trim(Item)
                Dico.Add Item, ""
            Next Item
            c = ""
            For Each k In Dico.keys
                c = c & Chr(10) & k
            Next
            c = Left(Right(c, Len(c) - 2), Len(c) - 2)
            For Each k In Dico.keys
                Dico.Remove k
            Next
        Next c
    End Sub
    finalement dans le dictionnaire que Al__22 a mis un lien il y a qqch d'intéressant


    Cependant c'est une function


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function SansDoublon(c)
     
       a = Split(Application.Trim(c), Chr(10))
       Set mondico = CreateObject("Scripting.Dictionary")
       For i = 0 To UBound(a): mondico.Item(a(i)) = 1: Next i
       SansDoublon = Join(mondico.keys, sep)
     End Function
    Pouvez vous m'aider en faisant une sub qui copie le résultat à l'endroit de la selection ie a celule source est la cellule de destination du résulat



  10. #10
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    La derniere function de geogeo marché finalement nickel !!!


    Je ne sais pas pourquoi la base 1 a été déclaré ... sans ce changement, la function marche également


    parcontre je suis également intéressé pour la sub qui enleve tous les doublons (dernier reply)

  11. #11
    Membre chevronné
    Homme Profil pro
    retraité enseignement
    Inscrit en
    Mars 2013
    Messages
    213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Saône (Franche Comté)

    Informations professionnelles :
    Activité : retraité enseignement
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2013
    Messages : 213
    Par défaut
    bonsoir,

    j'ai utilisé un tableau pour gérér les valeurs à traiter et rendre une chaîne des valeurs en utilisant les indices à partir de 1, option base 1 ouvre un tableau qui commence à l'indice 1 sinon on utilise l'indice 0 pour rien mais ça fonctionne sans!

    Voilà, bonne recherche

    cordialement,
    geogeo

    PS : dans ma proposition les doublons sont traités. Quant à l'essai de la fonction, ce n'est qu'un exemple, tu peux ne pas utiliser de nom de "range" et passer la zone directement dans la fonction. Le résultat est une chaîne, donc tu peux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [G2] = rmult("riri", range("B2:C9"), 2)

  12. #12
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

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

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    merci geogeo


    je m'en suis aperçu après mon poste, je suis désolé !!!


    concernant la procédure sansdoublons Est-ce que vous savez pourquoi la première l'etre de chaque cellule traité est également tronqué et si oui, savez vous comment y remédié car je trouve utile cette sub ???

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 16/07/2019, 12h07
  2. [XL-2010] RechercheV avec plusieurs résultats possibles
    Par BAST04GT dans le forum Conception
    Réponses: 3
    Dernier message: 28/07/2016, 20h52
  3. Recherchev avec plusieurs résultats possibles.
    Par solorac dans le forum Excel
    Réponses: 23
    Dernier message: 12/08/2014, 15h17
  4. RECHERCHEV avec plusieurs resultats !
    Par Bb''r dans le forum Excel
    Réponses: 14
    Dernier message: 08/08/2007, 19h31
  5. Jointure avec plusieurs résultats
    Par kemenaran dans le forum Langage SQL
    Réponses: 4
    Dernier message: 18/12/2005, 23h21

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