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 :

Comparaison de 2 colonnes de 2 classeurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut Comparaison de 2 colonnes de 2 classeurs
    Salut à tous!

  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
    j'ai pas exactement compris ce que tu veux faire en cas de différence?
    ton code copie toujpours la même zone de Nouveau pour le mettre toujours au même endroit dans ancien (et encore je ne suis pas sur que cela puisse marcher "L1:L" il te manque une info "L1:L5" ou "L1:L" & i).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then
    Worksheets("NOUVEAU" ).Range("L1:L" ).Copy _
    Destination:=Worksheets("ANCIEN" ).Range("D1" )
    Si tu veux copier la valeur d'une cellule tu peux simplement utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WsA.cells(i,2)=WsN.cells(5,j)
    dans cette exempl je copie le contenu de la cellule ligne 5 colonne j du classeur nouveau, dans la cellule ligne i colonne 4 du classeur ancien

    SI tu veux copier des ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WsN.rows(i).Copy WsA.rows(j)
    pour les colonne remplace rows par Columns

    Edit : je viens de voir que pendanrt que je rédigeais mon message AlainTech c'est occupé de la mise en page. Merci bien, prochaine fois je ferais une mise a jour au lieu de me fatiguer a lire un code non balisé

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    je viens de te(vous) lire et encore merci!

    Je vais vous expliquer plus simplement et de manière courte.
    Je travaille sur les deux classeurs anciens.xls et nouveau.xls.

    on compare seulement, les codes filiaires des deux classeurs.
    Dans le classeur ancien.xls , le code filiaire se trouve sur la feuille(onglet) "ANCIEN" répéré à la colonne D;

    De la même manière, dans le classeur nouveau.xls, le code filiaire se trouve sur la feuille(onglet) "NOUVEAU" répérer à la colonne L.

    La recopie de se fait de à partir de la colonne L de nouveau.xls sur la colonne D de ancien.xls, j'espère que je me suis fais comprendre krovax hein?
    Il suffit de recopier toutes les de L à D s'il y a différences entre les deux codes filiaires.
    Cet après midi si vous le souhaitez je vous colle les fichiers en pièces jointes pour teste?
    Merci d'avance les gars y compris Krovax,

    BUT

    Comparer chaque code filiaire des deux classeurs(anciens.xls et nouveau.xls),

    A) s'il y a égalité entre les codes filiares de chaque classeur alors la couleur ne change pas(on garde la même couleur du départ).
    Donc dans ancien.xls, le code filiaire reste le même sans changement de couleur car il y a eu égalité!

    B) s'il y a différence entre les codes filiaires dans les deux classeurs alors la différence trouvée dans nouveau.xls se retrouve immédiatement (recopie du contenu de la cellule qui a changé dans l'ancien classeur) dans ancien.xls avec changement de couleur cette fois en ROUGE;

    J'espère que je me suis bien expliqué cette fois - ci Krovax hein?

    Je suis entrain de travailler dessus un peu. Et je tiens compte de votre remarque Krovax, merci pour tout car je viens d'apprendre des choses avec vous!

    A bientôt sur le forum,

    Merci,

    Sozo

  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
    Dans ce cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i = 1 To WsA.Range("D65536").End(xlUp).Row
         For j = 1 To WsN.Range("L65536").End(xlUp).Row
              If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then
                   WsA.Cells(i, 4) = WsN.Cells(j, 12)
                   WsA.Cells(i, 4).Interior.ColorIndex = 3 
               End If 
         Next j
    Next i
    Devrais marcher
    En cas de différence

    rq : Utiliser des tableau pour trouver la fin de la ligne est une idée mais on peut faire plus simple voir ici
    Je l'ai juste mis pour information et par habitude surtout

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 20
    Par défaut
    Re... Krovax,

    je viens te lire ton message, je vais devoir tester le code que tu m'as envoyé!
    je tiens aussi à te remercier pour le temps que tu as conscré à mon problème car avoir des gens passionnés et de coeur comme vous de nos ce n'est pas évident d'en trouver!

    Avant de tester la macro je te colle te mets en pièces jointes les deux classeurs:

    le contenu de la macro est ci-dessus: avec ton code inséreé j'ai testé sans résultat je ne sais pas pourquoi et pourtant ça l'air béton!
    Les deux classeurs se nomment AncienCodF.xls et NouveauCodF.xls
    Pièce jointe 45716

    Pièce jointe 45717

    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
    Sub Compare()
     
    Dim iLRA%, iLRN%, i%, j%
     
    Dim Y As Boolean, Ys As Boolean
    Dim TabloN(), TabloA()
    Dim WbA As Workbook, WbN As Workbook
    Dim WsA As Worksheet, WsN As Worksheet
     
     
    Set WbA = Workbooks("AncienCodF.xls")
    Set WbN = Workbooks("NouveauCodF.xls")
    Set WsA = WbA.Worksheets("ANCIEN")
    Set WsN = WbN.Worksheets("NOUVEAU")
    iLRA = WsA.Cells(65535, 1).End(xlUp).Row
     
    iLRN = WsN.Cells(65535, 1).End(xlUp).Row
    TabloA() = WsA.Range("D1:D" & iLRA)
    TabloN() = WsN.Range("L1:L" & iLRN)
     
    '<-- Première partie : On commence d'abord par parcourir chaque élément
    ' du tableau "NOUVEAU" pour détecter les nouveautés
      For i = 1 To UBound(TabloN)
        'Et on parcourt tout le tableau "ANCIEN"
        For j = 1 To UBound(TabloA)
          ' Si égalité alors on pose un drapeau
          If TabloA(j, 1) = TabloN(i, 1) Then
            Y = True
            'Si l'égalité est stricte on met un flag
            If WsN.Cells(i, 12) = WsA.Cells(j, 4) Then Ys = True
          End If
        Next
     
         ' test de différence de valeur des cellules des feuilles "ANCIEN" et "NOUVEAU"
     
    For i = 1 To WsA.Range("D65536").End(xlUp).Row
         For j = 1 To WsN.Range("L65536").End(xlUp).Row
              If WsA.Cells(i, 4) <> WsN.Cells(j, 12) Then
                   WsA.Cells(i, 4) = WsN.Cells(j, 12)
                   WsA.Cells(i, 4).Interior.ColorIndex = 3
               End If
         Next j
    Next i
     
      Y = False
      Ys = False
      Next
    Set WsA = Nothing
    Set WsN = Nothing
     
    End Sub
    A bientôt sur le forum,

    Merci pour tout encore,

    mbizo

Discussions similaires

  1. [XL-2003] Remplissage d'une colonne d'un classeur après comparaison
    Par olivier777 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/02/2013, 14h53
  2. [XL-2003] Comparaison d'une colonne de deux classeurs
    Par bonanos dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 20/07/2009, 08h33
  3. [VBA-E] Pb Comparaison De Deux Colonnes Avec Fonction If
    Par gromorice dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/03/2007, 05h57
  4. [Oracle 9i] Comparaison de trois colonnes
    Par Requin15 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/06/2006, 18h03

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