Recherche dans les éléments d'une liste [VBA] - VB/VBA/VBS - Programmation
Marsh Posté le 16-06-2008 à 09:54:17
Le comportement d'un LIKE dépend de la déclaration de la méthode de comparaison du module : Option Compare Binary (valeur par défaut, sensible à la casse) ou Option Compare Text (insensible à la casse).
Dans ton deuxième bout de code, peux-tu nous dire sur quelle ligne se produit l'erreur « invalid argument » ?
Marsh Posté le 17-06-2008 à 11:16:10
Yahoooooo!
J'avais bien repéré ce petit passage dans l'aide mais j'en avais pas vraiment compris le sens...
Ca marche!!
Merci énormément!
Marsh Posté le 17-06-2008 à 11:26:48
tegu a écrit : |
Finalement j'ai essayé de passer par des boucles do until qui semblent plus appropriées...
Mais encore une fois ca me laisse tout le temps un doublon (sauf quand la liste des éléments trouvés ne regroupe que 2 éléments identiques, dans ce cas elle en supprime bien un des 2)
Je pense que je n'arrive pas a bien fixer les valeurs de départ de mes variables qui sont incrémenté par la suite...
Code :
|
Marsh Posté le 18-06-2008 à 15:07:31
J'ai un problème avec ton code.
Ton « Do Until v = list_search.ListCount » va être impacté par « list_search.RemoveItem (v) » car à chaque suppression dans la liste, la propriété .ListCount sera décrémentée, alors que v est lui-même incrémenté à chaque fois par « v = v + 1 » : c'est voulu ?
Marsh Posté le 18-06-2008 à 17:44:33
tegu a écrit : J'ai un problème avec ton code. |
Je venais d'y penser pour w! En effet quand je supprime un element, le Listcount diminue et donc w aussi, du coup je décrémente w 2 fois dans la meme étape.
J'ai réparé ca en mettant un else dans la boucle et en supprimant l'élément w (et non pas v):
Code :
|
Les élements sont bien supprimés mais ca bug : invalid property array index.
Le bug vient de la ligne
Code :
|
où w prend une valeur trop élevée (ex: w=5 alors qu'il ne reste que 5 élément et que donc w ne peut aller que jusqu'à 4...)
Je sais pas si je suis très clair, moi même j'ai du mal a me comprendre
Marsh Posté le 19-06-2008 à 10:41:36
Parce que tu n'as pas résolu le problème du .RemoveItem et du .ListCount, même si c'est plus subtil maintenant.
Si j'extrais la boucle de ton code on a
Do Until w = 0 |
Tu effectues un test entre deux éléments non stables d'une itération de boucle à l'autre.
Suivant si v > w, ou l'inverse, ou si w est le dernier élément de la liste (par exemple) ton .RemoveItem(w) va avoir des interférences différentes sur ton test « list_search.List(v, 0) = list_search.List(w, 0) »
C'est une mauvaise méthode de programmation.
Il vaudrait mieux remplir un tableau de référence avec les éléments de ta liste pour effectuer la comparaison.
Le contenu du tableau ne variant pas, les itérations de ta boucle seraient stables.
Marsh Posté le 19-06-2008 à 13:42:26
Merci pour tous ces conseils... malheuresement la prog ce n'est pas trop mon truc et je n'ai pas trop le temps...
Mais apperement j'ai eu un coup de chance du débutant : en essayant de bidouiller, et de revoir la méthode d'incrémentation, j'ai par erreur oublié de mettre en commentaire une boucle... Résultat je lance avec 2 boucles l'une a la suite de l'autre et... ca marche!!
Code :
|
COntente que ca marche mais j'aimerais quand meme comprendre pourquoi!
Marsh Posté le 11-06-2008 à 15:00:15
Bonjour,
J'ai vu qq topics a ce sujet, mais aucune des solutions proposées ne convient donc je me permet de poster ...
J'aimerai faire une recherche au sein de plusieurs listes (à 2 colonnes) d'un formulaire. En gros, l'utilisateur rentre un mot et ca lui retourne toutes les lignes de ces différentes listes dont la premiere colonne contient ce mot.
Jusque la tout va bien, ca marche bien sauf 2 bugs :
1) Je n'arrive pas à ne pas différencier majuscule et minuscule.
J'ai essayé avec Ucase et Lcase mais rien a faire : "Can't find project or library"
Voici mon code (en commentaire le différentes lignes que j'ai essayé) :
2) Par l'intermédiaire de plusieurs boucles ma recherche s'effectue donc dans plusieurs liste ayant parfois des éléments communs. j'aimerais donc rajouter un boucle a la fin pour supprimer les éléments multiples dans la liste ou s'affichent les résultats de la recherche.
Voici mon code (qui ne fonctionne pas! "Invalid argument" ) :
Merci pour votre aide!