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 plages de valeurs et extraires les manquants


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Par défaut comparer 2 plages de valeurs et extraires les manquants
    Bonjour à tous,

    Premier message sur le forum, je suis sans doute passé à coté de la réponse mais je n'ai pas trouvé le moyen de faire cette opération:

    J'ai 2 colonnes de texte que je souhaite comparer :

    AA AA
    BB CC
    CC DD
    DD EE
    EE

    la valeur BB n'est plus présente et je souhaiterai soit la rajouter à la fin de la plage (je l'analyse avec le reste de ma macro) soit récupérer le delta entre la position dans la colonne (2) et le nombre de valeur dans la colonne (ici 5 mais cela peut être variable) pour l'utiliser ensuite dans ma macro, cette version serait ma préférée.

    Merci d'avance pour votre aide
    P.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 241
    Par défaut
    Bonjour,

    Proposition, extrait les valeurs uniques des colonnes A et B et donne les positions respectives.

    Paclxl_comparer 2 plages de valeurs et extraires les manquants.xlsm

    le 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
    Option Explicit
     
    Sub Comparer()
        Dim D1 As Object, D2 As Object
        Dim V1 As Range, V2 As Range
        Dim DerLig_A As Long, DerLig_B As Long
        Application.ScreenUpdating = False
        DerLig_A = Range("A" & Rows.Count).End(xlUp).Row 'nombre de lignes = nombre de valeurs de la colonne A
        DerLig_B = Range("B" & Rows.Count).End(xlUp).Row 'nombre de lignes = nombre de valeurs de la colonne B
     
        Range("C2:I100000").ClearContents
        'recherche des valeurs présentes en colonne A et manquantes en colonne B
        Set D1 = CreateObject("Scripting.Dictionary")
        For Each V1 In Range("B2:B" & DerLig_A)
            If V1.Text <> "" Then D1(V1.Text) = ""
        Next
        Set D2 = CreateObject("Scripting.Dictionary")
        For Each V2 In Range("A2:A" & DerLig_B)
            If V2.Text <> "" Then
                If Not D1.exists(V2.Text) Then D2(V2.Text) = ""
            End If
        Next
        If D2.Count > 0 Then
            Range("C2").Resize(D2.Count, 1) = Application.Transpose(D2.keys)
            Range(Cells(2, "D"), Cells(D2.Count + 1, "D")).FormulaR1C1 = "=MATCH(RC3,C1,0)-1"
            Cells(2, "E").FormulaR1C1 = "=COUNTA(C1)-1"
        End If
        D1.RemoveAll
        D2.RemoveAll
     
        'recherche des valeurs présentes en colonne B et manquantes en colonne A
        Set D1 = CreateObject("Scripting.Dictionary")
        For Each V1 In Range("A2:A" & DerLig_A)
            If V1.Text <> "" Then D1(V1.Text) = ""
        Next
        Set D2 = CreateObject("Scripting.Dictionary")
        For Each V2 In Range("B2:B" & DerLig_B)
            If V2.Text <> "" Then
                If Not D1.exists(V2.Text) Then D2(V2.Text) = ""
            End If
        Next
        If D2.Count > 0 Then
            Range("G2").Resize(D2.Count, 1) = Application.Transpose(D2.keys)
            Range(Cells(2, "H"), Cells(D2.Count + 1, "H")).FormulaR1C1 = "=MATCH(RC7,C2,0)-1"
            Cells(2, "I").FormulaR1C1 = "=COUNTA(C2)-1"
        End If
        Set D1 = Nothing
        Set D2 = Nothing
    End Sub
    Cdlt

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Novembre 2022
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2022
    Messages : 2
    Par défaut
    Merci beaucoup Arturo83, je vais maintenant regarder pour l'intégrer dans ma macro.

    Bonne journée

Discussions similaires

  1. [Débutant] Extraire les valeurs d'une colonne d'un tableau en plage
    Par wholehog2 dans le forum VB.NET
    Réponses: 4
    Dernier message: 08/01/2016, 14h12
  2. [XL-2013] Comparer deux plages de valeurs
    Par function_Help dans le forum Excel
    Réponses: 1
    Dernier message: 24/08/2014, 11h19
  3. [requete] Comparer 2 tables entre elles et extraire les différences
    Par atlantideD dans le forum Requêtes et SQL.
    Réponses: 23
    Dernier message: 22/10/2007, 11h54
  4. Extraire les 20 dernières valeurs uniquement
    Par bob75000 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 19/07/2006, 15h17
  5. Réponses: 7
    Dernier message: 20/02/2006, 17h18

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