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 valeurs non présentes entre deux colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Points : 152
    Points
    152
    Par défaut Comparer valeurs non présentes entre deux colonnes
    Bonjour à tous !

    J’ai besoin d’effectuer une comparaison entre deux colonnes sur Excel, mais comme c’est assez complexe, je n’arrive pas à grand-chose niveau réalisation de macro

    Je m’explique : j’ai des suites de données dans mes colonnes B et D. Je souhaiterais pouvoir lister dans une troisième colonne toutes les données de B qui ne sont pas présentes dans la colonne D. Puis, dans une quatrième colonne, pouvoir lister toutes les données de D qui ne sont pas présentes en B. Il ne s’agit pas de comparer les cellules face à face, mais bien lors du passage sur chaque cellule de parcourir toute l’autre colonne pour voir si la donnée contenue dans la cellule se trouve ou non dans l’autre colonne.

    J’espère que j’ai expliqué clairement, n’hésitez pas à me dire si ce n’est pas le cas.

    J’ai essayé de bidouiller et farfouiller sur Internet, mais pour l’instant, tout ce que j’ai c’est une macro qui compare les colonnes une seule fois, et qui me fait planter mon Excel. Je vous déconseille donc de l’essayer, mais si quelqu’un pouvait me dire ce qui ne va pas, et ce qui manque pour atteindre mon but, ça serait cool

    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
    Sub Comparaison_Deux_Colonnes()
     
    Dim Dl As Long, x As Long, y As Long
    Dim tbB(), tbD()
     
    With Sheets("Sheet1")
      Dl = .Range("B" & .Rows.Count).End(xlUp).Row 'Première colonne à comparer
      ReDim tbB(1 To Dl)
      For x = 1 To Dl
        tbB(x) = .Range("B" & x)
      Next x
    End With
     
    With Sheets("Sheet1")
      Dl = .Range("D" & .Rows.Count).End(xlUp).Row 'Deuxième colonne
      For y = 1 To UBound(tbB)
        For x = Dl To 1 Step -1
          If .Range("D" & x) = tbB(y) Then
            .Range("D" & x).Copy Destination:=Columns("F:F")
          End If
        Next x
      Next y
    End With
     
    End Sub

    Merci d’avance pour votre aide !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour exporter des données suivant des conditions, la méthode la plus rapide en exécution et à mettre en place est l'utilisation des filtres avancés d'excel soit en VBA la méthode AdvancedFilter de l'objet Range
    Voir un exemple dans cette discussion
    Le critère à mettre en place pour toi se trouve dans les deux lignes de codes ci-dessous
    Exemple de vérification si ce qui se trouve en colonne B est également présent en colonne D (ici plage $D$2:$D$13)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ESTNA(EQUIV(B2;$D$2:$D$13;0)))
    Ensuite pour comparer l'inverse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ESTNA(EQUIV(D2;$B$2:$B$13;0)))
    Pour en savoir plus sur le filtre avancé d'excel voir le tutoriel Les filtres avancés ou élaborés dans Excel
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre habitué
    Femme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Avril 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Cyberdocumentaliste

    Informations forums :
    Inscription : Avril 2012
    Messages : 113
    Points : 152
    Points
    152
    Par défaut
    Merci ! Ca marche presque parfaitement, le seul problème c'est qu'au lieu de m'indiquer la valeur manquante, la formule m'inscrit "FAUX" dans la colonne

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    As-tu lu le tutoriel dont je t'ai donné le lien ?
    Le filtre élaboré fonctionne avec des critères renvoyant VRAI ou FAUX et cela permet d'exporter ce qui est à VRAI. Sans lire ce tutoriel tu ne peux pas arriver à tes fins.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour

    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
    Sub verif()
    Dim colonne, colonne1
    Dim valeur As Range
    colonne = Range("b1:b" & [b65000].End(xlUp).Row)
     
    'coller en f les valeurs de b non presentes en d
    For i = 1 To UBound(colonne)
    Set valeur = Columns(4).Find(colonne(i, 1), LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=True)
        If valeur Is Nothing Then
        Cells([f65000].End(xlUp).Row + 1, 6) = colonne(i, 1)
        Else
        End If
    Next i
     
    'coller en g les valeurs de d non presentes en b
    colonne = Range("d1:d" & [b65000].End(xlUp).Row)
    For i = 1 To UBound(colonne)
    Set valeur = Columns(2).Find(colonne(i, 1), LookIn:=xlFormulas, LookAt:=xlWhole, MatchCase:=True)
        If valeur Is Nothing Then
        Cells([g65000].End(xlUp).Row + 1, 7) = colonne(i, 1)
        Else
        End If
    Next i
    Set colonne = Nothing
    Set valeur = Nothing
    End Sub
    Mieux ou pire, a chacun de voir

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 766
    Points : 28 625
    Points
    28 625
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je m'étais trompé dans la formule que je t'ai donnée. Il faut enlever le NON soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ESTNA(EQUIV($G2;$N$2:$N$13;0))
    Exemple avec une plage dont on vérifie si les cellules contenue dans la 7ème colonne se retrouvent en 14ème colonne. Exportation des valeurs non trouvées .
    Le masque de la formule ainsi que les numéros des colonnes son dans des constantes
    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
    Sub ExportRangeWithCondition()
     ' Déclaration des variables
     Const FormulaMask As String = "=ISNA(MATCH(<Cel>,<Plage>,0))" ' Masque de la formule
     Const ColCel As Integer = 7, ColPlage As Integer = 14 ' N° de colonne de la cellule à comparer avec la plage 
     Dim RngSource As Range, rngTarget As Range, rngCriteria As Range, myFormula As String
     Dim adrCel As String, adrPlage As String
     ' Attribution des références aux objets
     With ThisWorkbook
      Set RngSource = .Worksheets("db2").Range("A1").CurrentRegion
      Set rngTarget = .Worksheets("db2").Range("S1")
     End With
     With RngSource ' Zone des critères
      Set rngCriteria = .Offset(columnoffset:=.Column + .Columns.Count).Resize(2, 1)
     End With
     With RngSource
      rngTarget = .Cells(1, ColCel)
      adrCel = .Cells(2, ColCel).Address(False)
      adrPlage = .Range(.Cells(2, ColPlage), .Cells(.Rows.Count, ColPlage)).Address
     End With
     myFormula = Replace(FormulaMask, "<Cel>", adrCel)
     myFormula = Replace(myFormula, "<Plage>", adrPlage)
     ' Place les critères dans les 2 cellules (2ème colonne à droite de rngSource et sur 2 lignes)
     With rngCriteria: .Cells(1) = "formula": .Cells(2) = myFormula: End With
     ' Exportation
     RngSource.AdvancedFilter Action:=xlFilterCopy, Criteriarange:=rngCriteria, copytorange:=rngTarget
     ' Fin
     rngCriteria.Clear ' Efface les critères
     Set rngCriteria = Nothing: Set RngSource = Nothing: Set rngTarget = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Comparer 2 tableaux et trouver la valeur non présente
    Par bentor22 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 11/03/2013, 17h37
  2. [XL-2003] Compter le nombre de sous-lignes non vides entre deux colonnes
    Par Augustine1 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2012, 14h40
  3. [VB.NET] Passer une valeur de control entre deux form
    Par TheMacleod dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/12/2005, 11h07
  4. Correspondance entre deux colonnes
    Par AlfiQue dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 09/12/2005, 14h03
  5. Minimum entre deux colonnes
    Par keikun dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/08/2005, 13h20

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