comparaison de 2 colonnes

  • Initiateur de la discussion philippe
  • Date de début
P

philippe

Guest
Bonjour,

Je recherche le moyen de pouvoir comparer 2 colonnes de 2 feuilles différentes et de tirer les informations commnunes des cellules.
Ex:
colonne A (feuille1) colonne A (feuille 2) résultat
a d 0
b e 0
c a 1

1 = information commune aux 2 colonnes.

Merci de votre aide.
 

porcinet82

XLDnaute Barbatruc
salut philippe,

Bon je te propose une petite macro qui devrait effectuer le travail a ta place, et j'ai bien pris note des conseil prodigués ce matin par Thierry

code:
Sub essai()
Dim Val1 As Range
Dim Val2 As Range
Dim i As Integer

For i = 1 To Range('A1').End(xlDown).Row
Set Val1 = Sheets('feuil1').Range('a' & i)
Set Val2 = Sheets('feuil2').Range('a' & i)
If Val1 = Val2 Then
Sheets('feuil2').Range('b' & i).Value = '1'
Else
Sheets('feuil2').Range('b' & i).Value = '0'
End If
Next i
End Sub


voila bon fin d'aprem

@+
 

Gérard DEZAMIS

XLDnaute Accro
Bonjour Philippe et Porcinet82

Une solution en formule (mon VBA est trop pôôôvre !)

Cela va me permettre d'apprendre aussi

Merci

@+ GD

[file name=Comparer2colonnes.zip size=2745]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Comparer2colonnes.zip[/file]
 

Pièces jointes

  • Comparer2colonnes.zip
    2.7 KB · Affichages: 31

Gérard DEZAMIS

XLDnaute Accro
Salut Porcinet82

Ton code fonctionne mais ...

Il faut que les données de valeurs identiques qui seront codées 1 soient sur la même ligne (même ordre avec le même rang ...)

Tes deus Set reprenent la même variable i pour les deux listes

L'exemple de Philippe je l'ai compris ainsi :
si une valeur de la 2° liste existe en 1° alors 1 sinon 0

Il faudrait peut-être afiner cette formule car prendre la première ou la deuxième liste en reference de tri n'aura pas le même résultat si les nombres de valeurs sont différents.....
Affaire à suivre

@+ GD
 

Gérard DEZAMIS

XLDnaute Accro
Re de Re

En plus Porcinet je crois qu'il convient d'utiliser end(XlUp).row
cette méthode permet à la procédure de ne pas s'arreter à la première cellule vide.Faire le dépar à ('A65000') tu ne risques pas grand chose ...

Regarde ce que cela donne avec ton code si ta liste est incomplete
Une ou deux cellules vides

@+ GD
 

porcinet82

XLDnaute Barbatruc
salut Gérard DEZAMIS,

tu as entierement raison il vaut mieux utiliser 'end(XlUp).row', je crois qu'une fois sur deux je me plante, enfin le principale c'est que qqun me le fasse remarquer.
sinon je me suis poser la question moi aussi mais sans précisions j'ai fais ca vite fais. si ca ne suffit pas et bien je te laisse le soins de le réaliser

bonnne soirée a+
 

Hervé

XLDnaute Barbatruc
Bonsoir tout le monde

Sinon la traduction VBA de la formule de Gérard, au cas ou...

Public Sub vev()
Dim c As Range
Dim i As Integer

i = 1
With Sheets('feuil1')
For Each c In .Range('a1:a' & .Range('a65536').End(xlUp).Row)
If Application.WorksheetFunction.CountIf(Sheets('feuil2').Range('a1:a' & Sheets('feuil2').Range('a65536').End(xlUp).Row), c) > 0 Then
Sheets('feuil3').Range('a' & i) = '1'
Else
Sheets('feuil3').Range('a' & i) = '0'
End If
i = i + 1
Next c
End With
End Sub

salut
 

Gérard DEZAMIS

XLDnaute Accro
Bonsoir Hervé

Au cas où ... quel Kazou ? Je connaissais le Kaki , le cas qui fait ce qui est demandé. C'est exactement ce que tu as fait pour répondre à la demande de Philippe. :p

Je profite de ta venue pour une tuyau (Normale je suis une 'pipe' en VBA !) :)

Tu écris :
For Each c In .Range('a1:a' & .Range('a65536').End(xlUp).Row)
que j'aurais transformé en :
For Each c In .Range('a1:a65000').End(xlUp).Row
Petite erreur? Moyenne bourde ? Grossière incompréhension ? Katastrofik Mistake ?

Quel est l'avantage/inconvénient de ces deux formulations ?
Te merciant par avance
Bien Cordialement

@+ GD
 

Hervé

XLDnaute Barbatruc
Salut gérard

Que te répondre......

Voilà une synthaxe que je ne connaissais pas, mais apparement elle te sélectionnes la première ligne de la colonne indiqué (en l'occurence A).

Par contre, je peux (peut etre) éclairer ta lanterne (que dis-je une lanterne!!!!! c'est d'un phare que tu illumines en formule ce forum) concernant cette synthaxe :

.Range('a65536').End(xlUp).Row n'est que la perversion de : Range('A1').End(xlDown).row, synthaxe que l'on obtient facilement en utilisant l'enregistreur de macro et en appuyant sur CTRL + FLECHE BAS.

Mais tu sais qu'en informatique on aime pas (voir on exècre) les lignes vides au milieu de nos belles matrices, aussi au lieu de partir du début de la colonne et de chercher la premiere cellule vide qui pourrait n'etre qu'un 'trou' dans la colonne (et ainsi nous plonger dans un abîme de désarroi).

Nous décidâmes de commencer notre chemin de croix (est-ce d'actualité ?) a partir de la fin de la colonne ('a65536'), pour ensuite remonter (end(xlup)) vers la lumière.

Voilà pour la synthaxe utilisée.

Il est à noté qu'il suffit de rajouter un simple S à la fin de row pour ainsi avoir la valeur de la derniere ligne non vide d'une colonne.

J'espère que cette petite explication te ravira, au moins autant que moi lorsque je te lis.

Au plaisir (très sincère) de te croiser à nouveau.

a plus
 

Gérard DEZAMIS

XLDnaute Accro
Mes respects RV
R pour Réverent V pour Vénérable
:whistle:

Tes propos christiques empreints d'une grande bonté me sont d'un grand réconfort dans, ce que tu as su deviner être, mon chemin de croix : le VBA !
Heureusement qu'il y a des fidèles qui comme toi s'évertuent à retirer les épines, des bergers qui regroupent les moutons égarés dans le dédale VBAteux.
ça chapelle des chpécialistes !

@+ Au prochain croisement

GD
 

plumpony531

XLDnaute Nouveau
Bonjour a tous

Pardonnez mon imiscion tardive a ce fil mais je rencontre un serieux pb dans la manipulation de colonnes.

Soit un colonne 1 avec des valeurs
Soit une colonne 2 avec des valeurs mais dans un autre feuille.(c'est une feuille temporaire)

Comment puis je faire pour comparer ces deux colonnes en partant des principes suivants

- Les valeurs de la colonne 2 ne sont pas forcement identiques a cells de la colonnes 1.

- et donc leurs ordres d'apparition n'a donc pas d'importance


A la fin de mon traitement la colonne 1 devrait se voire rajouter certaines valeurs de la colonne 2 et les valeurs de la colonnes 1 n'ayant pas eu leur équivalent dans la colonnes 2 se verraient attribuer dans la colonne 1+1 la valeurs 0



Jusqu'a présent j'arrive bien a comparer ces 2 colonnes mais je bute serieusement lorsqu'une valeurs de la colonne 2 n'est pa présente dans la col1. Cela decale tout et les traitement statistique que j'essais de faire sont foutus.

Voici un extrait de mon code

Code:
If flag = 2 Then
 Dim val1 As Range
 Dim val2 As Range
 Dim i As Integer
 For i = 2 To Range('A1').End(xlDown).Row
  Set val1 = Sheets('GGM').Range('a' & i)
  Set val2 = Sheets('TEMP').Range('a' & i)
   If val2 = val1 Then
   Feuil1.Cells(x, y).Value = Feuil2.Cells(xtemp, ytemp + 1)
   Feuil1.Cells(1, y).Value = MonthName(Month(Now), True)
   'Feuil1.Cells(1, y).Font.Size = 11
   'Feuil1.Cells(1, y).Font.Bold = True
   Feuil1.Cells(x, y + 1).Value = (Feuil2.Cells(xtemp, ytemp + 1).Value - Feuil1.Cells(x, y - 3).Value)
   Feuil1.Cells(1, y + 1).Value = 'Delta Previous Month'
   'Feuil1.Cells(1, y + 1).Font.Size = 11
   'Feuil1.Cells(1, y + 1).Font.Bold = True
   Feuil1.Cells(x, y + 2).Value = (Feuil1.Cells(x, y + 1).Value + Feuil1.Cells(x, y - 1).Value)
   Feuil1.Cells(1, y + 2).Value = 'cumulated delta'
   'Feuil1.Cells(1, y + 2).Font.Size = 11
   'Feuil1.Cells(1, y + 2).Font.Bold = True
  Else
  End If



@+ et GD MERCI PLUM'
 

Discussions similaires

Réponses
8
Affichages
431
Réponses
22
Affichages
875

Statistiques des forums

Discussions
312 505
Messages
2 089 066
Membres
104 015
dernier inscrit
kkgk