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 :

Macro de comparaison


Sujet :

Macros et VBA Excel

Vue hybride

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 84
    Par défaut Macro de comparaison
    Bonjour,

    Grace à l'aide de certains membres de forum, j'ai pu réaliser dans un de mes classeur une macro me permettant de comparer les informations contenues dans plusieurs feuilles du classeur.

    Voici la description de ma macro :

    J'ai un classeur Excel comportant trois feuilles :
    "Liste" ;
    "Inscrits" ;
    "Resultats".

    Chaque feuille se compose de la même manière : plusieurs colonnes (Nom, Prénom, n°, Adresse, code postal, ville, …) chaque ligne représente une personne différente. Les feuilles : " Liste " comporte 4000 personnes, la feuille "Inscrits" comporte 1000 personnes et la feuille « résultats » ne comporte aucune personne.

    La macro réalise le travail suivant : comparer les enregistrements pressent sur les feuilles " Liste " et "Inscrits" et complétant la feuille "résultat" avec les personnes qui ne sont présents que sur la feuille "Liste" et complète les colonnes de la feuille "résultats" avec les infos correspondant de chaque personne n'existant que dans la feuille "Liste".

    Le résultat ce trouve dans le fichier joint.

    Mes problèmes actuels sont les suivants :

    1. Il semble que ma macro ne fonctionne pas si il y a des lignes « vides » dans le tableau.
    2. Je voudrais que la comparaison ne s'effectue que sur les deux premières colonnes c'est a dire :Nom et Prénom mais que si la personne n'existe que dans la feuille " Liste " l'ensemble de ses informations (Nom, Prénom, n°, Adresse, code postal, ville, …) soit copiées dans la feuille "résultat".


    Quelqu'un aurait il une idée, une remarque, une piste ?

    Svp Merci

    Raphaël
    Fichiers attachés Fichiers attachés

  2. #2
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu!!
    bonjour


    je n'ai pas regarder ton fichier

    mais le principe est simple

    1 determiner le nombre de ligne utilisée dans le "liste"

    2 determiner le nombre de ligne utilisée dans le "inscrit"

    donc pour la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    sub trouve_les_difference()
     'a supposé que les nom soit en colonne "A"
    for i= 1 to sheets("liste").Range("A65536").End(xlUp).Row'boucle de 1 jusqua la derniere ligne utilisée du sheets liste
    for e =  1 to sheets("inscrit").Range("A65536").End(xlUp).Row'boucle de 1 jusqua la derniere ligne utilisée du sheets inscrit
    if sheets("liste").cells(i,1)=sheets("inscrit").cells(e,1) then 
    'si il existerien du tout
    else
    sheets("resultat").cells(sheets("resultat")").Range("A65536").End(xlUp).Row,1=sheets("liste").cells(i,1)
    end if 
    next e
    next i
    end sub
    voila en gros le principe


    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  3. #3
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Ta macro fonctionne si tu ne mets que les colonnes A et B dans les tableaux, pour que la comparaison ne s'effectue que sur les deux premières colonnes.

    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
    col = 2
     
    For Each c In plgA
    'CONCATENER chaque cellule Colonne 1 à 4 de chaqu'une des lignes des tableau A et B
    ' et renseigne les listA et lisB, pour éviter les doublons
        For i = 1 To col
        a = a & "," & Sheets("Liste").Cells(c.Row, i)
        Next
            ReDim Preserve listA(x)
          listA(x) = Right(a, Len(a) - 1)
          a = ""
          x = x + 1
    Next
     
     For Each c In plgB
     For i = 1 To col
      b = b & "," & Sheets("Inscrits").Cells(c.Row, i)
     Next
     ReDim Preserve listB(xb)
          listB(xb) = Right(b, Len(b) - 1)
          b = ""
          xb = xb + 1
    Next

  4. #4
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour Raphael39,

    Voici une variante

    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
    Sub Macro1()
    Dim plgA As Range, plgB As Range, c As Range
    Dim listA(), listB()
    Dim i As Integer, xa As Integer, xb As Integer, col As Integer
     
    Set plgA = Sheets("Liste").Range("A2:A" & Sheets("Liste").Range("A65536").End(xlUp).Row)
    Set plgB = Sheets("Inscrits").Range("A2:A" & Sheets("Inscrits").Range("A65536").End(xlUp).Row)
    col = Sheets("Liste").Range("IV1").End(xlToLeft).Column
     
    For Each c In plgA
    'CONCATENER les Noms et prénoms de la feuille "Liste"
        With Sheets("Liste")
            ReDim Preserve listA(xa)
            listA(xa) = .Cells(c.Row, 1) & .Cells(c.Row, 2)
        End With
        xa = xa + 1
    Next
     
    For Each c In plgB
    'CONCATENER les Noms et prénoms de la feuille "Inscrits"
        With Sheets("Inscrits")
            ReDim Preserve listB(xb)
            listB(xb) = .Cells(c.Row, 1) & .Cells(c.Row, 2)
        End With
        xb = xb + 1
    Next
     
    'vérifier si chaque item de listA est présent dans listB
    'si non présent, copie les données correspondantes de la feuille liste sur la feuille résultat en commencant à la
    'ligne 2
     
    For i = 0 To UBound(listA)
      If IsError(Application.Match(listA(i), listB, 0)) Then
        With Sheets("Liste")
            Set MaPlage = .Range(.Cells(2 + i, 1), .Cells(2 + i, col))
        End With
        MaPlage.Copy Sheets("résultat").Range("A" & 2 + x)
        x = x + 1
      End If
    Next i
     
    Set plgA = Nothing
    Set plgB = Nothing
    Set MaPlage = Nothing
     
    End Sub
    Cordialement.

Discussions similaires

  1. [XL-2003] MACRO de comparaison de valeurs et suppression ligne
    Par Julzz dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/07/2011, 08h53
  2. [XL-2003] Macro de comparaison "en live"
    Par Edaine dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 30/05/2011, 08h41
  3. Macro Excel : Comparaison de 2 feuilles
    Par michaeljeru dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/10/2010, 17h21
  4. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  5. Creer une macro de comparaison ?
    Par gregounnet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/07/2007, 17h42

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