vba:Comparer lignes de bdd et afficher résultats

Provence Vintage

XLDnaute Occasionnel
Bonjour le Forum,

j'ai une bdd avec en première ligne des valeurs à comparer avec les autres lignes de ma bdd de l4 à l65536.
Je voudrais afficher les lignes identiques dans une ListBox.

Cette première ligne comprends plusieurs plages de comparaison::p

plage1 = Colonne C (= Prix), qui doit être comparé avec les autres lignes avec une recherche à + ou - 5% (car sinon les résultats ne seront jamais identiques)

plage2 = Colonne P à T

plage3 = Colonne V

plage4 = Colonne X à AB

plage5 = Colonne AD

plage6 = Colonne AE à AP; avec une particularité*:eek:

*Si dans ces colonnes la valeur X est trouvée dans la même colonne qu'en ligne 1, alors les autres colonnes peuvent comporter des différences (X ou rien)

Le fichier exemple met en avant que la ligne 143 au minimum devrait sortir comme résultat!:D

Cijoint.fr - Service gratuit de dépôt de fichiers


j'ai quelques pistes via le forum avec:

#"OptionExplicit
OptionCompareText
Dim Plage As Range, Cell As Range, Lastrow As Integer, I AsByte

Dim MyString As String
MyString = Maplage1(maligne, 1) & " " & Maplage1(maligne, 2)
l1 As Long, l2 As Long, MesLignes As Integer

si MyString =MyString2 alors"#

mais je suis trop débutant pour savoir l'écrire.....

Merci d'avance à toutes celles et ceux qui voudront bien m'aider!
bonne journée
 

Provence Vintage

XLDnaute Occasionnel
Re : vba:Comparer lignes de bdd et afficher résultats

Bonjour Fhoest, Bebere,

Bebere, merci pour l'explication de "B"; ce que je n'arrive pas à capter pour l'instant c là où ça bug! j'essaye avec F1

Fhoest,
ça peux paraître bizarre en effet:

La ligne 1 dans "bdd vendeurs" correspond à l'extraction des desiderata d'un Acquéreur, suite à une recherche dans un autre USF (qui lui a parfois plusieurs options de villes).
Etant donné que je ne savais pas comment allais se goupiller la comparaison entre les choix d'un acquéreur et les biens à vendre, j'ai préféré à l'origine monter dans mon code de création de biens, l'enregistrement de la ville du bien sur chacune des colonnes correspondant aux différents choix d'un acquéreur.
Voili!

Merci à vous deux pour votre intêret!

Bonne journée
a+
 

Bebere

XLDnaute Barbatruc
Re : vba:Comparer lignes de bdd et afficher résultats

bonjour Provence,Fhoest
Cijoint.fr - Service gratuit de dépôt de fichiers
amélioration du filtre élaboré par vba
mis 2 listbox pour choisir critères colonne c
suivant choix terrain,villas,etc , le prix
suivant type,ajouter vide
pour le moment appliquer les 4 critères, type peut en avoir plusieurs
à bientôt
 

Provence Vintage

XLDnaute Occasionnel
Re : vba:Comparer lignes de bdd et afficher résultats

Bonsoir fhoest, Bebere, le fil,

Passé un bon we?:)

Fhoest:
non pas de soucis pour combobox 4 ,
par contre, j'ai du mal à saisir la diff entre recherche en % et Combobox 1!
sur Recherche en %, la saisie num demandée, est-ce la valeur du %!?
Par contre, chez moi la cascade ne fonctionne pas, si tu met une recherche % et que tu selectionnes uniquement le critère Ville, nada!:(

Bebere,
est-il possible de mettre un msg box "veuillez saisir chaque critère de recherche" et un "on erreur goto o " pour éviter le debugage si l'on fait une recherche en ne saisissant pas tous les critères!?
Je ne trouve pas ou je peux l'insérer dans le code!:eek:

Dernière question, peux t'on mettre un sub double click pour sélectionne une ligne précise pas dans feuille 1 mais dans bdd!?

Merci pour votre boulot tous les 2 :)
bonne soirée!
 

fhoest

XLDnaute Accro
Re : vba:Comparer lignes de bdd et afficher résultats

par contre, j'ai du mal à saisir la diff entre recherche en % et Combobox 1!
sur Recherche en %, la saisie num demandée, est-ce la valeur du %!?
Par contre, chez moi la cascade ne fonctionne pas, si tu met une recherche % et que tu selectionnes uniquement le critère Ville, nada!:(
en fait lorsque tu selectionne la recherche en % c'est effectivement le pourcentage + et - de la valeur que tu va saisir dans la combobox1 du userform2 qui s'ouvre et non pas sur l'autre userform.
ensuite je n' ai pas fais une recherche en cascade mais une recherche sur les différents critères des combos
si tu choisis une valeur avec le % ca te liste toute les ligne en rapport avec ce % et ta valeur de combo.userform2
et si tu choisis une ville ca te liste toute les ligne contenant cette ville
meme chose pour le type de logement
A+
si tu as d'autre remarque ou demande de modif n'hesite pas mais pense a utiliser ce que j'ai fais pour voir si c'est bien .

bonne soirée!
 
Dernière édition:

Provence Vintage

XLDnaute Occasionnel
Re : vba:Comparer lignes de bdd et afficher résultats

Bebere, Fhoest, le Fil,

Bebere,

j'ai enfin reussi à adapter,
le bug venait en effet des formules affichant #valeur!
Comment puis-je faire pour double clicker sur les résultats et utiliser les numéros de lignes concernés pour afficher et consulter mon USF RechetCréaPijesMandat !?
As tu une idée!?
Ici, les résultats de recherche correspondent à un filtre via VBA, je ne peux donc après utiliser toutes les infos de ma bdd!
il me manque notamment:
le tel et le nom du vendeur!
peux t'on au moins rajouter celà dans l'extraction viale code que tu as crée?!

Fhoest, en recherche auto,
j'ai eu beau essayer de modifier le code de comparaison de lignes et reduire les paramètres critères de recherche,
les résultats ne sont pas cohérents par rapport au premier critère qui est le prix
je te re soumet le code:

#Sub TrouverLignesIdentiques()
MsgBox "la recherche est assez longue, patientez", vbInformation
Dim MyString As String, MyStringbdd As String
Dim maligne As Long, MesLignes As Integer
Dim i, j, fin_de_ligne, maplage1 As Long
Dim Maplage2, Maplage3, Maplage4, Maplage5, Maplage6 As String
Dim mem_maplage1_moins, mem_maplage1_plus As Long
With Sheets("bdd vendeurs")
fin_de_ligne = .Range("b65532").End(xlUp).Row
i = 1
For j = 5 To fin_de_ligne
maligne = 4
maplage1 = .Range("C" & maligne).Value
mem_maplage1_moins = Val(maplage1 - (maplage1 / 100) * 5)
mem_maplage1_plus = Val(maplage1 + (maplage1 / 100) * 5)
Maplage2 = .Range("P" & maligne).Text & " " & .Range("Q" & maligne).Text & " " & _
.Range("R" & maligne).Text & " " & .Range("S" & maligne).Text & " " & .Range("T" & maligne).Text
Maplage3 = Range("V" & maligne)
Maplage4 = Range("X" & maligne).Text & " " & .Range("Y" & maligne).Text & " " & _
.Range("Z" & maligne).Text & " " & .Range("AA" & maligne).Text & " " & .Range("AB" & maligne).Text
'Maplage5 = Range("AD" & maligne)
'Maplage6 = Range("AE" & maligne).Text & " " & .Range("AF" & maligne).Text & " " & _
'.Range("AG" & maligne).Text & " " & .Range("AH" & maligne).Text & " " & .Range("AI" & maligne).Text & " " & _
'.Range("AJ" & maligne).Text & " " & .Range("AK" & maligne).Text & " " & .Range("AL" & maligne).Text & " " & _
'.Range("AM" & maligne).Text & " " & .Range("AN" & maligne).Text & " " & .Range("AO" & maligne).Text & " " & _
'.Range("AP" & maligne).Text
MyString = Maplage2 & " " & Maplage3 & " " & Maplage4 '& " " & Maplage5 & " " & Maplage6
maligne = j
maplage1 = Range("C" & maligne).Value
Maplage2 = Range("P" & maligne).Text & " " & .Range("Q" & maligne).Text & " " & _
.Range("R" & maligne).Text & " " & .Range("S" & maligne).Text & " " & .Range("T" & maligne).Text
Maplage3 = Range("V" & maligne)
Maplage4 = Range("X" & maligne).Text & " " & .Range("Y" & maligne).Text & " " & _
.Range("Z" & maligne).Text & " " & .Range("AA" & maligne).Text & " " & .Range("AB" & maligne).Text
'Maplage5 = Range("AD" & maligne)
'Maplage6 = Range("AE" & maligne).Text & " " & .Range("AF" & maligne).Text & " " & _
'.Range("AG" & maligne).Text & " " & .Range("AH" & maligne).Text & " " & .Range("AI" & maligne).Text & " " & _
'.Range("AJ" & maligne).Text & " " & .Range("AK" & maligne).Text & " " & .Range("AL" & maligne).Text & " " & _
'.Range("AM" & maligne).Text & " " & .Range("AN" & maligne).Text & " " & .Range("AO" & maligne).Text & " " & _
'.Range("AP" & maligne).Text
MyStringbdd = Maplage2 & " " & Maplage3 & " " & Maplage4 '& " " & Maplage5 & " " & Maplage6
If i = j Then GoTo ici
'If mem_maplage1_moins < maplage1 < mem_maplage1_plus Then
If mem_maplage1_moins < maplage1 < mem_maplage1_plus Or .Range("C4").Value = maplage1 Then
If MyString = MyStringbdd Then
Moteurrecherchebien.ListBoxauto.AddItem maplage1 & " " & MyString & "numero de ligne " & maligne
ici:
End If
End If
Next j
End With
MsgBox "fin de la comparaison"
End Sub
Sub ici(X As String)
Dim L As Long
L = Range("feuil1!a65532").End(xlUp).Row + 1
Range("feuil1!a" & L) = X
End Sub#


Merci à vous deux et bonne fin de journée
:)
 

Pièces jointes

  • excel.jpg
    excel.jpg
    23.7 KB · Affichages: 57
  • excel.jpg
    excel.jpg
    23.7 KB · Affichages: 60
  • excel.jpg
    excel.jpg
    23.7 KB · Affichages: 55

fhoest

XLDnaute Accro
Re : vba:Comparer lignes de bdd et afficher résultats

bonjour,bebere,provence,
oui effectivement si tu veux reduire la recherche automatique par les critères qui suivent cela ne peux pas marcher,car ce que j'ai fais c'est une recherche manuel séparer de la recherche auto:
exemple si tu veux par prix et par% tu selectionne recherche par prix %
et tu as le resultat dans la combobox
tu peux effacer ce resultat si tu veux avec refresh
si tu veux d'autres critères de selection tu utilise les autres combobox par lesquels tu pourra rechercher par exemple tous les T5,ou alors tous ce qui concernent une ville ,ou encore un prix etc...
tu peux a chaque fois effacer cette liste entre chaque critère a l'aide de refresh
A+
 

Discussions similaires

Réponses
3
Affichages
593

Statistiques des forums

Discussions
312 755
Messages
2 091 710
Membres
105 054
dernier inscrit
uzaoui