IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Comparer 2 feuilles Excel et afiicher dans des feuilles résultats


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut Comparer 2 feuilles Excel et afiicher dans des feuilles résultats
    Bonjour le forum ,

    J'ai un problème en VBA Excel (evidemment je débute) et je fais donc appel a vous!!

    Je possède 2 feuilles que je dois comparer: une feuille de référence, et une nouvelle feuille. Ceci dans le but de voir les écarts entre les deux feuilles, une sorte de mise a jour! Et les résultats s'affichent dans les feuilles correspondantes.
    C'est en fait un inventaire de postes. Et je cherche a savoir quels sont les postes créés, les postes existant mais dont les informations ont changé (changement de propriétaire par exemple), et les postes détruits.
    J'ai donc 5 feuilles: Nouveau, Ancien, Crees, Modifies, Supprimes.
    Je précise que toutes ces feuilles sont dans le même classeur!

    Maintenant je vais tenter de vous expliquer le principe de mon code et ce que je voudrais!
    Pour comparer, le programme se base sur un critère de référence commun aux 2 feuilles et unique (aucun doublon possible dans la même colonne). Ce critère commence en A8, et nommé PI! Avec la methode FIND, je cherche les PI de la nouvelle feuille(Nouveau) dans la feuille de référence(Ancien).
    Si le PI est inexistant, il est considéré comme postes créés et s'affichera dans la feuille correspondante, a savoir "Crees". Si le PI est commun aux 2 feuilles, il doit comparer la ligne entière, pour voir si les informations sont les mêmes ou pas! Et c'est ici que se trouve mon problème. Vu que les PI ne sont pas forcement a la même position dans les 2 feuilles, je ne peux pas me permettre de faire une comparaison ligne/ligne. Donc je fais une comparaison colonne/colonne dans une ligne dans chacune des feuilles. Mais avec FIND il y a quelque chose qui ne va pas! Si j'ai un doublon dans l'une des colonnes d'informations, il considère que la recherche est positive, et donc arrete la recherche!

    Donc c'est ici que vous entrez en jeu .
    Dans le cas ou les PI sont identiques dans les 2 feuilles, je voudrais comparer les informations des 2 PI, se trouvant sur une même ligne et afficher la ligne entière s'il y a des différences. Tout ca dans la feuilles "Modifies"

    J'espere que j'ai pas trop bafouillé

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    Option Explicit
    Sub Created_Modified()
     
    'Prog: Regarde les nouveaux par rapport a l'ancien.
     
    Dim x, y, z As Variant
    Dim i, j, k, l, m, n, q As Long
    Dim O, P As Range
    Dim address1, address2, address3, address4 As String
    Dim WsA, WsN, WsC, WsM As Worksheet
    Set WsN = Worksheets("Nouveau")
    Set WsA = Worksheets("Ancien")
    Set WsC = Worksheets("Crees")
    Set WsM = Worksheets("Modifies")
     
    'Parcours du fichier comparant (nouveau)
    'Nombre de lignes limité a 5000
    For i = 8 To 15 '2000
        x = WsN.Cells(i, 1)
       ' k = 1
       ' l = -1
       q = 1
       n = 0
        address1 = "Feuil1!" + Cells(i, 1).Address
        'Recherche dans le fichier comparé (ancien)
        With WsA.Cells
            Set O = .Find(x, lookat:=xlWhole)
            If Not O Is Nothing Then
            ' Si EGALE -> compare la ligne entiere pour trouver des differences
                address2 = "Feuil2!" + O.Address
                For j = 2 To 44 'Nombre de colonnes limité a 20
                    y = WsN.Cells(i, j).Value
                    address3 = "Feuil1!" + Cells(i, j).Address
                    ' Recherche des postes modifiés
                    With WsA.Cells
                        Set P = .Find(y, lookat:=xlWhole)
                        If Not P Is Nothing Then
                            address4 = "Feuil2!" + P.Address
                        Else
                        ' Copie dans la feuille "Modifies"
                            ' Affichage des postes modifiés
                            WsM.Range("A65536").End(xlUp)(2) = x
                            WsM.Range("A65536").End(xlUp)(2) = y
                            'WsM.Range("A65536").End(xlUp)(2).Offset(l, k) = y
                            'k = k + 1
                            'l = l - 1
                        End If
                    End With
                Next j
            Else
            ' Si DIFFERENT -> copie dans la feuille "Crees"
                ' Affichage des nouveaux postes
                For m = 2 To 44
                    z = WsN.Cells(i, m).Value
                    WsC.Range("A65536").End(xlUp)(2) = x
                    WsC.Range("A65536").End(xlUp).Offset(n, q) = z
                    q = q + 1
                    n = n - 1
                Next m
            End If
        End With
    Next i
    WsC.Activate
    sup_doublons
    WsM.Activate
    sup_doublons
    End Sub
     
    Sub sup_doublons()
    Dim i As Long
       Application.ScreenUpdating = False
       Application.Calculation = xlCalculationManual
       ActiveSheet.UsedRange.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo
       For i = [A65000].End(xlUp).Row To 2 Step -1
         If Cells(i, 1) = Cells(i - 1, 1) Then Rows(i).Delete
       Next i
       Application.Calculation = xlCalculationAutomatic
    End Sub

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Bonjour,
    Je ne suis pas sur d'avoir compris le problème. Tes doublons sont dans ancien ou nouveau
    Et je ne comprend pas du tout ce que tu veux faire avec tes variables adresse.


    Tu effectue les recherches dans toutes les cellule tu ne voudrais pas te limiter au bonne ligne colonne.

    Si la ligne j de ancien corespond a la ligne i de nouveau
    Pour chaque élément de la ligne j tu compares ceux de la ligne j jespère quand même que les colonne sont dans le même ordre ou cela aussi est anarchique?

    cas simple meme colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    j=o.row 'on r
        for k=1 to dernierecolonne 'regarde dans les contribution du forume excel pour trouver dernierecolonne ou garde 44
              if wsa.cells(i,k)<>wsncells(j,k) then
                  msgbox "Il y a une différence"
               end if
    next k
    Dans l'autre cas utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wsa.rows(j).find(......)
    J'espère que ca t'aidera
    J'ai taper le code directement je n'ai pas testé vérifie l'abscen d'erreure de frappe.
    Par contre ce que tu fais une fois que tu as trouvé les différence la cela reste pour moi un mystère

  3. #3
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Bonjour Krovax,

    Merci d'avoir repondu!!

    Comme je m'en doutais, mes explications ne sont pas super claires!
    Je joins le fichier. Cela pourra peut-etre t'éclairer!

    Les colonnes sont dans le même ordre! C'est en fait la même base de fichier. C'est juste les infos qui diffèrent. La feuille de reference a une date antérieur a la nouvelle. En conséquence dans le labs de temps entre les deux, il peut y avoir des differences. Ex: de nouveaux postes, des postes detruits, etc.

    Je vais deja essayer d'implementer ton bout de code

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    En générale je n'ouvre pas trop les fichier joind j'aimerais ne pas avoir a faire exception. On va essayer de sens sortir sans. Je suis très matheux donc pour être claire nomme les chose. Ligne i, colonne X, feuille A,... Après il n'ets pas important de savoir de quoi parle ton fichier, ca peut être des imatriculation de camion des numéro de série d'arme a feu ou les identifiant de colis pour moi c'est pareille c'est une valeur. SI c'est claire dans ta tête c'est claire pour nous.

    exemple
    D'après ce que j'ai compris tu as deux classeur A et B
    Dans la colonne 1 de chaque classeur tu as une liste de numéro
    Tu parcour la liste dans le calsseur A et regarde grace a une recherche dans le classeur B si le numéro existe.
    etc....

    Moi je trouve cela très claire

  5. #5
    Futur Membre du Club
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut
    Ok ok!
    Je n'ai pas pas l'habitude de poster mais simplement de regarder et m'inspirer! Mais maintenant je ferais ca

    Oui c'est cela a la différence que ce ne sont pas des classeurs mais des feuilles dans un meme classeur .
    Bref je viens de tester ton bout de code. Et effectivement il fait bien ce que je veux, niveau comparaison! (euh il faudrait que je le test sur le fichier entier car je ne l'ai fait que sur une petite partie).
    Maintenant il me reste l'affichage des résultats, qui buggait avec FIND!
    De cette facon:

    A B C
    1 PI1 info1 info2 etc
    2 PI2 info1 info2 etc
    3 PIn info1 info2 etc

    Que la ligne entière s'affiche, pas seulement les différences trouvées
    J'avais essayer avec les offset. Mais ca n'a pas totalement marcher comme je le pensais

  6. #6
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    ton problème va être plus complexe car si tu avais 5 infos donc 5 colonne tu va en avoir 10 et ton fichier va être destructuré. il va te faloir inserer des cellule ou alors copier dans un nouvel endroi.
    Perso je rajouterais les ancienne info en commentaire dans la même cellule mais je ne sais aps si cela sera adapté a ton problème

Discussions similaires

  1. Réponses: 19
    Dernier message: 13/04/2012, 08h30
  2. consolidation de cellules des feuilles d'un classeur dans la feuille 1
    Par djoenis dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2011, 16h34
  3. Réponses: 3
    Dernier message: 01/09/2009, 23h48
  4. Réponses: 9
    Dernier message: 19/02/2007, 20h33
  5. Problème de lecture des cellules dans une feuille Excel
    Par wangjun dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/10/2006, 09h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo