Macro rechercher liste de valeurs texte dans une colonne

Oui mais du coup j'ai un doute sur la pertinence des résultats, essayez celle-ci par hasard..

Sub r()
  Dim a, b
  Dim i%, j%
  a = Feuil1.UsedRange
  b = Feuil2.UsedRange

  With Feuil2
    For i = 2 To Feuil1.UsedRange.Rows.Count
      For j = 2 To UBound(b)
        If UCase(b(j, 2)) = UCase(a(i, 1)) Then
        .Cells(j, 7) = "1"
        End If
      Next j
    Next i
  End With
End Sub

Y'a un truc qui ne va pas, ça fonctionne mais au début plante toujours Excel et ça affiche toujours (ne réponds pas).

Peut-on optimiser le code de façon à ce qu'il rame moins ou bien qu'il enregistre les valeurs cherchée en mémoire ensuite lancer sa recherche en fonction de la liste? Je ne sais pas si ce que je dit à un sens mais j'ai lu quelques part que c'était possible de faire ça pour éviter les lenteurs lors de l’exécution de la macro.

essayez avec celle-ci mais si ce n'est pas mieux alors ça dépasse mes compétences.

Sub r()
  Dim a, b, c
  a = Feuil1.UsedRange
  b = Feuil2.UsedRange
  Set c = CreateObject("scripting.dictionary")
  c.comparemode = 1
  For i = 2 To UBound(a)
    c.Item(a(i, 1)) = ""
  Next

  For i = 2 To UBound(b)
    If c.exists(b(i, 2)) Then
      Feuil2.Cells(i, 7) = 1
    End If
  Next
  Set c = Nothing
End Sub

ça à l'air de fonctionner, merci encore une fois. Est-ce possible de m’expliquer le code étape par étape afin que je puisse comprendre son fonctionnement si jamais je souhaite apporter des modifications SVP?

Le truc c'est que je peux avoir une seule colonne avec des noms & prénoms ou bien une seule colonne avec les prénoms uniquement, j'aimerai bien jouer sur ce paramètre pour élargir ma liste de prénoms.

Commenter cela va être difficile car j'ai appris "sur le tas" sans aucune tournure académique.

Grosso modo je place le contenu des deux feuilles dans des tableaux virtuels (A et B)

a = Feuil1.UsedRange

b = Feuil2.UsedRange

d'ailleurs cela peu être optimisé en ne sélectionnant que les données que vous voulez, pour ma part, par défaut je place tout dans une mémoire et j'utilise les tableaux virtuels car ils ont réputations d'être plus rapide.

Puis ensuite je crée un "dictionnaire" où j'y entre dedans la liste des prénoms

Set c = CreateObject("scripting.dictionary") 'Création du dictionnaire
c.comparemode = 1 'affectation d'une propriété de comparaison en mode texte
For i = 2 To UBound(a) 'départ d'une boucle qui ira de la ligne 2 à Ubound(a) qui est le nombre totale de ligne dans le tableau A
c.Item(a(i, 1)) = "" 'je crée un prénom dans le dictionnaire (ou mon prénom sera la valeur qu'il y a dans le tableau A, à la ligne i et à la colonne 1)
Next 'j'enregistre le prénom suivant
For i = 2 To UBound(b) 'pour une valeur de 2 au nombre de prénom a analyser dans la feuille onglet 2
        If c.exists(b(i, 2)) Then  'si la prénom b(i,2) qui est = à la ieme ligne de la colonne 2 du tableau b, existe dans le dictionnaire C alors
          Feuil2.Cells(i, 7) = 1 j'écris un un dans la cellule G de la ieme ligne
        End If 
      Next

Pardon mais ce n'est pas évident d'être clair...

Bonsoir Machin,

C'est plus que je ne le souhaitais, merci de m'avoir répondu et de m'avoir aider. Mes sincères remerciements. Je me pencherai sur le code pour comprendre son fonctionnement et l'adapter en cas de besoin, avec des petits tests et votre explication je m'en sortirai.

Encore une fois merci beaucoup.

Apprendre les dictionnaires tout de suite sera très certainement difficile mais c'est en forgeant qu'on devient forgeront donc patience cela viendra.

Sur ce site, http://boisgontierjacques.free.fr/

il y a d'excellentes macros standardisée traitant de beaucoup de sujet que vous pouvez analyser, utiliser et décortiquer.

Rechercher des sujets similaires à "macro rechercher liste valeurs texte colonne"