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 :

Recherche d'égalités dans 2 colonnes différentes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juin 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 25
    Par défaut Recherche d'égalités dans 2 colonnes différentes
    Bonjour,

    J'ai dans une même feuille 2 colonne, dans lesquelles j'ai des noms de personnes. Certains noms sont dans les deux colonnes, mais d'autres que dans une seule.
    Je voudrais pouvoir afficher dans une troisième colonne tous les noms des personnes qui ne se trouvent que dans l'une des deux colonnes mentionnées précédemment.
    J'ai essayé différentes boucles (Do while, If, For...), le programme n'affiche jamais ce que je veux.

    Comment faire?

    Merci

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A la main, ça ne serait pas très compliqué à faire.

    En supposant que tes colonnes sont A et B et que tes données vont de la ligne 1 à la ligne 100.

    Tu mets en C1 la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI($B$1:$B$100;$A1)=0;$A1;"")
    En D1 tu mets la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(NB.SI($A$1:$A$100;$B1)=0;$B1;"")
    Tu copies C1: D1 dans C1: D100.

    Tu sélectionnes C1: D100 > Ctrl+C > Icone Coller > Coller Valeur.

    Ensuite, tu copies la colonne D à la fin de la colonne C et tu fais dessus un tri pour éliminer les cellules vides.

    C'est plus long à décrire qu'à faire.

    Si tu veux le faire en VBA, il y a plusieurs méthodes possible.
    Perso, celle que j'appliquerai, c'est de commencer à copier les deux colonnes A et B en C et D.
    Ensuite, je lancerai une boucle For to en commençant par la fin (Step -1).
    Pour chaque cellule de la colonne C, tu lances une recherche de sa valeur sur la colonne B avec un Find. Si le Find ne renvoie pas Nothing, tu supprimes la cellule avec un Delete(xlShiftUp).
    Tu fais la même chose avec sa voisine en colonne D et un Find sur A.

    Après la boucle, tu déplaces le contenu de D à la fin de C avec un Cut et un Copy.

  3. #3
    Membre averti
    Homme Profil pro
    Apprenti ingénieur
    Inscrit en
    Juin 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Apprenti ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2016
    Messages : 25
    Par défaut
    Bonjour Mehnir,

    Merci, j'avais pas du tout pensé à la fonction "find"!! Je vais essayer avec ça.
    La solution en entrant directement la formule dans la cellule ne me parait pas judicieuse dans mon cas d'application, puisque mes listes de noms sont variables... Du coup ça ferait bizarre non? Et puis une mauvaise manip et on perd tout. Mais je vais essayer les deux quand même.

    Je reviens vers vous demain avec une conclusion ou une autre demande

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir,
    pour mon plaisir, mon entrainement et donner un peu d'aide
    j'ai fais un petit code (à adapter), les pointages Classeur.feuille ne sont pas fait => à faire
    noms en colonne A et B - résultat en colonne D
    je suis parti du principe que l'on ne voulait pas de doublons dans les noms
    Utilisation de variable tableau + collection

    PS : Merci aux cadors de montrer une autre possibilité à des fins d'amélioration
    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
    Sub test2()
    Dim VA, V, DL1&, DL2&, DL&, Noms As New Collection
     
    Application.ScreenUpdating = False
        DL1 = Range("A" & Rows.Count).End(xlUp).Row
        DL2 = Range("B" & Rows.Count).End(xlUp).Row
        DL = DL1 + DL2
     
        VA = Application.Transpose(Range("A1").CurrentRegion.Columns(1))
        ReDim Preserve VA(1 To DL)
     
        For x& = 1 To DL2
            VA(DL1 + x) = Range("B" & x).Value
        Next
     
        i& = 1
        On Error Resume Next
        For Each V In VA
            Noms.Add VA(i), CStr(VA(i))
            If Err.Number <> 0 Then
                Err.Clear
            End If
            i = i + 1
        Next
        For i = 1 To Noms.Count
        Range("D" & i) = Noms.Item(i)
        Next
        On Error GoTo 0
    Application.ScreenUpdating = True    
        Set Noms = Nothing
     
    End Sub
    Tiens tiens VA, V me dit qq ch, petit à qui sait
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par RyuAutodidacte Voir le message
    montrer une autre possibilité à des fins d'amélioration
    Tiens tiens VA, V me dit qq ch, petit à qui sait
    En utilisant le B-A-BA d'Excel, une formule de calculs (comme justement souligné par Menhir),
    source sans titre en colonnes A & B, colonne C vide, résultat en colonne D :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Demo1()
             Const F = "TRANSPOSE(IF(#1>"""",IF(COUNTIF(#2,#1)=0,#1)))", J = ""","""
        With Cells(1).CurrentRegion.Columns
            S$ = Join(Filter(Evaluate(Replace$(Replace$(F, "#1", .Item(1).Address), "#2", .Item(2).Address)), False, False), J)
            T$ = Join(Filter(Evaluate(Replace$(Replace$(F, "#1", .Item(2).Address), "#2", .Item(1).Address)), False, False), J)
        End With
            If S > "" Then S = """" & S & """"
            If T > "" Then T = """" & T & """"
            Cells(4).CurrentRegion.Clear
            VA = Evaluate("TRANSPOSE({" & S & IIf(S > "" And T > "", ",", "") & T & "})")
            If Not IsError(VA) Then Cells(4).Resize(UBound(VA)).Value = VA
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Re,
    Merci Marc , n'étant pas habitué à procéder de la sorte, je regarderai de plus près (ça me rappelle un peu le principe avec "Filter" avec "les doublons que je ne pouvais pas tester, d'ailleurs il faut que je le teste celui la)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/08/2007, 06h49
  2. Réponses: 10
    Dernier message: 12/06/2007, 10h32
  3. Réponses: 4
    Dernier message: 27/03/2007, 09h49
  4. recherche de donnée dans 2 colonnes
    Par zeloutre dans le forum Access
    Réponses: 10
    Dernier message: 05/03/2007, 12h08
  5. Réponses: 3
    Dernier message: 06/02/2007, 11h04

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