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 :

coloration de doublons avec ajout d'un numéro de format [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut coloration de doublons avec ajout d'un numéro de format
    Bonjour cher ami du forum,


    Je voudrais transformer un code permettant de trouver les doublons dans des strings de la même colonne en ajoutant si dans un autre colonne le numéro correspondant a un format est identique. Cette coloration est également différente d'un doublons a l'autre afin de faciliter le repérage visuel.


    JE vais transfomer une "usine a gaz" en exploitation d'hélium


    LE code que j'ai est celui établis pas dysortho (que je salut )

    Je voudrais également éviter que la coloration sois noir (je crois d'enlever le 1 dans l'Array fais l'affaire)


    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
    Function doublons_couleur_groupe_plage(lettre_colonne_voulue As String)
    Dim couleurs() As Variant
    Dim mondico As Object
    Dim c As Variant
    Dim nocoul As Variant
     
     
       couleurs = Array(1, 3, 4, 6, 7, 8, 14, 15, 17, 20, 22, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 50, 53)
       Set mondico = CreateObject("Scripting.Dictionary")
       For Each c In Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue))
         If c <> "" Then mondico.item(c.value) = mondico.item(c.value) + 1
       Next c
       For Each c In Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue))
        If c <> "" Then
          nocoul = (Application.Match(c.value, mondico.keys, 0)) Mod UBound(couleurs)
          If mondico.item(c.value) > 1 Then c.Interior.ColorIndex = couleurs(nocoul)
        End If
       Next c
     End Function

    Pouvez vous donc m'aider a atteindre mon but (je ne suis pas encore rendu au niveau de crééer des objet dictionnaire)


    merci milles fois !!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Voici donc où que je suis rendu (encore bloqué mais bon ... )


    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
    Function test_doublons_couleur_groupe_plage(lettre_colonne_voulue As String)
    Dim couleurs() As Variant
    Dim mondico As Object
    Dim c As Variant
    Dim nocoul As Variant
     
     
       couleurs = Array(3, 4, 6, 7, 8, 9, 14, 15, 16, 17, 18, 19, 20, 22, 23, 24, 26, 27, 28, 31, 33, 34, 35, 36, 37, 38, 39, 40, _
       41, 42, 43, 44, 45, 46, 47, 48, 50, 53, 54, 54)
     
       Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue)).Interior.ColorIndex = xlNone
     
       Range([no_format_travail].Column & 2, [no_format_travail].Column & LastLignUsedInColumn([no_format_travail])).Interior.ColorIndex = xlNone
     
     
       Set mondico = CreateObject("Scripting.Dictionary")
     
       For Each c In Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue))
         If c <> "" Then mondico.item(c.value) = mondico.item(c.value) + 1
       Next c
     
       For Each c In Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue))
        If c <> "" Then
          nocoul = (Application.Match(c.value, mondico.keys, 0)) Mod UBound(couleurs)
          If mondico.item(c.value) > 1 Then c.Interior.ColorIndex = couleurs(nocoul)
        End If
       Next c
     
     End Function


    Ce que je ne sais pas c'Est la partie manipulation du dico i.e. étant donné que c'Est une concaténation de 2 colonnes. JE ne sais pas si je peux donner 2 range et il va regarder dans les deux cellules de la meme ligne du range ou simplement additioner les deux plages i.e. regarder seulement une colonne a la fois



    merci pour votre aide !!!

  3. #3
    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
    Bonjour jp,

    Pas bcp de temps là,
    Mais ce ne serait pas plus simple de faire une MFC sur tes paramètres et colonnes voulues.
    De plus il me semble avoir vu 2 posts (a vérifier) permettant de repèrer les couleurs dans une cellule faites par MFC … a voir

    Édit : je ne trouve pas tes explications simple
    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 ;)

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Bonjour Ryu,


    J'espère que tu vas bien, cher ami !!!



    Je suis d'avis que mes explications sont pas nécessairement les plus limpides, je vais donc ajouté un visuel afin de mieux expliqué mon idée.


    DOnc voici un exemple de demande fictive de produit

    Nom : Capture.JPG
Affichages : 298
Taille : 82,4 Ko

    Dans cette exemple suivant nous avons différent chapeau ayant plusieurs formats. Je veux être en mesure d'identifier facilement les vrai doublons i.e. les produits ayant la descriptions ainsi que le format identique. Je voudrais que seulement que les lignes contenants chapeau skelette sois un doublons et non chapeau skelette et chapeau melon car ils on la meme descriptions mais un format différent.


    Pourquoi ne pas utilisé la MFC c'est bien simple, tout mes tests que j'ai fait ne permettais pas de concaténer les valeurs. J'aurais donc eu dans mon exemple des doublons pour les descriptions identiques ainsi que les format identique et non les deux. Autre fait concernant la MFC, c'Est que je copie les donnés d'un document initiale que je travail dans un document. Lorsque l'on copie d'un document source n'ayant pas la même mise en forme conditionnel, celle-ci est écrasé par l'originale, donc je devrais faire une MFC après la copie des donné donc nécessairement une manipulation a chaque fois ce qui est une perte de temps du fait que des jours je crée une 10 de demandes ... j'aurais une réelle efficacité d'éliminer la rédaction de la MFC. Dernier point, c'Est que la MFC génère les doublons sur une seul et unique couleur. Malheureusement j'arrive a avoir des doublons sur des données hyper similaire et la couleur me permet de regrouper plus facilement, visuellement les doublons.


    Je vais également fouiller sur le forum si je trouverais un post parlant de cette situation ... mais quoi qu'il en soit, je voudrais éviter la MFC pour es raisons expliquer ci-haut.



    un gros merci a vous tous pour votre coup de pouce !!!!

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    556
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 556
    Par défaut
    Bonjour monsieur Toulon ()


    Ce que vous montrer, c'Est le code que j'ai présentement mais il faut également qu'il regarde un autre plage pour la coloration mais effectivement c'est quelquechose du genre que j'ai à modifier pour mon besoin

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Ce que vous montrer, c'Est le code que j'ai présentement
    regarde de plus pres avec tes lunettes de preférence
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour
    coloration unique pour chaque doublon
    si c'est ce genre de chose que tu veux
    Nom : demo3.gif
Affichages : 355
Taille : 158,1 Ko

    alors

    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
    Sub test()
        doublons_couleur_groupe_plage "A"
    End Sub
    '
    '
    Function doublons_couleur_groupe_plage(lettre_colonne_voulue As String)
        Dim couleurs() As Variant, dico As Object, c As Range, elem As Variant, x&, chaine$
        couleurs = Array(3, 4, 6, 7, 8, 14, 15, 17, 20, 22, 24, 26, 27, 28, 33, 34, 35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46, 50, 53)
        Set dico = CreateObject("Scripting.Dictionary")
        For Each c In Range(lettre_colonne_voulue & 2, lettre_colonne_voulue & LastLignUsedInColumn(lettre_colonne_voulue))
            If c <> "" Then dico.Item(c.Value) = dico.Item(c.Value) & " " & c.Address
        Next c
        For Each elem In dico
            chaine = Replace(Application.Trim(dico(elem)), " ", ",")
            If UBound(Split(chaine, ",")) > 0 Then
                x = x + 1: couleur = couleurs(x)
                Range(chaine).Interior.ColorIndex = couleur
            End If
            Debug.Print elem & " : " & chaine & "   :   " & UBound(Split(chaine, ","))+1
        Next
    End Function
    '
    '
    Function LastLignUsedInColumn(l)
        LastLignUsedInColumn = Cells(Rows.Count, l).End(xlUp).Row
    End Function


    cela dit entre nous 56 couleurs pour d'eventuels doublons ,tu va vite etre limité sur une plage importante
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. [XL-2007] ListView sans doublon avec ajout
    Par Jojokun dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 17/10/2012, 12h15
  2. Réponses: 8
    Dernier message: 13/09/2005, 21h05
  3. liste déroulante avec ajout possible
    Par bachilbouzouk dans le forum ASP
    Réponses: 5
    Dernier message: 19/04/2005, 11h48
  4. Réponses: 4
    Dernier message: 04/03/2005, 11h56

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