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 et identification de doublons, triplons, dans variables


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Novembre 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Novembre 2020
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Recherche et identification de doublons, triplons, dans variables
    Bonjour,

    J'ai une macro (non précisée ici) qui calcule un certain nombre de variables (ci-dessous nommées VarA à I et codées en dur pour l'exemple, mais elles varient bien sûr dans ma macro).


    Je voudrais trouver les doublons, triplons, quadruplons, quintuplons (au-delà, je ne crois pas qu'il y en aura), et que dans une autre variable (pas cellule !) par exemple, on me mette la valeur qui apparaît 5 fois, la valeur qui apparaît 4 fois,la valeur qui apparaît 3 fois,la valeur qui apparaît 2 fois....

    J'ai essayé avec des tableaux mais ne sais pas comment m'en sortir...Peut-être avec des dictionnaires mais je ne sais pas les manipuler...

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    Sub compterOccurence()
     
     
    VarA = 1
    VarB = 1
    VarC = 1
    VarD = 1
    VarE = 3
    VarF = 3
    VarG = 3
    VarH = 4
    VarI = 5
     
     
    Mon_Tableau = Array(VarA, VarB, VarC, VarD, VarE, VarF, VarG, VarH, VarI)
     
    Set mondico = CreateObject("Scripting.dictionary")
     
        For Each variable In Mon_Tableau
            If Not mondico.exists(variable) Then 'si la valeur n'apparait pas déjà dans le dico
                mondico.Add variable, 1 'je l'ajoute en tant que clé avec 1 en item
            Else
                mondico(variable) = mondico(variable) + 1 'sinon, j'incrémente l'item
            End If
        Next variable
     
     
     
        'Debug.Print "value of VarA is " & mondico(VarA)
     
    'ci-dessous affiche la valeur de la variable et son occurence....
     
    For Each variable In mondico.keys
    'item=occurences
    'clé =valeur
    '
    'MsgBox mondico(variable)
    If mondico(variable) = 5 Then
        Arcanequintuple = Item
        Quellevar5 = mondico(keys)
        Debug.Print Arcanequintuple
        Debug.Print Quellevar5
     
    ElseIf mondico(variable) = 4 Then
        Arcanequadruple = variable
        Quellevar4 = mondico(keys)
        Debug.Print Arcanequadruple
        Debug.Print Quellevar4
     
     
    ElseIf mondico(variable) = 3 Then
        Arcanetriple = variable
        Quellevar3 = mondico(keys)
        Debug.Print Arcanetriple
        Debug.Print Quellevar3
     
    ElseIf mondico(variable) = 2 Then
        Arcanedouble = variable
        Quellevar2 = mondico(keys)
        Debug.Print Arcanedouble
        Debug.Print Quellevar2
     
    End If
    Next variable
     
     
    End Sub
    Ca me sort bien quelles valeurs sont en "quelque chose", 1 et 3 en l’occurrence, mais je ne sais pas si elles sont en double, triple, quadruple ou quintuple...

    Quelqu'un saurait-il faire ?

    Merci

    Cordialement

    Phillip

  2. #2
    Membre chevronné Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Points : 1 971
    Points
    1 971
    Par défaut
    Bonjour,

    Je suppose que vous devez avoir un code bien lourd, boucles imbriquées,...
    Je serais assez curieux de connaître la finalité.

    Perso, pour identifier les doublons, ... Je passerais par Power query et sa fonction grouper les lignes sur les valeurs d'une colonne (avec compte des occurrences) et ensuite filtre pour ne garder que les occurrences supérieures à 1.

    Ca permettrait de créer un table contenant les occurrences multiples, dont on pourrait récupérer facilement dans un array les différents libellés, pour un traitement via vba ou autre.

    Bav,
    Michaël

    Si mon aide/avis vous a été profitable , n'hésitez pas à cliquer sur , ça fait toujours plaisir...
    _________________________________________________________________________________________________________________

    "Tout le monde est un génie. Mais si on juge un poisson sur sa capacité à grimper à un arbre, il passera sa vie à croire qu'il est stupide..."
    Albert Einstein

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 927
    Points
    55 927
    Billets dans le blog
    131
    Par défaut
    Salut.

    Pas beaucoup de notions Excel dans ta demande, ni dans ton code... Si pas d'Excel du tout, dis-le et je déplacerai dans le bon forum.

    Si tu travailles sur de l'Excel, je plussoie mfoxy (Hello) car Excel (avec la version que tu tagues) est parfaitement équipé pour cela, notamment avec Power Query. Sans Power Query mais avec de l'Excel, je passerais par une table temporaire en Excel qui m'identifie les doublons, triplons, etc. Tu n'aurais ainsi pas de limites et ne serais pas bloqué par le "je pense qu'il n'y en aura pas plus que 4"...

    J'ai de gros doutes sur une litanie de variables et il me semble qu'un array (tableau VBA) serait plus indiqué. J'imagine que tu as "simplifié" ton problème mais qu'en fait, on va forcément taper à côté de la plaque dans nos réponses. Un exposé clair de ce que tu as au départ et de ce que tu souhaites à l'arrivée permettra de t'aider de façon plus rapide et plus productive.

    Puisque tu as posté sur Excel, je te propose une solution Excel/VBA (quand on programme en VBA pour Excel, on pense Excel avant de penser VBA). On plante le décor grâce à un tableau structuré t_Doublons constitué de
    2 colonnes:
    • On copiera les valeurs à tester dans la première colonne;
    • On placera une formule avec NB.SI.ENS dans la seconde colonne;
    • On transformera cette colonne en valeurs;
    • On restituera le tableau constitué de la plage;
    • Optionnellement, on pourrait demander de ne récupérer que les valeurs répétées.


    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
    Function getDuplicates(Values)
      Dim Target As Range
      If Not Range("t_Doublons").ListObject.DataBodyRange Is Nothing Then Range("t_Doublons").ListObject.DataBodyRange.Delete
      Set Target = Range("t_Doublons").ListObject.ListRows.Add().Range(1)
      Target.Resize(UBound(Values) - LBound(Values) + 1).Value = Application.Transpose(Values)
      Target.Offset(0, 1).Formula = "=countifs([Valeur],[@Valeur])"
      Range("t_Doublons[Nombre]").Value = Range("t_Doublons[Nombre]").Value
      Range("t_Doublons").RemoveDuplicates 1, xlYes
      getDuplicates = Range("t_Doublons").Value
    End Function
     
     
    Sub Test()
      Dim Values, Duplicates
     
      Values = Array("Alain", "Pierre", "Alain", "Alain", "Alex", "Pierre")
      Duplicates = getDuplicates(Values)
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    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...
    ---------------

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/08/2020, 12h04
  2. [XL-2003] Recherche de "doublons" dans variable
    Par sharox dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/07/2014, 09h03
  3. Rechercher valeur Mini dans variable tableau (array)
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 16/07/2013, 20h03
  4. [Batch] Recherche chaine dans variable avec SET
    Par naranyan dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 18/02/2011, 11h45
  5. [Problème] Recherche précise dans variable
    Par maloute80 dans le forum Langage
    Réponses: 12
    Dernier message: 10/12/2007, 13h37

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