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
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
A voir également:
- MACRO COMPARAISON 2 COLONNES
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Word 2 colonnes - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
- Fusionner 2 colonnes excel - Guide
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
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 ;)
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 ;)
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
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
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...
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
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
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
6 août 2010 à 15:42
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