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 le Fil,

Meilleurs voeux à tous!
Une année chargée de moments simples de bonheur!

Merci à Fhoest, Bébère, kjin, job, Brigitte, jeanpierre, Carcharodon, ..... de nous accompagner tout le long de nos projets!

Bebere,
c'est la ligne 1 que je souhaite comparer avec les autres lignes du tableau!

Pour la colonne C, prix; je cherche à trouver quels sont les résultats avoisinant à + ou - 5% la valeur C1, dans toute la colonne C uniquement, de C4 à C......

Je viens de tester mais les résultats en feuil1 ne semblent pas cohérents, pour une recherche avec en c1: 130.000€, il me sort 191.000€ comme ligne correspondante!

Bebère, 2 autres choses:
est-il faisable pour la lisibilité des résultats d'afficher directement dans la ListBox, avec des entêtes car on ne sait pas à quoi les résultats correspondent (X: pour Parking, Garage...?)

merci

Re Edit:
Pourquoi madiff n'est pas déclarée en Dim!?
 
Dernière édition:

fhoest

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

rebonjour bebere,provence,
pour que le code soit plus lisible
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 MyString = MyStringbdd Then
UserForm1.ListBox1.AddItem MyString
ici:
End If
End If
Next j
End With
MsgBox "fin de la comparaison"
End Sub


@+
 

Provence Vintage

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

Salut Fhoest, bebere, le Fil,

Oups:

ça devient dur pour moi d'interpreter :D, celà dit j'ai l'impression que l'on a un bug;:(
au lieu d'une recherche en cascade au fur et à mesure des critères,:rolleyes: le code recherche apparement de façon independante sur les différentes plages!:confused:
Je vous rejoins un fichier avec des commentaires,
merci encore;)

Cijoint.fr - Service gratuit de dépôt de fichiers
 
Dernière édition:

fhoest

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

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.

Bonsoir,provence, bebere
tu nous dis que l'on a un bugg mais ta demande de depart et alors pas celle que tu desire maintenant,
je pense que les codes proposé réponde a ta demande,
mais effectivement si tu desire une recherche en cascade cela est tout a fait autre chose et le facon de procédé pas la meme car il te faut en fonction d'un premier critère chercher d'autre critère de selection et ainsi de suite ce qui n a plus rien a voir avec les lignes identiques
pour un bien compare alors les maplage(x) entre elles en cascadeen fonction du resultat precedent.
A+
 

fhoest

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

Rebonsoir
as tu essayer ceci par rapport a ta premiere demande qui devait uniquement faire ressortir la ligne 144 dans la listbox
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 MyString = MyStringbdd Then
UserForm1.ListBox1.AddItem maplage1 & " " & MyString
ici:
End If
End If
Next j
End With
MsgBox "fin de la comparaison"
End Sub
A bientot
 

Bebere

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

rebonsoir
Cijoint.fr - Service gratuit de dépôt de fichiers
Provence
en feuille bdd vendeurs un essai avec filtre élaboré
au1:aw2 critères et extraction en as10
vois le résultat et tire en tes conclusions
moyen de le faire en vba
je pense comme fhoest,on tourne en rond
à bientôt
 

Provence Vintage

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

Bonjour Fhoest, bebere, le fil,

j'ai remis et testé ton dernier code, ainsi que l'avant dernier,
il me sort à chaque fois en résultats autre chose que la ligne 143!?
pourtant pour tester, j'ai recopié la ligne 1 en Ligne 143!

Je ne comprends pas bien où celà pêche
Merci
A+
 

Provence Vintage

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

Re Fhoest,

Le tient, pour l'instant,

ce que l'on cherche de façon auto, c la ligne 1 dans le reste du tableau, avec les critères définis;
Lorsque tu recopie la L1 en L10, par exemple, il devrait te sortir la L10,
mais ce n'est pas le cas!
 

fhoest

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

bonsoir,
si tu recopie simplement la ligne 1 vers la ligne 10 avec cette ligne de code de comparaison cela ne peut pas fonctionner
If mem_maplage1_moins < maplage1 < mem_maplage1_plus Then
car la comparaison est strictement inferieur et strictement superieur il faut alors inscrire
If mem_maplage1_moins < maplage1 < mem_maplage1_plus OR .Range("C4").Value= maplage1 Then
sur la meme ligne
A+
 

Provence Vintage

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

Bonjour fhoest, bebere, le fil,

Frustrant;:mad:
il n'y a rien a faire:
le code ne donne pas le bon résultat; il ne ressort pas la premiere ligne à l'identique et les lignes avoisinantes ayant les mêmes criteres!:(

Fais l'essai si tu as le temps, moi j'ai essayé de nouveau;
comprends pas ou ça bloque:confused:

Bebere: l'extraction proposée, tu fais comment?
au niveau des résultats, les villes ne correspondent pas à la première ligne!

Merci beaucoup encore à tous les deux
Bonne journée
 

fhoest

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

Bonjour,
voila j'ai mis le code moi meme,j'ai inserer une ligne 10 puis j'ai fais une copie complete de la ligne 4 vers la ligne 10 .
j'ai ajouté également le numero de ligne dans la listbox ,ensuite le fait d'inserer une ligne ce n'est plus la 144 mais la 145 qui est prise en compte par la recherche;
je lance la macro par le userform a l'aide du bouton recherche et j'obtiens les deux resultat dans la listbox (ligne 10 et ligne 145)
maintenant si ca ne marche pas chez toi je ne comprend plus rien
j'ai mis exactement le code que je t'avais envoyé avec la petite modif de ligne dans la listbox et la derniere ligne de comparaison que je t'avais donner.
Essai et dit moi que ça marche svp
A+
et bon courage.
Cijoint.fr - Service gratuit de dépôt de fichiers
 

Discussions similaires

Réponses
3
Affichages
556