MACRO COMPARAISON 2 COLONNES

Fermé
coquillette - 6 août 2010 à 13:51
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 - 6 août 2010 à 17:26
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.....

A voir également:

2 réponses

Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
6 août 2010 à 14:06
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 ;)
0
j'ai déjà une macro que me colorie les cellules en fonction du résultat qui fonctionne très bien mais je voudrais à la place du coloriage le résultat de la différence entre la cellule c5 de la feuille 1 et la colonne c5 de la feuille 2.
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
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
6 août 2010 à 16:32
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
0
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...
0
Krysstof Messages postés 1483 Date d'inscription mercredi 18 février 2009 Statut Membre Dernière intervention 23 août 2010 294
6 août 2010 à 17:26
oh ben oui, j'ai plus la syntaxe, mais le plus simple : tu vas sur ta feuille, tu sélection A1
tu démarre l'enregistrement d'une macro, et tu fais :
clic droit sur la colonne D
insérer une nouvelle colonne
arreter la macro

rien d'autre

et hop, t'as le code dasn un nouveau module
0