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.
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Re bonjour hasco, ta méthode se répercute sur l'ensemble de mon code alors je suis en train de l'adapter à mes besoins mes le problémes c'est que la dénomination n'est pas le seul champ de recherche donc quand je me sert d'une autre combobox pour faire une recherche je c'est pas comment gérer le décalage des colonnes dans le offset (dés fois c'est négatif est il aime pas)?
De plus, il faudrait que je modifie le code du bouton "suivant" pour que sa marche avec les différente combobox ainsi que le UserForm_initialize() ?
Ensuite, j'ai une combobox de recherche qui doit se remplir avec plusieurs colonne et la je sais pas faire et en plus la je vois pas comment faire avec le offset dans se cas...
Enfin, si tu veux je peux t'envoyer mon code complet?
Merci par avance pour ton aide et je reste disponible pour plus d'informations.
 
G

Guest

Guest
Re : Recherche dans tableau excel

Re bonjour,

Zepeto à dit:
(dés fois c'est négatif est il aime pas)?
La 'méthode' Offset(Ligne,colonne) signale une erreur si ligne ou colonne sont inférieurs à 1 ou supérieurs respectivement au nombre de lignes le la feuilles (65536 pour xl<2007) ou au nombre de colonnes de la feuille (256 xl<2007).

Quand aux recherches et combobox, essaie le classeur ci-joint pour voir si une des deux méthodes proposées ne te va pas mieux.


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

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Bonsoir hasco je voulais juste savoir si tu pouvait me dire se que représente :
c.Address dans le code?


Private Sub cbDenomination_Change()
' Si la procédure est appelée lors du chargement de la liste ou
' qu'aucun choix dans la combo on sort
If cbDenomination.ListIndex = -1 Or bChargementListe Then Exit Sub
'conserver la première adresse de cellule trouvée
Adr1 = "": lblMsg = ""
btnSuivant.Caption = "Suivant"
' Trouver la première occurence
If NomEnCours <> cbDenomination.Value Then
Set c = plage.Find(what:=cbDenomination.Value, LookIn:=xlValues)
If Not c Is Nothing Then
Adr1 = c.Address
NomEnCours = c.Value
btnSuivant.Enabled = True
ComboBox1 = c.Offset(, 1)
tbCP = c.Offset(, 2)
tbVille = c.Offset(, 3)
Else
btnSuivant.Enabled = False
lblMsg = "Aucune occurence trouvée"
End If
End If
End Sub

Et je ne comprend pas pourquoi on part de "A1" (la premiére ligne se sont les titres) alors que le tableau commence en "A2" ?


Private Sub UserForm_Initialize()
Dim c As Range
Set plage = Feuil1.Range("A1:A" & Feuil1.Range("A65536").End(xlUp).Row)
'On ajoute des occurences uniques à la combobox des noms
bChargementListe = True
For Each c In plage.Cells
If c.Row <> plage.Range("A1").Row Then
cbDenomination.Text = Trim(c.Text) 'cette ligne entraine l'évènement cbNoms_Click()
If cbDenomination.ListIndex = -1 Then cbDenomination.AddItem c
End If
Next
cbDenomination.ListIndex = -1
bChargementListe = False



Merci
 
Dernière édition:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Sinon, pour l'instant j'ai retoucher ton code pour que je puisse faire des recherche sur mon tableau avec plusieurs combobox indépendante mais je bloque sur se que je t'ai demandé juste au dessus.
Je te met en PJ ce que j'ai fait si jamais tu à des propositions pour moi ou si jamais je suis sur une mauvaise piste.
Merci
 

Pièces jointes

  • hasco.zip
    27.1 KB · Affichages: 24
  • hasco.zip
    27.1 KB · Affichages: 25
  • hasco.zip
    27.1 KB · Affichages: 21

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Re : j'ai réussi à faire une recherche sur l'adresse mais il y a quelque petit beug comme si le programme se mélanger les pinceau et la premiére combobox qui recherché sur la dénomination ne marche plus, bisare pour moi?
 

Pièces jointes

  • hasco.zip
    28.2 KB · Affichages: 27
  • hasco.zip
    28.2 KB · Affichages: 30
  • hasco.zip
    28.2 KB · Affichages: 28
Dernière édition:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Toujours personne....
En fait je voudrais savoir comment mettre dans mon UserForm_initialize() une condition me permettant de faire la recherche sur la combobox que je veux et je pense que sa résoudra mon probléme enfin sa reste mon point de vue?


mon idée :
Private Sub UserForm_Initialize()
Dim c As Range
Dim d As Range

If "on choisi de rechercher avec la combobox1" Then
Set plage = Feuil1.Range("b1:b" & Feuil1.Range("b65536").End(xlUp).Row)
'On ajoute des occurences uniques à la combobox des noms
bChargementListe = True
For Each d In plage.Cells
If d.Row <> plage.Range("b1").Row Then
ComboBox1.Text = Trim(d.Text) 'cette ligne entraine l'évènement cbNoms_Click()
If ComboBox1.ListIndex = -1 Then
' test de la valeur de d si elle vaut rien alors on affiche pas comme sa sa enléve les trou dans les combobox
If d <> "" Then ComboBox1.AddItem d
End If
End If
Next
ComboBox1.ListIndex = -1
bChargementListe = False
Else
If "on choisi de rechercher avec cbDenomination" Then

Set plage = Feuil1.Range("A1:A" & Feuil1.Range("A65536").End(xlUp).Row)
'On ajoute des occurences uniques à la combobox des noms
bChargementListe = True
For Each c In plage.Cells
If c.Row <> plage.Range("A1").Row Then
cbDenomination.Text = Trim(c.Text) 'cette ligne entraine l'évènement cbNoms_Click()
If cbDenomination.ListIndex = -1 Then
' test de la valeur de c si elle vaut rien alors on affiche pas comme sa sa enléve les trou dans les combobox
If c <> "" Then cbDenomination.AddItem c
End If
End If
Next
cbDenomination.ListIndex = -1
bChargementListe = False
End If
End If

End Sub


Je ne trouve pas par quoi remplacer ce qui est en rouge pour que sa fonctionne correctement?
Merci pour votre aide
 
Dernière édition:
G

Guest

Guest
Re : Recherche dans tableau excel

bonjour Zepeto, Le forum,

je n'étais pas là hier alors....je n'ai pas tout suivi.

Je vais répondre ici à test deux questions du message #35
1 :
que représente :c.Address dans le code?
c.Address représente l'adresse de la première cellule trouvée de la plage de recherche qui correspond à la valeur cherchée. En fait si tu ne retiens pas l'adresse de cette première cellule pour la comparer aux suivantes en fin de boucle. La méthode Find pourrait continuer A Vitae aeternam. Elle permet de savoir que la méthode Find a fait une boucle entière sur la plage et est renvenu à la première cellule, prête comme un bon petit soldat, à repartir. A la fin de la boucle on a la ligne 'While not c is nothing and c.Address<>Adr1' qui elle fait le test.

2 :
Et je ne comprend pas pourquoi on part de "A1"
dans :
Set plage = Feuil1.Range("A1:A" & Feuil1.Range("A65536").End(xlUp).Row)

Décomposons la ligne qui aurait pu se décomper en plusieurs:
Set Cellule1=Feuil1.Range("A1") 'Position de la première cellule de la plage
Set Cellule2=Feuil1.Range("A65536").End(xlup) ' position de la première cellule non vide en partant de "A65536" et en remontant la colonne. Equivalent à se positionner en bas de la colonne et faire CTRL+Touche vers le haut
Set Plage=Feuil1.Range(Cellule1,Cellule2) 'Enregistre la plage aux coordonnée (A1:An)

Imagine pour une raison ou une autre, la possibilité qu'il n'y ait rien en ligne 2. La plage finale serait "A2:A1" avec rien en A2. Incohérent. C'est pourquoi on par de A1. Dans notre cas, que l'entête soit incluse ou pas dans la plage ce n'est pas un problème. Mais pour indication on peut ôter l'entête en faisant Set plage=Plage.offset(1,plage.Rows.count-1). Ce qui décale la plage d'une ligne tout en lui enlevant une ligne.

Pour les question suivante, laisse moi le temps d'examiner cela.

A bientôt
 
G

Guest

Guest
Re : Recherche dans tableau excel

Re Zepeto:

construit un UserForm avec un seul combo dans lequel tu mets comme valeur "Nom", "Dénomination" et à coté un bouton 'Chercher' et en fonction du choix de l'utilisateur tu oriente la recherche sur la colonne A ou la colonne B dans une procédure unique que tu appèle avec des paramètres, du style:

Code:
Sub Chercher(Quoi as string, ValeurCherchee as string)
 
    If Quoi="Nom" then 
          Set plage= etc....
    ElseIf Quoi="Denomination"
          Set plage= etc......
    End if
 
    .....
     Set c=Plage.Find(What:=ValeurCherchee.........
 
   ......
End sub

A bientôt
 

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Un grand merci hasco je viens de voir ta PJ et elle marche nikel par contre j'avais une petite erreur sur le bouton "Suivant" et sa lancer le débogueur au niveau de cette ligne : btnSuivant.Enabled = "" , alors je me suis permis de mettre sa à la place :

btnSuivant.Caption = "Recommencer"
' btnSuivant.Enabled = ""
lblMsg = "Fin de la recherche"

et je n'ai plus d'erreur enfin c'est une correction de zepeto lol.
De plus, dans mon classeur complet j'ai 49 colonnes donc autant de possibilité dans le combobox de la recherche mais je voudrais n'en avoir que certain, alors je me demandé comment cacher les éléments qui sont apparu dans ma combobox que je ne désire pas?
Bonne fin de journé à toi et tout le forum
 
Dernière édition:

zepeto

XLDnaute Occasionnel
Re : Recherche dans tableau excel

Re :
disons que je trouve pas de moyen pour dire au combobox de n'afficher que "dénomination" et "adresse", je ne veut pas avoir la ville et le cp dans le combobox?
Merci de bien vouloir m'orienter ou même une idée
 
G

Guest

Guest
Re : Recherche dans tableau excel

Zepeto,

il te faut enlever les lignes qui les affiche, dans la boucle de recherche

Code:
                    tbCP = .Cells(c.Row, 3)
                    tbVille = .Cells(c.Row, 4)

Mais ça tu aurais pu le trouver tout seul...avec un peu d'effort:cool:

A bientôt
 

Discussions similaires