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,

j'ai essayé d'écrire ce bout de code, mais rien à faire!
#Sub TrouverLignesIdentiques()

Dim MyString As String, MyStringbdd As String
Dim li As Long, MesLignes As Integer
Dim i As Byte
Dim Maplage1, Maplage2, Maplage3, Maplage4, Maplage5, Maplage6


With Sheets("bdd vendeurs")

maligne = li

Maplage1 = Maplage1(li, "C")
Maplage2 = Maplage2(li, "P:T")
Maplage3 = Maplage3(li, "V")
Maplage4 = Maplage4(li, "X:AB")
Maplage5 = Maplage5(li, "AD")
Maplage6 = Maplage6(li, "AE:AP")

For i = 1 To 1
MyString = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6
Next
For i = 3 To 65536
MyStringbdd = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6
Next

If MyString = MyStringbdd Then
MsgBox "il y a des lignes correspondantes"
End If
End With

End Sub#

Qui peux m'aider!
merci
 

fhoest

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

bonsoir
essaie ce code:
Sub TrouverLignesIdentiques()

Dim MyString As String, MyStringbdd As String
Dim maligne As Long, MesLignes As Integer
Dim i, j, fin_de_ligne As Long
Dim Maplage1, Maplage2, Maplage3, Maplage4, Maplage5, Maplage6 As String




With Sheets("bdd vendeurs")
fin_de_ligne = Range("b65532").End(xlUp).Row


For i = 4 To fin_de_ligne
For j = 5 To fin_de_ligne

maligne = i

Maplage1 = Range("C" & maligne).Value
Maplage2 = Range("P" & maligne).Value & " " & Range("Q" & maligne).Value & " " & _
Range("R" & maligne).Value & " " & Range("s" & maligne).Value & " " & Range("T" & maligne).Value
Maplage3 = Range("V" & maligne)
'etc...

'Maplage4 = Maplage4(maligne, "X:AB")
'Maplage5 = Maplage5(maligne, "AD")
'Maplage6 = Maplage6(maligne, "AE:AP")

MyString = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6

maligne = j
Maplage1 = Range("C" & maligne).Value
Maplage2 = Range("P" & maligne).Value & " " & Range("Q" & maligne).Value & " " & _
Range("R" & maligne).Value & " " & Range("s" & maligne).Value & " " & Range("T" & maligne).Value
Maplage3 = Range("V" & maligne)
'etc...

'Maplage4 = Maplage4(maligne, "X:AB")
'Maplage5 = Maplage5(maligne, "AD")
'Maplage6 = Maplage6(maligne, "AE:AP")
MyStringbdd = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6
If i = j Then GoTo ici

If MyString = MyStringbdd Then
MsgBox "il y a des lignes correspondantes"
MsgBox "la ligne " & i & " et la ligne " & j
ici:

End If
Next j
Next i

End With
MsgBox "fin de la comparaison"
End Sub
et bonne fete de nouvel an
A+
 

Provence Vintage

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

Fhoest, le Fil,

Bonjour,

malheureusement, le code me donne aucun résultat, alors qu'au minimum, il devrait me sortir la dernière ligne en identique!

De plus, je ne sais pas paramétrer les plages en fonction de mes critères énoncés si dessus!

Ci-joint fichier réactualisé:
Cijoint.fr - Service gratuit de dépôt de fichiers

Merci, et bonne journée!
si pas de news, bonne année!
 

fhoest

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

bonjour,
ça fonctionne mais n'enleve pas a nouveau la boucle I
avec une petite modif pour mettre ta liste a jour,
patiente ne touche a rien car c'est assez long,jusqu'au message terminé:
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 As Long
Dim Maplage1, Maplage2, Maplage3, Maplage4, Maplage5, Maplage6 As String


With Sheets("bdd vendeurs")
fin_de_ligne = Range("b65532").End(xlUp).Row


i = 1
For i = 4 To fin_de_ligne
For j = 5 To fin_de_ligne

maligne = i

Maplage1 = Range("C" & maligne).Text
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 = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6

maligne = j
Maplage1 = Range("C" & maligne).Text
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 = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6
If i = j Then GoTo ici

If MyString = MyStringbdd Then
'MsgBox "il y a des lignes correspondantes"
'MsgBox "la ligne " & i & " et la ligne " & j
UserForm1.ListBox1.AddItem MyString

ici:

End If
Next j
Next i

End With
MsgBox "fin de la comparaison"
End Sub

A+
 

Provence Vintage

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

Fhoest, le Fil,

je viens d'essayer, mais il ne donne aucun résultats,
Normalement, il devrait au minimum sortir la ligne 143, identique à la ligne 1!
je ne comprends pas dans ton code pourquoi tu compare de 4 à der et de 5 à der!
la ligne à comparer est la 1, avec le restant du tableau de 4 à .....
je n'arrive pas à l'interpreter dans ton code!

chez toi, ça a fonctionné?
 

fhoest

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

en fait dans le code je compare toutes les lignes entre elles ce qui me donne plusieurs ligne communes insérer dans listbox1 de ton userform.
et il trouve chez moi plusieurs correspondance exacte
As tu insérer le code en entier?
Si oui je ne vois pas pourquoi la listbox est vierge
A+
 

fhoest

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

si ce que tu veux est comparer la ligne 4 par rapport a toutes les autres :
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 As Long
Dim Maplage1, Maplage2, Maplage3, Maplage4, Maplage5, Maplage6 As String


With Sheets("bdd vendeurs")
fin_de_ligne = Range("b65532").End(xlUp).Row


i = 1
'For i = 4 To fin_de_ligne
For j = 5 To fin_de_ligne

maligne = 4

Maplage1 = Range("C" & maligne).Text
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 = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6

maligne = j
Maplage1 = Range("C" & maligne).Text
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 = Maplage1 & " " & Maplage2 & " " & Maplage3 & " " & Maplage4 & " " & Maplage5 & " " & Maplage6
If i = j Then GoTo ici

If MyString = MyStringbdd Then
'MsgBox "il y a des lignes correspondantes"
'MsgBox "la ligne " & i & " et la ligne " & j
UserForm1.ListBox1.AddItem MyString

ici:

End If
Next j
'Next i

End With
MsgBox "fin de la comparaison"
End Sub

si toutes les lignes entre elles la macro precedente,
ensuite,
pour verifier que ta macro fonctionne bien,
tu copie avant de la lancer la ligne 4 tu la colle a la fin et tu verras que la listbox n'est pas vierge.
A+
 

Bebere

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

bonjour Fhoest

en début de code tu as

With Sheets("bdd vendeurs")
si tu écris
fin_de_ligne = Range("b65532").End(xlUp).Row
tu auras l'index de ligne de la feuille active et pas celui de Sheets("bdd vendeurs")
exepté si elle l'est(active)
reproduit la situation exécute le code pas à pas(F8) et constate
voir aide
à bientôt
 

fhoest

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

bonjour, bebere provence,
merci je ne savais pas car je n'utilise jamais la fonction with dans mes code cependant j'avoue que je l'ignorer c'est intéressant de connaitre la raison pour laquelle tu me disais de mettre ce point .
effectivement dans mes codes je mets toujours sheets(blabla).activate
et justement je m'interresser a ce with pour mes prochain bout de code grace a toi j'éviterais des erreurs futur de ce coté la
A+
 

jeanpierre

Nous a quitté
Repose en paix
Re : vba:Comparer lignes de bdd et afficher résultats

Bonjour au fil et à Bebere,

Bebere, utilise cijoint.fr (conservation des dépôts quasi illimitée) plutôt que cjoint.com (21 petits jours).

De plus sur le premier on peut choisir Ouvrir ou enregistrer alors que le second ouvre sans autre forme...

Bonne année tous.

Jean-Pierre
 

Discussions similaires

Réponses
3
Affichages
533

Membres actuellement en ligne

Statistiques des forums

Discussions
312 348
Messages
2 087 508
Membres
103 568
dernier inscrit
NoS