Recherche dans tableau excel

zepeto

XLDnaute Occasionnel
Bonjour à tous,
j'ai un tableau sous excel avec 1°colonne = nom, 2°colonne = prénom, 3°colonne = caractéristiques.
J'ai une macro qui me permet de rechercher une personne et rempli les champs d'un userform grâce à la saisi du nom, mais il arrive que j'ai deux fois le même nom et je ne veux faire ma recherche que sur le nom.
Alors si quelqu'un connait une méthode pour faire une boucle sur ma 1°colonne et qui me demande si il sagit bien de la bonne personne sinon on passe à l'autre sa serait avec plaisir.
Merci par avance et je suis disponible pour plus d'informations.
 
T

THE CAT 2007

Guest
Re : Recherche dans tableau excel

Bonjour,

en VBA
Cet exemple montre comment rechercher toutes les cellules de la plage A1:A500 dans la feuille de calcul Worksheet 1 contenant la valeur 2 et comment la remplacer par la valeur 5.

With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Value = 5
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonjour à tous,
J'ai voulu me servir de ton code mais je galére.
En fait moi auussi je recherche les éléments identique de ma premiére colonne, mais je ne veux pas les remplacer, mais afficher le premier (avec les autres colonnes) et demander si c'est l'élément voulu. Si l'utilisateur répond non on passe au suivant sinon on s'arréte et si jamais arriver au dernier élément l'utilisateur répond non alors on affiche recherche infructueuse.
Merci pour votre aide
 
G

Guest

Guest
Re : Recherche dans tableau excel

Re Bonjour Zepeto,

Pleures pas on arrive!!!!;)

voici:

Code:
Sub Rechercher()
    Dim c As Range
    Dim firstAddress As String
    Dim flag As Integer
    flag = vbNo
    With Worksheets(1).Range("a1:a500")
        Set c = .Find(NomCherche,LookIn:=xlValues, After:=Range("A1"))
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                flag = MsgBox("Est-ce bien de " & c.Text & " " & c.Offset(, 1) & " quil s'agit?", vbYesNo, "rechercher une personne")
 
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress And flag = vbNo
        End If
 
        If flag = vbYes Then
            'Traitement on a trouvé
        Else
            ' Traitement on a pas trouvé
        End If
 
    End With
End Sub

A bientôt
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Re bonjour Hasco, hélas ton code ne fonctionne pas chez moi.
Pourtant dés que j'ai une information redondante il devrait me demandais si il sagit bien de la bonne personne et il ne le fait pas?
Si tu peux m'expliquer pourquoi et si tu veux d'autre détails je suis toujours disponible pour tes conseils.
Merci
 
G

Guest

Guest
Re : Recherche dans tableau excel

re zepeto,

Dans les lignes suivantes:
Code:
With Worksheets(1).Range("a1:a500")
        Set c = .Find([COLOR=green][B]NomCherche[/B][/COLOR],LookIn:=xlValues, After:=Range("A1"))

La recherche se fait sur la première feuille du classeur dans de A1:A500 c'est bien cela que tu veux?

NomCherche est a remplacer par la valeur que toi tu cherches.

sinon, sans exemple plus concret(un classeur), je ne peux pas voir ce qui ne va pas.

A+
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Merci et désolé pour la question je devait surment manquer d'attention.
En tout cas j'ai adapter ton code pour moi.
De plus je voudrais bien que tu m'explique pour la variable flag déclarer avec un type entier qui reçoit un msgbox et fini en type bouleen dans la condition de sortie de la boucle?
Merci

Private Sub ComboBox4_Change()
If Recherche.ComboBox4 = "" Then Exit Sub
Pointeur_a = ComboBox4.ListIndex + 2
Dim c As Range
Dim firstAddress As String
Dim flag As Integer
flag = vbNo
With Worksheets("proc").Range("a2:a65536")
Set c = .Find(ComboBox4, LookIn:=xlValues, After:=Range("A2"))
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Représentants
.TextBox1 = Cells(Pointeur_a, 35)
.TextBox2 = Cells(Pointeur_a, 36)
.TextBox3 = Cells(Pointeur_a, 37)
.TextBox4 = Cells(Pointeur_a, 38)
.TextBox5 = Cells(Pointeur_a, 39)
.TextBox6 = Cells(Pointeur_a, 40)
.TextBox7 = Cells(Pointeur_a, 41)
.TextBox8 = Cells(Pointeur_a, 42)
.TextBox9 = Cells(Pointeur_a, 43)
End With
flag = MsgBox("Est-ce bien de " & c.Text & " " & c.Offset(, 1) & " quil s'agit?", vbYesNo, "Recherche représentants")
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress And flag = vbNo
End If
If flag = vbYes Then
'Traitement on a trouvé
Else
' Traitement on a pas trouvé
MsgBox ("Recherche infructueuse")
End If
End With
End Sub

Mon nouveau probléme est que si je clique sur oui la premiére fois tous mes autre champs se remplissent correctement mais si je clique sur non pour passer au suivant puis à nouveau sur oui une fois que j'ai trouvé le bon cela ne se répercute pas sur les autre champs?
 
Dernière édition:
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

Dans:
Code:
flag = MsgBox("Est-ce bien de " & c.Text & " " & c.Offset(, 1) & " quil s'agit?", [COLOR=red]vbYesNo[/COLOR], "Recherche représentants")
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress And flag = vbNo

1 - MsgBox est ici une fonction qui affiche un texte et des boutons Oui et Non qui sont passés en arguments par une constante intrinsèque à VBA (vbYesNon). Ici la fonction retournera soit la Valeur vbYes soit la valeur vbNo (constantes integer également).
2 - pour Set c = .FindNext(c) j'aurai pu mettre :
if flag=vbno then Set c = .FindNext(c) pour qu'il lance la prochaine recherche.

3 - Si je ne l'ai pas mis c'est parceque de toute façon on teste flag en fin de boucle pour savoir s'il faut continuer ou non.

la fonction .FindNext(c), boucle sur la plage de recherche​


On lui dit d'arrêter s'il ne trouve pas de correspondance (c=nothing)​


Ou si l'adresse de la prochaine cellule trouvée dans la plage correspond la première adresse qu'on a déjà trouvé, il faut arrêter la boucle arrêter la boucle(c.Address=firstAddress).​


Troisième condition pour continuer: que l'on ai répondu Non au MsgBox.​
J'espère que ce n'est pas trop foireux comme explication.

A bientôt
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Merci pour l'explication. Quand je clique sur oui sa rempli des champs par raport à la valeur trouver dans le tableau.
Quand on me demande s'il sagit bien de ce que je veux, si je répond oui sa marche, mais si je dit non pour passer au suivant puis que je clique sur oui une fois que l'ai trouvé, les champs garde la valeurs de la premiére proposition. Je pense que c'est du au mauvais placement de mon code pour que les valeurs qui l'affiche concorde avec mon choix; enfin si tu as une solution elle m'intéresse?
Bonne soirée
 
G

Guest

Guest
Re : Recherche dans tableau excel

Re bonsoir,

Oui c'est l'ordre des instruction qui ne va pas.
Fais comme ceci:

Code:
Do 
    flag = MsgBox("Est-ce bien de " & c.Text & " " & c.Offset(, 1) & " qu' il s'agit?", vbYesNo, "Recherche représentants")
  if flag=vbNo then 'On continue
      Set c = .FindNext(c)
  else
     Exit do 'On sort de la boucle
  end if 
Loop While Not c Is Nothing And c.Address <> firstAddress
 
if flag=vbyes And Not c Is Nothing then
    With Représentants
          .TextBox1 = Cells(Pointeur_a, 35) ' Cells(c.row, 35) ??????
          .TextBox2 = Cells(Pointeur_a, 36)
          .TextBox3 = Cells(Pointeur_a, 37)
          .TextBox4 = Cells(Pointeur_a, 38)
          .TextBox5 = Cells(Pointeur_a, 39)
          .TextBox6 = Cells(Pointeur_a, 40)
          .TextBox7 = Cells(Pointeur_a, 41)
          .TextBox8 = Cells(Pointeur_a, 42)
          .TextBox9 = Cells(Pointeur_a, 43)
   End With
end if

A bientôt
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 913
Membres
101 837
dernier inscrit
Ugo