Rechercher une valeur

Résolu/Fermé
cbarre51 - 28 juil. 2011 à 08:41
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 1 août 2011 à 08:31
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

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
28 juil. 2011 à 08:55
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
Templier Nocturne Messages postés 7734 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 21 mai 2016 1 104
28 juil. 2011 à 09:03
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
28 juil. 2011 à 09:25
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
cbarre51 Messages postés 5 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 30 juillet 2011
28 juil. 2011 à 09:56
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
28 juil. 2011 à 10:03
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
cbarre51 Messages postés 5 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 30 juillet 2011
28 juil. 2011 à 10:16
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
Bonjour Templier Nocturne,

Malheureusement je ne connais rien au SQL...

Mais merci quand même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
28 juil. 2011 à 10:23
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
cbarre51 Messages postés 5 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 30 juillet 2011
28 juil. 2011 à 10:50
Merci beaucoup c'est exactement ce que je recherchais.

Excellente journée à toi et bonne continuation
0
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
29 juil. 2011 à 08:29
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
cbarre51 Messages postés 5 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 30 juillet 2011
29 juil. 2011 à 09:59
Hello,

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

Bonne journée à toi et bonne vacances si tu en as !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
29 juil. 2011 à 16:14
0
cbarre51 Messages postés 5 Date d'inscription jeudi 28 juillet 2011 Statut Membre Dernière intervention 30 juillet 2011
30 juil. 2011 à 10:26
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 753
1 août 2011 à 08:31
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