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 :

Changer la valeur d'un doublon par une autre valeur existante


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Changer la valeur d'un doublon par une autre valeur existante
    Bonjour, j'ai mis en exécution ce code pour chercher les doublons et ouvrir ensuite un MsgBox au cas ou la condition est vraie.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    On Error Resume Next
     
    Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
     
    If Application.Subtotal(103, Columns(2)) <> Application.CountA(Columns(2)) Then
        MsgBox "bla bla bla"
    End If
     
    End Sub


    J'aimerais en ajouter un code pour changer la valeur de la cellule qui contient le doublon par une autre valeur d'une autre cellule dans la même feuille.

    Par exemple : le doublon se trouve dans la cellule B17 et j'aimerais changer sa valeur par celle de la cellule A1

  2. #2
    Responsable
    Office & Excel

    Salut.

    Ton problème n'est pas suffisamment détaillé et le code donné ne l'illustre pas.

    Si tu supprimes les doublons par filtre avancé (en 365, il y a une solution plus simple à mettre en place avec RemoveDuplicates...), tu n'as forcément plus de doublons à l'arrivée, et il devient donc délicat d'identifier les doublons que tu viens de supprimer... CQFD!

    De plus, UN exemple n'est bien entendu pas suffisant pour déduire une règle de gestion. Pourquoi B17, pourquoi A1? Quelle sera la paire de cellules à utiliser pour B18? etc...


    Une explication détaillée avec, soyons fous!, une copie d'écran expliquant ta situation actuelle et le résultat escompté sera probablement plus fructueuse.

    Au passage, les filtres avancés, ça a vraiment vieilli et les versions actuelles d'Excel offrent des solutions moins lourdes.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    Vous avez apprécié la réponse? =>
    ---------------

  3. #3
    Futur Membre du Club
    Bonjour Mr Pierre Fauconnier et merci pour votre attention à mon problème.

    Je me rends compte que je me suis mal exprimé, vu que mon niveau en VBA est nul, j'essaye de faire de mon mieux pour présenter mon problème.

    Le code suivant (trouvé sur internet) qui fonctionne parfaitement pour moi me permet de vérifier si une référence est en double dans la colonne (B) de ma feuille excel et me renvoie un MsgBox quand il existe un doublon comme décrit ci-dessous:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    On Error Resume Next
     
    Range("B3:B" & Range("B" & Rows.Count).End(xlUp).Row).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
     
    If Application.Subtotal(103, Columns(2)) <> Application.CountA(Columns(2)) Then
        MsgBox "bla bla bla"
    End If
     
    End Sub


    Ce que je veux faire est d'attacher un nouveau code à celui-ci qui change automatiquement la dernière valeur trouvée en double dans la Colonne (B) par une valeur qui se trouve en permanence dans la cellule A1 (Peut importe la cellule qui contient la valeur en double dans la colonne (B) doit se changer par la valeur de la cellule A1)

    Pour info: la cellule A1 contient le dernière référence utilisée et j'utilise un code pour l'incrémenter à chaque fois un doublon a été détecté, donc copier coller sa valeur à la place du doublon détecté.

    d'abord j'espère que mon problème est détaillé suffisamment pour se faire comprendre, et si se trouve un code plus léger et efficace pour appliquer la détection d'un doublon et changement automatique de sa valeur par celle de la cellule A1 je serai ouvert à toute suggestion.

  4. #4
    Expert éminent
    Bonjour,

    VBA inutile dans ce cas.

    Sur la base d'un tableau structuré de cette forme, débutant en A1.



    Tu peux considérer une colonne supplémentaire, ici MATOS2
    avec pour formule

    =SI((EQUIV([@MATOS];[MATOS];0)<>LIGNE()-1);G$1;[@MATOS])
    La cellule G1, ici, retourne la valeur fixe "TOTO" (pour toi A1).

    Cette façon de procéder te fera sauvegarder ta base de départ, sur laquelle tu pourras toujours rebondir dans la suite de ton projet.

    Ici, la notion de tableau structuré prend toute son importance.
    En effet, la plage de recherche évoluera automatiquement en fonction des nouveaux enregistrements à venir.
    Et la fonction s'incrémentera d'elle même.
    Plus trivialement: NamesAdd = OUT, End(xlUp) = OUT

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


###raw>template_hook.ano_emploi###