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 :

Identifier doublons dans meme colonne et attribuer données autres cellules en fonction


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    VIE Procurement
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : VIE Procurement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut Identifier doublons dans meme colonne et attribuer données autres cellules en fonction
    Bonjour,

    Ce que je souhaire faire est:
    Si deux cellules ont des donnees identiques dans la colonne C, alors on attribue le serial number de la premiere ligne (en partant de la fin) aux lignes du dessus en colonne A. Voir le fichier joint.

    J'ai commencé à écrire ce 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
     
    Option Explicit
     
    Public Sub test()
     
    Dim ProjectID As Integer
    Dim ProjectID_column As Integer
    For ProjectID = 1 To 200
    If Worksheets("Purchasing Plan").Cells(2, ProjectID) = "Project ID" Then
    ProjectID_column = ProjectID
    End If
     
       Next
     
        Dim dataRange As Range
        Dim oneCell As Range
        Set dataRange = Range(.Cells(4, ProjectID_column), .Cells(.Rows.Count, 4).End(xlUp))
        Dim row_counter1 As Integer
     
    row_counter1 = 4
     
    Do Until row_counter = 7000
    ....
    je ne sais pas si ce début à du sens, en tout cas je ne sais vraiment pas quoi ecrire ensuite. Peut etre qu'une formule est suffisante ?

    J'ai regardé des posts sur identifier des doublons et la majorité du temps une formule est proposée mais je n'arrive pas à appliquer à mon cas.

    Merci de votre aide
    Ambre
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Utilise une variable dictionnaire avec la ligne comme 'Item' et le nom du projet comme 'Key'.

    Tu boucles du bas vers le haut en ajoutant chaque ligne dans le dictionnaire.

    Tu catches l'erreur quand la clé existe déjà en remplaçant le nom du projet de la ligne en cours par celui déjà présent dans le dictionnaire.

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    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
    Sub Test()
    Dim Dico
    Dim i As Long
        Application.ScreenUpdating = False
        Set Dico = CreateObject("Scripting.dictionary")
        For i = Range("C" & Rows.Count).End(xlUp).Row To 3 Step -1 ' Numéro de ligne du début de la plage à adapter (ligne 3 pour l'exemple)
            If Not Dico.Exists(Range("C" & i).Value) Then
                Dico.Add Range("C" & i).Value, Range("C" & i).Offset(0, -2).Value
            Else
                Range("C" & i).Offset(0, -2).Value = Dico.Item(Range("C" & i).Value)
            End If
        Next i
        Set Dico = Nothing
    End Sub
    Cordialement.

  4. #4
    Membre averti
    Femme Profil pro
    VIE Procurement
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : VIE Procurement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut
    Citation Envoyé par gFZT82 Voir le message
    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
    Sub Test()
    Dim Dico
    Dim i As Long
        Application.ScreenUpdating = False
        Set Dico = CreateObject("Scripting.dictionary")
        For i = Range("C" & Rows.Count).End(xlUp).Row To 3 Step -1 ' Numéro de ligne du début de la plage à adapter (ligne 3 pour l'exemple)
            If Not Dico.Exists(Range("C" & i).Value) Then
                Dico.Add Range("C" & i).Value, Range("C" & i).Offset(0, -2).Value
            Else
                Range("C" & i).Offset(0, -2).Value = Dico.Item(Range("C" & i).Value)
            End If
        Next i
        Set Dico = Nothing
    End Sub
    Cordialement.
    Merci beaucoup.
    Cela fonctionne parfaitement pour le fichier test, et une fois que j'adapte le code pour mon vrai fichier, cela ne fonctionne plus.
    J'ai bien remplacé la lettre C par la D (colonne project ID) et 3 par 15, premiere ligne a prendre en compte.
    la premiere colonne (A) est celle ou j'attends également le serial number
    je ne comprends pas pourquoi cela ne fonctionne pas. je n'ai pas de messsage d'erreur. la feuille n'est pas protégée.

    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
    Sub Test()
    Sheets("Purchasing Plan").Select
     
    Dim Dico
    Dim i As Long
        Application.ScreenUpdating = False
        Set Dico = CreateObject("Scripting.dictionary")
        For i = Range("D" & Rows.Count).End(xlUp).Row To 15 Step -1
            If Not Dico.Exists(Range("D" & i).Value) Then
                Dico.Add Range("D" & i).Value, Range("D" & i).Offset(0, -2).Value
            Else
                Range("D" & i).Offset(0, -2).Value = Dico.Item(Range("D" & i).Value)
            End If
        Next i
        Set Dico = Nothing
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Tu as décalé d'une colonne et donc:
    devient:

  6. #6
    Membre averti
    Femme Profil pro
    VIE Procurement
    Inscrit en
    Septembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : VIE Procurement

    Informations forums :
    Inscription : Septembre 2013
    Messages : 10
    Par défaut
    GENIAL ! c'est parfait.
    Merci beaucoup pour ta réponse rapide !

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

Discussions similaires

  1. Marquer les doublons dans une colonne
    Par webfranc dans le forum SQL
    Réponses: 2
    Dernier message: 30/04/2008, 20h10
  2. Liste de choix sans doublons dans une colonne
    Par LouFels dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2008, 22h58
  3. SELECT sur doublons dans une colonne
    Par vador972 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/01/2008, 14h21
  4. Selection si doublons dans une colonne
    Par PhilMarcellus dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/05/2007, 12h21
  5. [EXCEL] Mise en évidence des doublons dans une colonne
    Par dacid dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/10/2006, 19h14

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