MACRO COMPARAISON 2 COLONNES
coquillette
-
Krysstof Messages postés 1659 Statut Membre -
Krysstof Messages postés 1659 Statut Membre -
Bonjour à tous,
j'ai besoin de vos lumières pour éclairer mon problème.
voila je vous explique: j'ai 2 feuilles avec dans chaque feuilles 1 tableau où j'aimerais comparer la colonne C de la feuille 1 avec la colonne C de la feuille 2.
si le résultat est différent j'aimerais que sur la colonne D de la feuille 2 apparaissant le résultat de la différence entre la colonne C de la feuille 1 et la colonne C de la feuille 2.
j'espère avoir été claire dans mon explication et vous remercie pour l'aide que vous pourrez m'apporter car là je sèche depuis plusieurs jours et mon projet n'avance pas.....
merci beaucoup par avance.....
j'ai besoin de vos lumières pour éclairer mon problème.
voila je vous explique: j'ai 2 feuilles avec dans chaque feuilles 1 tableau où j'aimerais comparer la colonne C de la feuille 1 avec la colonne C de la feuille 2.
si le résultat est différent j'aimerais que sur la colonne D de la feuille 2 apparaissant le résultat de la différence entre la colonne C de la feuille 1 et la colonne C de la feuille 2.
j'espère avoir été claire dans mon explication et vous remercie pour l'aide que vous pourrez m'apporter car là je sèche depuis plusieurs jours et mon projet n'avance pas.....
merci beaucoup par avance.....
A voir également:
- MACRO COMPARAISON 2 COLONNES
- Faire 2 colonnes sur word - Guide
- Supercopier 2 - Télécharger - Gestion de fichiers
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Inverser 2 colonnes excel - Guide
2 réponses
le probleme de la comparaison de 2 colonne est "comment tu veux comparer?"
en gros, si tu veux comparer ligne a ligne (si C1 = C1 alors ok, si C2 <> C2 alors pas ok, etc...)
ca c'est facile
si par contre tu veux comparer la cellule C1 avec toutes les cellule de l'autre feuille, pareil pour c2, C3 etc... la c'est pas la meme chose.
ensuite bien sur si tu fait le 1er choix, tu est dépendant de l'ordre de tes ligne, du nombre de lignes, etc.
donc explique mieux ce que tu veux comparer pour commencer ;)
en gros, si tu veux comparer ligne a ligne (si C1 = C1 alors ok, si C2 <> C2 alors pas ok, etc...)
ca c'est facile
si par contre tu veux comparer la cellule C1 avec toutes les cellule de l'autre feuille, pareil pour c2, C3 etc... la c'est pas la meme chose.
ensuite bien sur si tu fait le 1er choix, tu est dépendant de l'ordre de tes ligne, du nombre de lignes, etc.
donc explique mieux ce que tu veux comparer pour commencer ;)
Dim lig1 As Long, derlig1 As Long, derlig2 As Long, cp As Variant
Dim lig2 As Long, FR1 As Worksheet, FR2 As Worksheet
Set FR1 = Sheets("sem 47")
Set FR2 = Sheets("sem 48")
derlig1 = FR1.Range("b65535").End(xlUp).Row
derlig2 = FR2.Range("b65535").End(xlUp).Row
For lig1 = 2 To derlig1
cp = FR1.Cells(lig1, "b")
For lig2 = 2 To derlig2
If cp = FR2.Cells(lig2, "b") Then
If FR1.Cells(lig1, "c") > FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 15
ElseIf FR1.Cells(lig1, "c") < FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 4
Else: FR2.Cells(lig2, "c").Interior.ColorIndex = 8
End If
Exit For
End If
Next lig2
Next lig1
End Sub
ok, donc tu cherche la comparaison sur la valeur de la colonne B et tu mets en couleur le résultat dans C, et tu fais 65000 fois 65000 iterations !
ca se travaille ^^
bref, la technique, si ya pas de ligne vide dans la colonne B, consiste à utiliser "isempty" pour savoir quand s'arrêter, et utiliser un booleen pour savoir que tu as trouver la valeur, donc ne pas continuer la 2eme boucle
ca donne
lig1 = 2
while not isempty(FR1.cells(lig1, "b")
dim trouve = false
lig2 = 2
while not isempty(FR2.cells(lig2, "b") and not trouve
if FR1.Cells(lig1, "b") = FR2.Cells(lig2, "b") then
'on met le bool a vrai, comme ca on continue pas la boucle au prochain tour
trouve = true
'ici on rajoute la valeur a mettre dans la colonne D
FR2.Cells(lig2, "d") = FR1.Cells(lig1, "c")- FR2.Cells(lig2, "c")
'et la on remet ton code de couleur
If FR1.Cells(lig1, "c") > FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 15
ElseIf FR1.Cells(lig1, "c") < FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 4
Else: FR2.Cells(lig2, "c").Interior.ColorIndex = 8
end if
lig2=lig2+1
wend
lig1 = lig1+1
wend
je te remercie beaucoup ta macro fonctionne impeccable mais je dois insérer moi même une colonne pour faire apparaitre le résultat car normalement dans mon tableau la colonne D est déja prise par autre chose
exemple:
colonne A = EAN
colonne B= libellé
colonne C= valeur
Colonne D= quantité
donc est ce qu'il existe 1 macro qui puisse m'insérer automatiquement une colonne entre la colonne C et D en fait qui décalerai la colonne D en colonne E....
merci encore...
exemple:
colonne A = EAN
colonne B= libellé
colonne C= valeur
Colonne D= quantité
donc est ce qu'il existe 1 macro qui puisse m'insérer automatiquement une colonne entre la colonne C et D en fait qui décalerai la colonne D en colonne E....
merci encore...
voici ma macro:
Sub comp46()
Dim lig1 As Long, derlig1 As Long, derlig2 As Long, cp As Variant
Dim lig2 As Long, FR1 As Worksheet, FR2 As Worksheet
Set FR1 = Sheets("sem 47")
Set FR2 = Sheets("sem 48")
derlig1 = FR1.Range("b65535").End(xlUp).Row
derlig2 = FR2.Range("b65535").End(xlUp).Row
For lig1 = 2 To derlig1
cp = FR1.Cells(lig1, "b")
For lig2 = 2 To derlig2
If cp = FR2.Cells(lig2, "b") Then
If FR1.Cells(lig1, "c") > FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 15
ElseIf FR1.Cells(lig1, "c") < FR2.Cells(lig2, "c") Then
FR2.Cells(lig2, "c").Interior.ColorIndex = 4
Else: FR2.Cells(lig2, "c").Interior.ColorIndex = 8
End If
Exit For
End If
Next lig2
Next lig1
End Sub
exemple: feuille 1
cellule c5 = 86
feuille 2
cellule c5 = 56
j'aimerai que dans la cellule d5 de la feuille 2 apparaisse = -30
j'espère avoir été + claire