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 :

Demande de Modif sur macro recherche doublons [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 352
    Points : 150
    Points
    150
    Par défaut Demande de Modif sur macro recherche doublons
    Bonjour le forum
    Suite à une recherche sur le forum j' ai trouvé ce code vba pour tagger des doublons sur plusieurs feuilles.
    Serait il possible que sois ajouté en colonne B de la feuille 2 le mot doublon

    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
    Public Sub CDouble(RngA As Range, RngB As Range)
    Dim c As Range, v As Rang
     
    For Each c In RngA
        Set v = RngB.Find(c.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not v Is Nothing Then
            If c.Parent.Name & c.Address <> v.Parent.Name & v.Address Then
                c.Interior.ColorIndex = 3
                v.Interior.ColorIndex = 3
                Set v = Nothing
            End If
        End If
    Next c
    End Sub
     
    Sub Appliquer()
    Dim i As Byte, j As Byte
    Dim LastLigA As Long, LastLigB As Long
     
    Application.ScreenUpdating = False
    For i = 1 To Worksheets.Count
        LastLigA = Worksheets(i).Cells(Rows.Count, 1).End(xlUp).Row
        For j = i To Worksheets.Count
            LastLigB = Worksheets(j).Cells(Rows.Count, 1).End(xlUp).Row
            CDouble Worksheets(i).Range("a2:a" & LastLigA), Worksheets(j).Range("A2:A" & LastLigB)
            CDouble Worksheets(i).Range("A2:A" & LastLigA), Worksheets(j).Range("A2:A" & LastLigB)
        Next j
    Next i
    End Sub
    Merci d' avance

    Aladin

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Salut Aladin_23,

    Sans tester, je ferais ça :
    1) je ne comprends pas trop l'objectif de cette ligne If c.Parent.Name & c.Address <> v.Parent.Name & v.Address Then, mais soit...
    2) ça CDouble Worksheets(i).Range("a2:a" & LastLigA), Worksheets(j).Range("A2:A" & LastLigB) à supprimer.
    3) et puis le reste comme suis :
    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
    Public Sub CDouble(RngA As Range, RngB As Range)
    Dim c As Range, v As Rang
     
    For Each c In RngA
        Set v = RngB.Find(c.Value, LookIn:=xlValues, lookat:=xlWhole)
        If Not v Is Nothing Then
            If c.Parent.Name & c.Address <> v.Parent.Name & v.Address Then
                c.Interior.ColorIndex = 3
                v.Interior.ColorIndex = 3
     
                c.Offset(0, 1) = "Doublon"
                v.Offset(0, 1) = "Doublon"
                Set v = Nothing
            End If
        End If
    Next c
    End Sub
     
    Sub Appliquer()
    Dim i As Byte, j As Byte
    Dim LastLigA As Long, LastLigB As Long
     
    Application.ScreenUpdating = False
    For i = 1 To Worksheets.Count
        LastLigA = Worksheets(i).Cells(Rows.Count, 1).End(xlUp).Row
        For j = i To Worksheets.Count
            LastLigB = Worksheets(j).Cells(Rows.Count, 1).End(xlUp).Row
            CDouble Worksheets(i).Range("A2:A" & LastLigA), Worksheets(j).Range("A2:A" & LastLigB)
        Next j
    Next i
    End Sub
    N'hésite pas à ma faire un retour !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 352
    Points : 150
    Points
    150
    Par défaut
    Bonjour Kimy_Ire et le forum
    Merci pour ta solution elle est bonne, mais j' ai un souci, je m' explique

    1) Sur la feuille 1 je n' ai pas de doublons
    2) Je recherche les doublosnentre la feuille 1 et la feuille 2 colonne A
    3) Il arrive que sur la feuille 2, en colonne A il y ait plusieurs doublons de nom, et la il fait aussi une crcherche de doublons sur elle meme
    Peux ton ameliorer cela ?
    J' ai une dexuiemen quextion
    j' ai fait ceci pour extrairer des caracters - donctionne tres bien
    Je voudrais par contre faire une extratction de caracteres vers la droite mais à partir d' un tiret.
    Est ce possible
    Aladin

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    En fait c.Offset(0, 1) = "Doublon" écrit dans la feuille "Feuil1" et v.Offset(0, 1) = "Doublon" dans la "Feuil2".
    Donc si tu ne veux pas de mot doublon dans la Feuil1, tu sais ce qu'il te reste à faire !

    Par contre, je ne comprends pas ton histoire d'extraction de caractères...
    Tu veux garder seulement les trois caractères de gauche ou chercher au sein des chaines de caractères le "-" et extraire la partie de droite ou de gauche ?

    J'attends ton retour !

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 352
    Points : 150
    Points
    150
    Par défaut
    Rebonjour

    1) Je veux bien extraire tous les X caracteres apres le Tiret (A la droite du tirert)

    Aladin

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Alors ceci te conviendra :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Right(val, Len(val) - InStr(val, "-"))
    "val" est la chaine de caractères dans laquelle tu recherches ton "-".

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Eviter d'utiliser des mots réservés du VBA, Val étant une fonction !

    En cas de doute, sélectionner un mot puis appuyer sur la touche
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  8. #8
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Merci Marc-L.

    En effet, je ne savais pas et fais en sorte d'éviter ce genre d'association.

    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  9. #9
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    Y a pas de mal, VBA s'en sortant généralement bien mais de rares fois … Et j'en connais qui y ont perdu des heures !
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  10. #10
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 352
    Points : 150
    Points
    150
    Par défaut
    Bonsoir le forum

    Desolé, mais je ne peux mas applique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Right(val, Len(val) - InStr(val, "-"))
    car je viens dem' apercevoir que j' ai parfois des doubles tiret et que je n' ai pas de longueur de chaine fixe.
    Je suppose qu' il faudra faire un truc du style recuperer moi tous les caracters apres le premier tiret et mettre sur la colonne de droire
    Merci d' avance
    aladin

  11. #11
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,

    autre proposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...split(tavariable,"-")(1)'de préférence,comme le dit Marc, ne pas choisir "val" qui est un mot réservé
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  12. #12
    Expert éminent sénior
    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
    Points : 18 677
    Points
    18 677
    Par défaut

    La position du dernier tiret se trouve facilement via la fonction InStrRev puis fonction Mid de la position + 1 …

    Autre possibilté : utilisation de la fonction Split et récupération du dernier élément via la fonction UBound
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  13. #13
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Je l'ai suggéré Marc,

    a adapter suivant la demande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim tavariable As String, V2 As String
    Dim x As Integer
    tavariable = "je-suis-ici"
    For x = 1 To UBound(Split(tavariable, "-"))
      V2 = V2 & Split(tavariable, "-")(x)
    Next x
    MsgBox V2
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  14. #14
    Membre habitué
    Inscrit en
    Avril 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 352
    Points : 150
    Points
    150
    Par défaut
    Bonsoir le forum
    Merci a vous tous d' avoir pu m'aider a trouver une solution, j' ai crée une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function Separator(r As Range, Sep$, n&)
    Separator = Split(r.Text, Sep)(n)
    End Function
    Appelé par
    Cela me permet de recuperer les données situés apres le premier tiret
    Aladin

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

Discussions similaires

  1. [XL-2010] Macro recherche doublons inversés
    Par sramitator dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 20/07/2015, 15h02
  2. [XL-2013] Macro recherche doublon avec bouton
    Par leixy dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 03/08/2014, 14h51
  3. Demande d'aide sur macro a double conditions
    Par zinebs dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 11/11/2007, 23h23
  4. Réponses: 4
    Dernier message: 05/06/2007, 12h41
  5. [Oracle 8i]Recherche doublon sur une même table
    Par fmoriet dans le forum Oracle
    Réponses: 3
    Dernier message: 01/08/2006, 10h09

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