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

Merci pour ton aide je vais tanter d'adapter ton code à mes besoins.
Je vous tiens au courant de ma progression.
Bonne soirée
 

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

Aujourd'hui Hasco tu serait pas mon sauveur. Lol, en tout cas je te dit merci et tu viens de me permettre de boucler un de mes projets.
Bonne fin de journé à tous le forum
 

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 édition par un modérateur:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonjour, je viens de modifier l'ordre des instructions mais sa n'a absolument rien changer.
J'ai tenter un peu partout et je trouve rien qui marche?
HELP....
 
G

Guest

Guest
Re : Recherche dans tableau excel

bonjour le forum,
bonjour Zepeto,

Le mieux est de joindre un fichier avec la macro et des données anonymisées.

A bientôt
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Je c'est bien mais le probléme sait que mon classeur fait dans les 470 ko et dans mon entreprise je n'est aucun logiciel de compression donc je t'envoie tout sa ce soir et encore merci
 
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

Essaie de reproduire le problème dans un nouveau fichier avec quelques données anonymisées mais telles quelles sont présentées dans le fichier réel et seulement la macro, sans le user form. Joins ce nouveau fichier sur le forum.

A bientôt
 
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

voici un exemple dans le fichier joint.

J'ai construit 1 userform avec la méthode de recherche tels que demandés
et un autre avec une autre solution.
A bientôt

[EDITION] retrait du fichier (obsolète) pour alleger le serveur voir version en fin de fil
 
Dernière édition par un modérateur:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Je suis entreprise donc impossible pour moi de pouvoir regarder ta solution car ils ont bloqués le téléchargement sur le réseau mais dés que je déboche je regarde sa, et voici ce qui se passe pour moi, voir PJ
 

Fichiers joints

G

Guest

Guest
Re : Recherche dans tableau excel

RE Zpepeto,

Je pense que la deuxième solution qui se trouve dans le classeur de mon fichier précédent conviendra très bien à ton problème.

A bientôt
 

Discussions similaires


Haut Bas