Cellules adjacantes à la recherche avec la methode find + additem

  • Initiateur de la discussion Creepy
  • Date de début
C

Creepy

Guest
Kikoo,

Pour faire ma recherche j'ai utilisé cette méthode (Merci @+Thierry) :

Set C = .Find(Cherche, LookIn:=xlValues)
If Not C Is Nothing Then
FirstADdress = C.Address
Do
LstResultat.AddItem C
Set C = .FindNext(C)
Loop While Not C Is Nothing And C.Address <> FirstADdress
End If

Ca marche très bien et j'ai bien le resultat de ma recherche dans ma ListBox. Par contre je voudrais aussi qu'il me mette dans la listbox le contenu de ma cellule adjacente à ma recherche, et, 2 cellules apres

par exemple si j'ai dans mon tableau = dudul / cellule d'à coté : 123 et encore apres 456, je veux que le resultat de ma recherche soit :

dudul / 123 / 456.

Je sais formater ma listbox pour avoir trois colonne ca c'est pas le problème par contre je sais pas prendre les cellules adjacentes.

Merci

Creepy
 
Z

zon

Guest
Re,


En fait tu n'as pas besoin de combo, c'est un système pour feignants de la saisie (LOL), à partir de 1 à N caractères, tous les résultats s'afficheront....

Pour le problème de la saisie, en rajoutant la fonction Ucase qui permet de mettre en lmajuscules une chaîne de caractères on peut comparer txtquoi et cell.


Pour ta recherche, je rajoute une variable L (à déclarée en Byte) qui va récupérer la longueur de la chaîne txtquoi, ensuite on va tester avec la fonction left dont la longueur est L



If TxtQuoi.Value <> "" Then <- TxtQuoi est une Textbox
L=len(txtquoi)
For Each cell In Sheets("BdeD").Range("A2", "A" & Range("A65536").End(xlUp).Row)
If left(cell.text,L) = TxtQuoi.text Then
TAB1(I, 0) = cell.Text
TAB1(I, 1) = cell.Offset(0, 1).Text
TAB1(I, 2) = cell.Offset(0, 2).Text
I = I + 1
End If
Next cell
Else
MsgBox "Veuillez entrer un critère de recherche", vbInformation + vbOKOnly, "Erreur de recherche"
Exit Sub
End If
LstResultat.Visible = True
LstResultat.ColumnCount = 3
LstResultat.ColumnWidths = "6cm" & ";" & "6cm" & ";" & "3cm"
LstResultat.List = TAB1()


A+++
 
@

@+Thierry

Guest
Bonsoir à vous deux, et aux couches tard du Forum

Moi j'ai pas regardé le foot mais j'ai regardé un peu votre problème...Et je me permets de m'introduire dans ce fil.

Pour la Méthode de Zon dans listbox_colonneZON1.xls, juste deux petites remarques :

1) Inutile de faire générer un Tableau avec des ListBox, elles gèrent toutes seules une Dynamic Array... (grosse économie de stockage en mémoire)
2) Quand ce n'est pas nécessaire de déclarer une variable en dehors d'une procédure pour un partage avec d'autres, on les place à l'intérieur. (Elles ne sont intégrées et stockées QUE pendant l'exécution de celle ci)

Voici comment faire :

Private Sub CommandButton1_Click()
Dim cell As Range
Dim i As Byte 'limite 255 lignes
If TextBox1 <> "" Then
For Each cell In Range("A2", "A" & Range("A65536").End(xlUp).Row)
If cell = Txtcherche Then
ListBox1.AddItem cell.Text '& i <<<< Supprimer & i pour le chiffre Dudul1
ListBox1.List(i, 1) = cell.Offset(0, 1).Text
ListBox1.List(i, 2) = cell.Offset(0, 2).Text
i = i + 1
End If
Next cell
End If
End Sub

Pour la méthode de départ de ce Fil et la Kronembourg, là c'est plus délicat...

En effet la méthode "Find" (Recherche partielle d'une String) se fait selon l'exemple de l'aide à partir d'un Loop et par conséquent il n'est pas possible de générer un algo capable d'alimenter une variable de la sorte pour récupérer les offset. Il faut procéder autrement pour alimenter une ListBox Multicolumn.

En fait mon idée serait de faire le Loop pour récupérer les adresses des cellules qui contiennent la portion de string dans une Array (TabX en une seule colonne) et ensuite de faire tourner une boucle for X = 0 to TabX.UBound... pour alimenter cette ListBox MultiColonne comme ci-dessus.

Voilà je ne sais pas si c'est réalisable et vu l'heure je ne vais pas essayer surtout que j'ai même pas un Kronembourg sous la main!! Mais c'était pour faire avancer le Schmilblic !!!

Bonne Nuit à Vous
@+Thierry
 
Z

zon

Guest
Re,



Merci pour tes remarques comme toujours Thierry,

Pour les variables: un petit rappel me fait du bien car j'ai pris depuis quelque temps de mauvaises habitudes (en général j'ai plus d'une procédure)...

Pour la variable Tableau, comme je galèrais quand j'ai découvert les USF au début avec les .list notamment, c'est idiot de ma part mais je mets des tableaux (car je connais ) pour les listbox multicolonnes..


Quant la méthode Find, j'en ai fait des cauchemars, donc j'ai laissé tomber, mais si je m'ennuie cette nuit (l'insomnie) je vais y regarder...
 
@

@+Thierry

Guest
Tiens, avant dodo et pour te donner du courage Zon avec "Find"...

Super cette astuce :

L=len(txtquoi)
For Each cell In Sheets("BdeD").Range("A2", "A" & Range("A65536").End(xlUp).Row)
If left(cell.text,L) = TxtQuoi.text Then

bien vu ! C'est pas du vrai "Find" mais ça à l'air de plaire à Creepy :)

Allez Zou Dodo
@+Thierry
 
@

@+Thierry

Guest
3dlw_102.gif
3dlw_118.gif
3dlw_101.gif
3dlw_122.gif
3dlw_115.gif

Félicitations Zon... tu as bien mis en oeuvre !!

@+Thierry
Take it Easy Just For The Fun​





PS Mort de Rire dans le Module1
For I = 1 To Workbooks.Count
If Workbooks(I).Name = "Classeur4" Then Workbooks(I).Activate
Next I
End Sub

lol
 

Discussions similaires

Réponses
12
Affichages
645
Réponses
8
Affichages
555
Réponses
12
Affichages
639

Statistiques des forums

Discussions
312 755
Messages
2 091 717
Membres
105 056
dernier inscrit
David Primo