Comparaison VBA

Résolu
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007
- 5 avril 2007 à 12:56
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007
- 6 avril 2007 à 14:21
Bonjour,

J'ai une petite question...

Voila je dois comparaison deux colonnes de deux fichiers excel ( jusque là rien d'extraordinaire) toutefois je dois les comparer selon deux criteres

Je m'explique
pour faire simple

Dans les deux fichiers j'ai 3 colonnes
fichiers 1: Colonnes A B et C
fichiers 2: colonnes D E et F

j'aimerais que pour:
A=D et B=E on compare C à F c'est à dire qu'on grise mette en gras.... chaque cellule F differente de C

Mon probleme c'est au niveau des égalités....
Quelqu'un aurait il une idée ?
Merci!

16 réponses

TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

6 avril 2007 à 14:21
Ayé! trouvé!
En faite je vais concatter les colones et faire la verif sur une seule colonne

Merci à toi!
3
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

5 avril 2007 à 14:59
Salut,
le nombre de lignes dans chacune de tes colonnes est connu à l'avance ou peut être n'importe quoi?
Fred.
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

5 avril 2007 à 15:01
Non inconnu... Il varie en fonction de l'exctraction que j'ai ...
Merci pour ton aide.
Sarah.
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

5 avril 2007 à 15:06
Tes 2 fichiers ont combien de pages? Le contrôle se fait sur la même page?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

5 avril 2007 à 15:11
Je travaille sur une feuille pour chacun des 2 fichiers
Je souhaite contrôler une colonne ( controle par ligne) d'une feuille d'un fichier.... par rapport à une autre colonne d'une feuille d'un autre fichier
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

5 avril 2007 à 15:18
J'ai bien compris ce que tu veux faire mais comment on sait quelle page de chaque fichier comparer?

Si tu as le premier fichier avec 3 pages et le second avec 2.
Comment savoir si tu veux comparer la première page du premier fichier avec la seconde page du premier fichier ou la dernière page du premier fichier avec la première du second?
Ou alors est-ce-que tes 2 fichiers ont une seule page qui porte le meme nom?
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

5 avril 2007 à 15:26
Ce sont toujours les même pages
les 1ere de chaque fichiers Mes fichiers ont toujours 3 pages ( par défaut ) mais j'utilise simplement les 1ere ( les autres sont toujouts vide d'ailleurs)
Elles n'ont pas de nom spécifique
worsksheet(1) simplement
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

5 avril 2007 à 16:24
Je ne sais pas si c'est trés clair.
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

5 avril 2007 à 17:16
Rajoute ça dans un module et lance la macro:


Option Explicit


Public Sub Comparaison_Colonnes()


' Le contrôle s'effectue en 3 parties:
'    ¤ Contrôle sur l'égalité du nb de lignes entre les colonnes A-D et B-E
'    ¤ Si elles ont le même nb de lignes, on vérifie l'égalité des valeurs
'    ¤ si les 2 conditions antérieures sont validées, on compare les valeurs des colonnes C-F
'    et on met les cellules dans la colonne F en gras.


'    Tableau du premier fichier
    Dim iNbLigneWorkBook1(1 To 3) As Integer
'    Tableau du second fichier
    Dim iNbLigneWorkBook2(1 To 3) As Integer
'    Nb Colonne du premier fichier
    Dim iNbColonne1 As Integer
'    Nb Colonne du second fichier
    Dim iNbColonne2 As Integer
'    Indice de boucle
    Dim i As Integer
'    Flag pour les colonnes identiques
    Dim bColonneIdentique As Boolean
       
    iNbColonne1 = 1
    iNbColonne2 = 4
    bColonneIdentique = True
   
    Do
'        Récupération du nb de lignes des 3 premières colonnes du premier fichier...
        iNbLigneWorkBook1(iNbColonne1) = 0
       
        Application.Workbooks(1).Worksheets(1).Activate
       
        While Cells(iNbLigneWorkBook1(iNbColonne1) + 1, iNbColonne1).Value <> ""
            iNbLigneWorkBook1(iNbColonne1) = iNbLigneWorkBook1(iNbColonne1) + 1
        Wend
       
'        Récupération du nb de lignes des 3 colonnes du second fichier...
        iNbLigneWorkBook2(iNbColonne1) = 0
       
        Application.Workbooks(2).Worksheets(1).Activate
       
        While Cells(iNbLigneWorkBook2(iNbColonne1) + 1, iNbColonne2).Value <> ""
            iNbLigneWorkBook2(iNbColonne1) = iNbLigneWorkBook2(iNbColonne1) + 1
        Wend
       
'        Si elles sont identiques et qu'on est pas sur la troisième colonne, on sort...
        If iNbLigneWorkBook1(iNbColonne1) <> iNbLigneWorkBook2(iNbColonne1) And iNbColonne1 <> 3 Then
            bColonneIdentique = False
        End If
       
        iNbColonne1 = iNbColonne1 + 1
        iNbColonne2 = iNbColonne2 + 1


    Loop Until iNbColonne1 > 3
   
'    Si les colonnes A-D et B-E ont le même nb de lignes, on teste les valeurs
    If bColonneIdentique Then
        For iNbColonne1 = 1 To 2
            iNbColonne2 = iNbColonne1 + 3
            For i = 1 To iNbLigneWorkBook1(iNbColonne1)
                If Application.Workbooks(1).Worksheets(1).Cells(i, iNbColonne1).Value <> Application.Workbooks(2).Worksheets(1).Cells(i, iNbColonne2).Value Then
                    bColonneIdentique = False
                    Exit For
                End If
            Next
        Next
    End If
   
    iNbColonne1 = 3
    iNbColonne2 = 6
   
'    Si les colonnes A-D et B-E ont le même nb de lignes et les mêmes valeurs, on teste les colonnes C et F


    If bColonneIdentique Then
   
'       On supprime le gras dans la colonne...
        Application.Workbooks(2).Worksheets(1).Columns(iNbColonne2).Select
        Selection.Font.Bold = False
   
'       Si les valeurs dans C et F sont différentes, on met la cellule dans F en gras...
'        On compare les 2 feuilles et on prend le plus petit nb de lignes
       
        If iNbLigneWorkBook1(iNbColonne1) >= iNbLigneWorkBook2(iNbColonne1) Then
            For i = 1 To iNbLigneWorkBook2(iNbColonne1)
                If Application.Workbooks(1).Worksheets(1).Cells(i, iNbColonne1).Value <> Application.Workbooks(2).Worksheets(1).Cells(i, iNbColonne2).Value Then
                    Application.Workbooks(2).Worksheets(1).Cells(i, iNbColonne2).Select
                    Selection.Font.Bold = True
                End If
            Next
        Else
            For i = 1 To iNbLigneWorkBook1(iNbColonne1)
                If Application.Workbooks(1).Worksheets(1).Cells(i, iNbColonne1).Value <> Application.Workbooks(2).Worksheets(1).Cells(i, iNbColonne2).Value Then
                    Application.Workbooks(2).Worksheets(1).Cells(i, iNbColonne2).Select
                    Selection.Font.Bold = True
                End If
            Next
        End If
       
    End If


End Sub
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

5 avril 2007 à 17:17
P.S: La macro tient en compte les 2 premiers fichiers ouverts...
0
us_30
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
10
5 avril 2007 à 20:06
Bonjour,

On ne connait pas le but final, et si mettre en gras est important ou pas. Si on suppose que seule la comparaison est nécessaire, pourquoi pas utiliser directement les formules d'Excel avec l'instruction SI... Par exemple en mettant le résultat dans la colonne G.


Cela donnerait dans la colonne G à recopier autant que nécssaire :


SI(ET(A1B1;C1=D1);SI(E1<F1;"E plus petit que F";"E plus grand que F");"A<>B ou C<>D")

Amicalement,
Us.
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

6 avril 2007 à 09:18
Because la comparaison se fait sur 2 fichiers et le nb de lignes est dynamique.
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

6 avril 2007 à 09:43
 D'abord merci Fred pour ce que tu as fait.
En faite je n’ai pas été trés claire
 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

1ere fichier :

Une colonne avec des numero de dossier ; une deuxieme colone avec des codes et une troisiemme avec des taux

Un dossier à plusieurs codes :

Sur mon premier fichier ça me donne :

A         B         C
1          Fa        0.75

1          Ga       0,25

1          Ja         0.21

2          Fa        0.45

2          Ja         0.21

…….etc….

 

2eme fichier

 

A         B         C
1          Fa        0.75

1          Ja         0.21

1          Ga       0,35

2          Ja         0.21

…….etc….

 

Donc l’objectif finale : c’est :

1)      que dans le second fichier on repere en gras ( par exemple) la 2eme ligne parce que la colone C est fausse

2)      Qu’on me reporte dans une seconde feuille les lignes manquantes dans le deuxiemme fichiers ( ici l’avant derniere ligne du fichiers 1 est absente du fichiers 2 )

 

Merci de votre Aide.

 

Sarah.
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

6 avril 2007 à 09:53
pour le 1 quand je dis la 2eme ligne est fausse je veux dire la 2eme ligne du fichiers 1 qui corresponds a la3eme ligne du fichiers 2 et c'est cette 3eme ligne du fichier2 qui devrait se mettre en Gras
0
fred.toto
Messages postés
73
Date d'inscription
mardi 10 avril 2001
Statut
Membre
Dernière intervention
4 mars 2009

6 avril 2007 à 11:18
Plusieurs questions....

1) Quand j'ai :

Fichier 1/Sheet1:
                  A  B                             C                     D   E                            F
<colgroup><col style=\"WIDTH: 60pt\" span=\"3\" width=\"80\" /></colgroup>----
1,    Fa, 0,75, ----
1,    Ga, 0,25, ----
1,    Ja, 0,21, ----
2,    Fa, 0,45, ----
2,    Ja, 0,21

Fichier2/Sheet1:
<colgroup><col style=\"WIDTH: 60pt\" span=\"4\" width=\"80\" /><col style=\"WIDTH: 60pt\" span=\"2\" width=\"80\" /></colgroup>----
, , , 1,    Fa, 0,75, ----
, , , 1,    Ja, 0,21, ----
, , , 1,    Ga, 0,35, ----
, , , 2,    Ja, 0,21
Est-ce-que le traitement est normal?

2) Tu veux que les lignes qui sont dans le premier fichier et pas dans le second soient reportées dans la sheet2 du second fichier?
0
TiteZ
Messages postés
61
Date d'inscription
jeudi 5 avril 2007
Statut
Membre
Dernière intervention
21 août 2007

6 avril 2007 à 11:27
 
La ligne 2 du fichier 2 :
1<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

,    Ja

, 0,21

 

Et la ligne 4 du fichiers 2

 

,  

,  

, 2

,    Ja

, 0,21

 

sont  bonne ! elles correspondent respectivement a la ligne 3 et la ligne 5 du Fichier 1  et celle là ne doivent pas ressortir

Par contre : la ligne 3 du fichier 2 est fausse car la valeur de la colonnes C n’est pas exact 

 

Pour le 2 c’est exactement ça je veux que les lignes qu’on a mise en gras ( dc les lignes fausse : puisqu’elle n’existe pas dans le premier fichiers soit transferer ailleurs.)

 

Merci pour ton aide.

Sarah.
0