Rechercher une valeur

Résolu
cbarre51 -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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?
    0
  2. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    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
    0
  3. cbarre51
     
    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
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
    2. cbarre51 Messages postés 5 Statut Membre
       
      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 ??
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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?
      0
    4. cbarre51 Messages postés 5 Statut Membre
       
      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.
      0
  4. cbarre51
     
    Bonjour Templier Nocturne,

    Malheureusement je ne connais rien au SQL...

    Mais merci quand même.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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...

    0
    1. cbarre51 Messages postés 5 Statut Membre
       
      Merci beaucoup c'est exactement ce que je recherchais.

      Excellente journée à toi et bonne continuation
      0
    2. charly
       
      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
      0
    3. cbarre51
       
      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 ?
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0
  7. cbarre51 Messages postés 5 Statut Membre
     
    Hello,

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

    Bonne journée à toi et bonne vacances si tu en as !
    0
    1. cbarre51 Messages postés 5 Statut Membre
       
      Exactement ! surtout quand on y comprend rien ! Mais c'est bien là l'un des intérêts des forums sinon à quoi servent-ils ?
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
      0