comparer deux colonnes et extraire des valeurs dans une 3ème colonne en VBA

Y compris Power BI, Power Query et toute autre question en lien avec Excel
C
Christophe88
Jeune membre
Jeune membre
Messages : 43
Inscrit le : 17 juillet 2016
Version d'Excel : 2016

Message par Christophe88 » 17 janvier 2018, 21:21

Bonjour,
Je rencontre un problème en VBA.
J'ai un fichier qui comporte trois colonnes.
La colonne A contient les candidats inscrits à un marathon.
La colonne B contient les candidats qui ont franchi la ligne d'arrivée
La colonne C doit contenir le nom des personnes qui ont abandonnées.
En clair la colonne C doit contenir les personnes présentes dans la colonne A mais non présentes dans la colonne B.
J'ai commencé à rédiger un code VBA mais je suis en difficulté et j'aurai besoin d'un coup de main.
L'idée étant de faire un code simple (sans des fonctions VBA de type worksheetfunction).
Trois variables grand maxi.
Si quelqu'un a une idée alors grand merci à lui.
Je vous transmets mon fichier.
Merci d'avance
Abandon.xlsm
(16.76 Kio) Téléchargé 104 fois
t
tithom
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 17 janvier 2018
Version d'Excel : 2016 FR

Message par tithom » 17 janvier 2018, 21:42

Bonsoir,
Un début de piste... A mettre en C2 et à recopier.
=SI(ESTERREUR(RECHERCHEV(A2;B$2:B$31;1;FAUX));A2;"")
Mais ça ne te regroupe pas les abandons sur les 1ères lignes ?! La chose est beaucoup plus complexe.
Avatar du membre
pyro206
Membre habitué
Membre habitué
Messages : 56
Appréciations reçues : 3
Inscrit le : 3 mars 2014
Version d'Excel : 2016fr

Message par pyro206 » 17 janvier 2018, 21:56

bonjour christophe 88

une petite formule excel c simpa aussi ::D ::D ::D ::D
=SI(ESTNA(RECHERCHEV(B2;$A$2:$A$500;1;FAUX));"Abandon";"")
filtrage avec un clic droit
2FEE8B00.xlsm
(19.72 Kio) Téléchargé 123 fois
Modifié en dernier par pyro206 le 17 janvier 2018, 22:08, modifié 1 fois.
:ordi3: :grr: :bof: 8-)
J
Jeb
Jeune membre
Jeune membre
Messages : 21
Inscrit le : 13 décembre 2017
Version d'Excel : 2010 FR

Message par Jeb » 17 janvier 2018, 22:01

Salut
un code pas spécialement compliqué (car pas 100% générique)
Sub abandon2()
    Dim depart, arrivee As Range
    Dim trouve As Boolean
    Set depart = Range("A2:A100")
    Set arrivee = Range("B2:B100")
    i = 0
    
    For Each c In depart
        trouve = False
        'Debug.Assert c.Value <> "DAUMAS"
        For Each d In arrivee
            If c.Value = d.Value Then
                trouve = True
                GoTo suite
            End If
        Next d
        If (Not trouve) Then
            Range("C2:C2").Offset(i, 0).Value = c.Value
            i = i + 1
        End If
suite:
    Next c
End Sub
C
Christophe88
Jeune membre
Jeune membre
Messages : 43
Inscrit le : 17 juillet 2016
Version d'Excel : 2016

Message par Christophe88 » 18 janvier 2018, 09:01

Merci pour vos réponses très pertinentes.
Le principe étant étant pour moi d'utiliser du code VBA, j'exclus donc les formules Excel.
Concernant le code pas tout à fait générique, il fonctionne impeccablement mais à l'inconvénient de faire appel à des fonctions pas toujours très compréhensibles sur le plan algorithmique.
Je pense qu'il y a une réponse avec trois variables et un système de boucle qui permet de renseigner la colonne C (nom des inscrits qui ont abandonné).
J'y travaille de mon côté mais si quelqu'un à une proposition alors grand merci :wink:
Merci d'avance
Avatar du membre
Klin89
Membre dévoué
Membre dévoué
Messages : 595
Appréciations reçues : 21
Inscrit le : 28 mai 2011
Version d'Excel : 2003 FR

Message par Klin89 » 18 janvier 2018, 22:04

Bonsoir Christophe88, le forum :)

Avec la méthode Remove de Dictionary
Option Explicit
Sub test()
Dim a, e, dico As Object
    Set dico = CreateObject("Scripting.Dictionary")
    dico.CompareMode = 1
    With Sheets("Feuil1")
        a = .Range("a2", .Range("a" & .Rows.Count).End(xlUp)).Value
        For Each e In a
            If Not dico.exists(e) Then dico(e) = Empty
        Next
        a = .Range("b2", .Range("b" & .Rows.Count).End(xlUp)).Value
        For Each e In a
            If dico.exists(e) Then dico.Remove e
        Next
        .Range("c2").Resize(dico.Count).Value = Application.Transpose(dico.keys)
    End With
End Sub
J'ai bien répondu au cahier des charges :ouii:

klin89 :MO
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'357
Appréciations reçues : 665
Inscrit le : 27 août 2012
Version d'Excel : 365 Personnel

Message par Jean-Eric » 19 janvier 2018, 07:24

Bonjour,
Une proposition Excel 2016 avec Récupérer et transformer (Power Query).
Cdlt.
Abandon.xlsm
(130.21 Kio) Téléchargé 122 fois
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
C
Christophe88
Jeune membre
Jeune membre
Messages : 43
Inscrit le : 17 juillet 2016
Version d'Excel : 2016

Message par Christophe88 » 19 janvier 2018, 17:14

Merci pour vos réponses et vos propositions.
Cela reste toute même des options qui me semblent trop complexes.
Je regarde de mon côté et vous tiens au courant mais n'hésitez pas à me proposer quelque chose si vous trouvez.
Merci d'avance.
A+
t
tithom
Nouveau venu
Nouveau venu
Messages : 5
Inscrit le : 17 janvier 2018
Version d'Excel : 2016 FR

Message par tithom » 19 janvier 2018, 20:27

De rien.
Ce qui rend la chose complexe, c'est la structure que tu veux donner à ton tableau. Tester des valeurs pour les regrouper n'est pas chose facile. Il est toujours plus simple de travailler en ligne et utiliser les tableaux structurés pour faire des tris ou filtres.
Peut être peux tu revoir la structure de ton tableau ?!
- Colonne A les participants
- Colonne B ordre d'arrivée ou temps
- Colonne C un test simple avec SI pour indiqué arrivé ou abandon soit
SI(ESTVIDE(B2);"abandon";"arrivé")
Ensuite dans l'onglet "accueil" tu cliques sur "mettre sous forme de tableau" pour trier et filtrer simplement.
Abandon v2.xlsm
(17.27 Kio) Téléchargé 82 fois
C
Christophe88
Jeune membre
Jeune membre
Messages : 43
Inscrit le : 17 juillet 2016
Version d'Excel : 2016

Message par Christophe88 » 19 janvier 2018, 23:29

Ok,
J'ai trouvé la solution.
Merci pour vos réponses.
Je vous transmets en pièce jointe mon résultat.
Abandon.xlsm
(20.24 Kio) Téléchargé 179 fois
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message