Rechercher une valeur

Résolu
Bonjour à tous,

Je souhaiterai effectuer la recherche d'une valeur dans une colonne X
et renvoyer la valeur correspondante d'une autre colonne X+1 dans une
cellule en colonne X+X. Le problème est que l'on peut trouver cette
première valeur dans plusieurs lignes de la colonne X et que les
valeurs correspondantes en colonne X+1 sont toutes différentes. C'est
pour cela que je souhaite les concaténer dans une cellule en colonne
X+X.

Un exemple pour plus de compréhension:

1 Arbre
2 mouton
3 Arbre
4 route
5 Arbre
6 route
7 mouton
8 Arbre
9 route
10 route

Je souhaite ainsi faire apparaître dans la cellule en colonne X+X les
valeurs suivantes: 1;3;5;8; (même si possible l'un en dessous de l'autre sans ";").

Je suppose qu'il faut obligatoirement passer par du VBA, mais je n'en ai jamais fait.

Voilà j'espère avoir été assez claire et je vous remercie d'avance
pour l'aide apportée.

Charly

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut Charly,
    1- As tu essayé les filtres? Dans ton cas, un filtre automatique suffira...
    2- Que souhaites tu exactement faire des données que tu trouves?
    1. boaf, je pense que du simple SQL couplé à un autre langage de programmation (et encore, peut être même pas) fait l'affaire :)

      ça me parait plus simple que du VBA (mais je ne connais pas le VBA)

      en gros ça donnerait un truc du genre :
      A = 'GET X FROM [ta table] WHERE [nom de ta colonne] = [valeur recherchée]'
      UPDATE [ta table]  SET [X + X] = A WHERE id =[la ligne choisie]
      


      ce code est un code fait suite à une (très) courte nuit (1h30) et ne fonctionne donc probablement pas. il te donne cependant un aperçu e ce qu'il faut faire
      1. Bonjour Pijaku,

        Les filtres pourraient effectivement marcher si je ne souhaitais pas conserver ces valeurs. Mon exemple est simplifier mais je souhaite en faite que les valeurs (1,3,5,8) soient conserver dans un autre onglet avec écrit en face mouton (que je vais écrire en manuel). J'ai omis de préciser bien sûr que je recherchais dans ce cas la valeur mouton. Mais pour ce que je souhaiterais dans un second temps c'est de renvoyer les valeurs associées à arbre puis dans une autre à route, etc... (dans une autre cellule)
        DSL ma première explication manquait de clarté, j'espère que la seconde est meilleure.

        PS : Si ce n'est toujours pas claire je ferais un petit exemple sous excel
        1. Modérateur
          Regarde ce classeur. Il s'agit d'un exemple de programmation VBA (pour réveiller notre Templier ;-)) réalisé par l'EXCEL-lent Michel_m sur cette discussion
        2. Merci Pikaju,

          Dsl je ne suis apparemment pas réveillé non plus, c'est arbre et non mouton que je recherche...

          Enfin bref ta solution s'approche pas mal de ce que je souhaite faire mais il ne permet pas de concaténer les valeurs. Ici il n'y a qu'une seul valeur pas élément recherché?

          Comment puis-je te transmettre un exemple en excel sur le forum ??
        3. Modérateur
          Ici il n'y a qu'une seul valeur pas élément recherché? Dans l'exemple que je t'ai passé oui. Mais s'il y en avait plusieurs elles s'afficheraient toutes...
          Tu sais, pas besoin d'exemple, on a compris. Je vais te bricoler autre chose.
          D'ici 1/2 heure ça ira?
          Le temps d'un café, d'une cigarette (si tu fumes), sinon un bâton de réglisse et hop hop hop... ça roule?
        4. Non tienkietes, il n'y a rien qui presse dans tous les cas merci beaucoup pour l'aide que tu m'as déjà apportée.

          Dsl je pars vraiment de zéro en VBA.
      2. Bonjour Templier Nocturne,

        Malheureusement je ne connais rien au SQL...

        Mais merci quand même.
        1. Modérateur
          Zut, j'suis allé trop vite... Mais bon j'ai triché, j'ai récupéré une macro ici...
          Bon alors...

          Supposons les valeurs à reporter (1,3,5,8) en Feuil1 colonne 1.
          Supposons les valeurs à chercher (arbre) en Feuil1 colonne 2.
          Supposons la saisie de "arbre" dans la feuille "Recherche" cellule B5.
          Supposons que l'on veuille le résultat en feuille "Recherche" cellule C5.
          Supposons que nous voulons concaténer les valeurs trouvées avec le signe ";".

          Voici ma proposition :

          Sub Recherche()
              Dim Cellule As Range
              Dim Valeur As Variant
              Dim Premiere As Variant
              Dim Liste As String
           
              Valeur = Sheets("Recherche").Range("B5").Value 'A ADAPTER
              If Valeur <> "" Then
                  With Sheets(1).Columns(2).Cells 'on va chercher dans la colonne 2 de la feuille 1 A ADAPTER
                      Set Cellule = .Find(Valeur, LookIn:=xlValues)
                      If Not Cellule Is Nothing Then
                          Premiere = Cellule.Address
                          Do
                          'ici je vais enregistrer dans la variable liste toute les valeurs
                          'contenues dans la colonne A si je trouve valeur en B
                              Liste = Liste & ";" & Cellule.Offset(0, -1).Value
                              'action a faire dès que la ligne est trouvée
                              Set Cellule = .FindNext(Cellule)
                          Loop While Not Cellule Is Nothing And Cellule.Address <> Premiere
                      End If
                  End With
              End If
              Sheets("Recherche").Range("C5") = Right(Liste, Len(Liste) - 1)
          End Sub

          En prime, un classeur exemple. Pour le tester, se placer sur la feuille recherche, saisir un nom en B5, Taper (mais pas trop fort) ALT+F8, choisir Recherche et Exécuter...

          1. Merci beaucoup c'est exactement ce que je recherchais.

            Excellente journée à toi et bonne continuation
          2. Dsl j'ai de nouveau une question comment faire pour que les résultats s'affiche l'un en dessous de l'autre dans la même cellule ?

            Merki d'avance
          3. Et encore mieux, comment faire pour que si j'écris route dans la ligne d'après et mouton dans la ligne d'après, il me cherche mouton arbre route en même temps ?
          4. Modérateur
            Bonjour,
            Pour aller à la ligne Chr(10) au lieu de ";".
            Pour rechercher plusieurs valeurs, il faut faire une boucle comme ceci (les modifs en gras) :
            Sub Recherche()
                Dim Cellule As Range
                Dim Valeur As Variant
                Dim Premiere As Variant
                Dim Liste As String
                Dim Lig As Integer, DerLig As Integer
                
                DerLig = Range("B65000").End(xlUp).Row
                For Lig = 5 To DerLig        
                    Valeur = Sheets("Recherche").Range("B" & Lig).Value 'A ADAPTER
                    If Valeur <> "" Then
                        With Sheets(1).Columns(2).Cells 'on va chercher dans la colonne 2 de la feuille 1 A ADAPTER
                            Set Cellule = .Find(Valeur, LookIn:=xlValues)
                            If Not Cellule Is Nothing Then
                                Premiere = Cellule.Address
                                Do
                                'ici je vais enregistrer dans la variable liste toute les valeurs
                                'contenues dans la colonne A si je trouve valeur en B
                                    Liste = Liste & Chr(10) & Cellule.Offset(0, -1).Value
                                    'action a faire dès que la ligne est trouvée
                                    Set Cellule = .FindNext(Cellule)
                                Loop While Not Cellule Is Nothing And Cellule.Address <> Premiere
                            End If
                        End With
                    End If
                    If Liste <> "" Then
                        Sheets("Recherche").Range("C" & Lig) = Right(Liste, Len(Liste) - 1)
                    Else
                        Sheets("Recherche").Range("C" & Lig) = "Aucune correspondance dans la feuille1"
                    End If
                    Liste = ""
                Next
            End Sub
        2. Hello,

          Une nouvelle fois merci beaucoup pour ton aide, ça marche impeccable !!

          Bonne journée à toi et bonne vacances si tu en as !
          1. Exactement ! surtout quand on y comprend rien ! Mais c'est bien là l'un des intérêts des forums sinon à quoi servent-ils ?
          2. Modérateur
            Quand on ne comprends pas on demande des explications! On ne dit pas sur un autre forum : Je vous joins un excel précisant ce que je souhaite: j'ai réussi avancer un peu mais je suis bloqué alors que le classeur viens de chez moi!!!!!!!
            Merci encore.

            Fin du suivi de cette discussion