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 :

Calcul d'occurrences uniques des valeurs dans une ou deux colonne avec nombre de lignes très importants


Sujet :

Macros et VBA Excel

  1. #21
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    Bon, j'avoue que je ne comprends rien à tes explications mais puisque tu sembles satisfait alors OK pour moi...

  2. #22
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Malheureusement, j'ai poussé plus loin et le code ne compte pas les valeurs uniques a priori:

    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
    69
    70
    71
    72
    73
    74
    Sub COMPTEOCCURR()
     
    Application.EnableEvents = False
     
    Dim O As Worksheet 'déclare la variable O (Onglet)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim I As Double 'déclare la variable I (Incrément)
    Dim TMP As Variant 'déclare la variable TMP (tableau TeMPoraire)
    Dim R As Range 'déclare la variable R (Recherche)
    Dim T As String 'déclare la variable T (Texte)
     
     Dim FinTab As Double
     Worksheets(2).Select
     FinTab = Range("A100000").End(xlUp).Row
     Sheets(Sheets.Count).Select
     
     Dim ColCompt As String
     Select Case ActiveCell.Row
     Case Is = 6
     ColCompt = "A"
     Case Is = 7
     ColCompt = "D"
     End Select
     
     
     
    Set O = Worksheets(2) 'définit l'onglet O (à adapter a ton cas)
    TV = O.Range(ColCompt & "1" & ":" & ColCompt & FinTab) '("A1:A73787") 'définit le tableau des valeurs TV (à adapter à ton cas)
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To FinTab '87 'boucle sur toutes les lignes du tableau des valeurs TV (en partant de la seconde)
        D(TV(I, 1)) = "" 'alimente le dictionnaire D
     
    Next I 'prochaine ligne de la boucle
    TMP = D.keys 'récupère dans le tableau temporaire TMP, la liste des éléments du dictionnaire D sans doublon
     
     
     
    Select Case ActiveCell.Row
     
    Case Is = 8
     
    Set O = Worksheets(2) 'définit l'onglet O (à adapter a ton cas)
    TV = O.Range("A1:A" & FinTab, "D1:D" & FinTab) '("A1:A73787") 'définit le tableau des valeurs TV (à adapter à ton cas)
     
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To FinTab '87 'boucle sur toutes les lignes du tableau des valeurs TV (en partant de la seconde)
        D(TV(I, 1)) = "" 'alimente le dictionnaire D
     
    Next I 'prochaine ligne de la boucle
    TMP = D.keys 'récupère dans le tableau temporaire TMP, la liste des éléments du dictionnaire D sans doublon
     
    Range("L8").Value = UBound(TMP) - 1
     
     
    End Select
     
     
    If ColCompt = "A" Then
    Range("L6").Value = UBound(TMP) - 1
     
    End If
     
    If ColCompt = "D" Then
    Range("L7").Value = UBound(TMP) - 1
     
    End If
     
    Application.EnableEvents = False
     
    ActiveWorkbook.Save
     
     
    End Sub
    Je voudrais ce qui correspond à un nbval après suppression des doublons

    Sans supprimer les doublons de ma colonne de façon effective et en faisant un nbval sur 73787 ligne

    En fait il faut que j'ajoute 1 au UBound, je pense que ça vient de premier index des tableaux / Première ligne de la feuille de calculs

  3. #23
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    Une fois de plus, je me rend compte que j'ai un mal fou à comprendre sans le fichier. Je sais que ce n'est pas la politique de ce forum mais il me faudrait un exemple avec des explications claires sinon je ne pourrai rien de plus...

  4. #24
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 008
    Points
    1 008
    Par défaut
    Bonjour,

    Voici une façon de faire ta demande

    Je me suis mal exprimé, j'ai, dans ma colonne A:A un certain nombre de valeurs qui se répètent, je voudrais connaître le nombre de valeur mais sans compter les répétitions.

    Idem, en B:B.

    Je voudrais aussi connaître le nombre de valeurs (An;Bn) sans compter les répétitions.
    C'est du code simple sans utilisation de tableaux ou dictionnaire.

    Teste et dis nous.
    Fichiers attachés Fichiers attachés

  5. #25
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Je n'ai pas regardé ton code dans le détail Alex mais j'ai une une première erreur ici (variable non définie) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For ligne_cours = 2 To nbre_lignes_max
    que j'ai annulée en supprimant le Option Explicit (pour aller au plus vite), mais ensuite nouveau bug (erreur 438) ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("analyses").Sort.SortFields.Add2 Key:=Range("G2:G1048576"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    Là, j'avoue que je ne suis pas allé au-delà...

  6. #26
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 008
    Points
    1 008
    Par défaut
    ligne_cours n'était pas défini.

    Pour la seconde erreur c'est selon la version d'Excel; dans votre cas à priori il faut enlever le "2" de "Add2".

    J'utilise Office 2016 et le "Add2" fonctionne mais je crois qu'il ne fonctionne pas sous 2010.

    Pour la déclaration c'est de ma faute. Un oubli. Par contre cela ne me dit pas pourquoi le code fonctionnait quand même... Le déboggueur aurait du bloquer. C'est assez souvent qu'il me fait ce coup la.

    Je remets le fichier modifié pour qu'il soit plus "ouvert" aux versions d'Excel.
    Fichiers attachés Fichiers attachés

  7. #27
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Re,

    C'est TOP ! Chapeau Alex...

  8. #28
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 008
    Points
    1 008
    Par défaut
    Oui enfin c'est améliorable je pense.

    C'est surtout une entrée en matière pour Kestion pour voir si j'ai bien compris sa demande. Ensuite on adapte.

    Il faut sa réponse et un fichier exemple de sa part serait aussi le bienvenu.

  9. #29
    Membre éprouvé Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 569
    Points : 1 008
    Points
    1 008
    Par défaut
    Bon bein je crois qu'il a trouvé ce qu'il voulait car plus de nouvelles...

  10. #30
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Bonjour, merci pour les réponses, je n'ai pu répondre faute de temps , désolé.

    Le code de Thautheme fonctionne parfaitement bien pour ma question sur une colonne.

    Je test ton code Alex020181 et te dis.

  11. #31
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Si je comprends bien ton code Alex, il compte le nombre de 0 dans la colonne A de l'onglet origine.
    Je voudrais, pour ma part, compter le nombre de valeurs telles qu'elles sont inscrites dans ta colonne A de ton onglet analyses, c'est cette info que je n'ai pas.
    (Chez toi, 0; 1; 2; ... 10)
    Moi je ne sais pas combien de valeurs se répètent dans ma colonne A de mon onglet d'origine, peu importe le nombre de fois qu'elles y sont répétées.

    Encore merci

  12. #32
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    pour reprendre ton fichier:

    Origine:

    0
    1
    6
    0
    4
    10
    1
    .
    .
    .

    Dans cette colonne j'ai 5 valeurs différentes:

    0
    1
    6
    4
    10

    C'est ce chiffre que je cherche à obtenir

  13. #33
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Sur 2 colonnes, plus ardu:


    0 1
    3 2
    0 1
    4 1
    6 2
    .
    .
    .

    Ici, 4 couples différents:

    0 1
    3 2
    4 1
    6 2

    4 est le chiffre que je cherche

  14. #34
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Ce qui correspond à 122 dans tes colonnes G et H de l'onglet analyses

  15. #35
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Comme si je faisais un nbval dans ma colonne de 75000 valeurs après avoir supprimé les répétitions (menu: données/ supprimer doublons)

  16. #36
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Je ne génère pas moi-même mes valeur de l'onglet origine, c'est une extraction d'une base de données.....
    Dans vos codes, vous savez qu'il y a 11 valeurs différentes (0; 1; 2; .... 10) car vous générez cela avec la borne de la fonction alea

  17. #37
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    PS: je ne reçois plus les mails de notification de nouveaux messages......

  18. #38
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 948
    Points : 5 174
    Points
    5 174
    Par défaut
    bonjour
    je sais pas si j'ai compris la demande
    mais selon cette exemple :
    Sur 2 colonnes, plus ardu:


    0 1
    3 2
    0 1
    4 1
    6 2
    .
    .
    .

    Ici, 4 couples différents:

    0 1
    3 2
    4 1
    6 2

    4 est le chiffre que je cherche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim f2 As Worksheet
    Set d = CreateObject("Scripting.Dictionary")
    Set f2 = Sheets("Feuil1")
       TblBD1 = f2.Range("A1:B" & f2.Range("B" & Rows.Count).End(xlUp).Row)
     
        For i = 1 To UBound(TblBD1)
        clé = TblBD1(i, 1) & TblBD1(i, 2)
        d(clé) = d(clé)
        Next i
        MsgBox d.Count
    End Sub

  19. #39
    Membre habitué
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 1 056
    Points : 174
    Points
    174
    Par défaut
    Pour 1 colonne: OK, je pense que ça correspond bien.

    J'ai essayé de modifier pour 2 colonnes disjointes et je ne pense pas que ce soit OK.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim f2 As Worksheet
    Set D = CreateObject("Scripting.Dictionary")
    Set f2 = Sheets(2)
       TblBD1 = f2.Range("A1:A" & f2.Range("A" & Rows.Count).End(xlUp).Row, "E1:E" & f2.Range("E" & Rows.Count).End(xlUp).Row)
     
        For I = 1 To UBound(TblBD1)
        clé = TblBD1(I, 1) & TblBD1(I, 1)
        D(clé) = D(clé)
        Next I
        MsgBox D.Count - 1
    End Sub

  20. #40
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 948
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 948
    Points : 5 174
    Points
    5 174
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim f2 As Worksheet
    Set d = CreateObject("Scripting.Dictionary")
    Set f2 = Sheets("Feuil1")
       TblBD1 = f2.Range("A1:E" & f2.Range("E" & Rows.Count).End(xlUp).Row)
     
        For i = 1 To UBound(TblBD1)
        clé = TblBD1(i, 1) & TblBD1(i, 5)
        d(clé) = d(clé)
        Next i
        MsgBox d.Count
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Récupérer des valeurs dans une unique variable VBA
    Par LaMite dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2014, 12h06
  2. Réponses: 9
    Dernier message: 15/03/2013, 16h18
  3. Réponses: 13
    Dernier message: 01/02/2006, 12h00
  4. Attribuer des valeurs dans une ListBox
    Par OjBarbare dans le forum MFC
    Réponses: 5
    Dernier message: 06/12/2005, 11h28
  5. fonction récupérant des valeurs dans une fonction popup...
    Par petitsims dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/01/2005, 14h51

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