Recherche valeurs unique

  • Initiateur de la discussion Initiateur de la discussion galpha
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

G

galpha

Guest
Bonjour,

j'ai fait un macro qui va calculer le nombre de valeurs uniques selon plusieurs critères. Exemple:

Code:
Dim Zpn2ATraiterNonClot As New Collection

       If InStr(UCase(Cells(lignes, search("GRAPHE CLOT")).Value), UCase("Analyse")) Then
            If (Cells(lignes, search("Pose Materiel Majeur")).Value = "1") And ((UCase(Cells(lignes, search("ZPN2")).Value)) <> "C") Then
                Zpn2ATraiterNonClot.Add Cells(lignes, search("Graphe")).Value, CStr(Cells(lignes, search("Graphe")).Value)
                On Error Resume Next
            End If
        End If

Code:
Worksheets("Statistiques").Cells(3, 2).Value = Zpn2ATraiterNonClot.Count

La fonction search, c'est juste pour me retourner le numéro de colonne basé sur le titre de celle-ci. Lorsque la condition if est remplie, cela rejoute un numéro à une collection, car il y a plusieurs doublons dans la colonne et à la fin, ça compte le nombre de valeurs dans la collection (qui sont toutes uniques).

Le problème, c'est que je dois faire cela pour 8000 lignes, et il y a environ 10 collections avec des traitements différents à faire, donc le temps est condiérablement long. Ceci doit s'exécuter chaque fois que le fichier est enregistré par un utilisateur.

Est-ce que quelqu'un aurait une solution plus rapide pour faire le code démonstré ci-haut sans avec à faire des collections et compter le nombre de valeurs.

Merci!
 
Re : Recherche valeurs unique

Re,

je ne peux acceder à ce site, à cause de mon proxy, mais mets plutôt sur le forum un fichier exemple avec de fausses données pour que nous cernions mieux le problème. Pour joindre, un fichier inférieur à 50k, en .xls ou .zip, tu cliques sur le bouton un peu plus bas "Gerer les pièces jointes" = > parcourir => tu selectionnes ton fichier => et tu cliques sur "Uploader".

@+
 
Re : Recherche valeurs unique

Re

je n'ai pas tout compris, mais regarde le code ci dessous, alimente une collection par l'intermédiaire d'un tableau virtuel. Compte les valeurs uniques par colonnes. Exemple à adapter à ton fichier.

Attention comme tu utilises une barre de progression dans ton code cela allonge considérablement la vitesse d'execution.

Code:
Sub test()
Dim t(), i As Integer, j As Integer, x As New Collection
t = Range("A1").CurrentRegion
For i = LBound(t, 2) To UBound(t, 2)
    For j = LBound(t, 1) To UBound(t, 1)
        On Error Resume Next
        x.Add t(j, i), CStr(t(j, i))
    Next j
    On Error GoTo 0
    MsgBox x.Count
    Set x = Nothing
Next i
End Sub

si cela peut t aider...

bonne fin d'après midi
@+
 
Re : Recherche valeurs unique

Après avoir étudier un peu le cas, ta solution me semble bien correcte si je ne veux rempli que la collection.

Si je veux la rempli suivant 3 conditions de cellules sur une même ligne, je ne comprend pas comment je pourrais faire cela avec ton code.😕
 
Re : Recherche valeurs unique

Re Galpha

qu'entends tu avec 3 conditions de cellules ? pourrais tu être un peu plus explicite. Je pense que l'on peut mettre en amont des tests pour savoir si oui ou non la valeur de la cellule doit être rentrée dans la collection.

bonne soirée
@+
 
Re : Recherche valeurs unique

Re

un exemple avec condition :

Code:
Sub test()
Dim t(), i As Integer, j As Integer, x As New Collection
t = Range("A1").CurrentRegion
For i = LBound(t, 2) To UBound(t, 2)
    For j = LBound(t, 1) To UBound(t, 1)
        If t(j, 2) = 0 and t(j, 3) > 1000 And t(j, 4) < 500 Then
        On Error Resume Next
        x.Add t(j, i), CStr(t(j, i))
        End If
    Next j
    On Error GoTo 0
    MsgBox x.Count
    Set x = Nothing
Next i
End Sub

@+
 
Re : Recherche valeurs unique

Pour remplir une de mes collections, j'ai besoin de déterminer si la cellule sur la même colonne est égale à "C", que l'autre à côté soit égale à "1" et l'autre à "Clôturer".

D'après ce que je comprend de ton bout de code, tous les cellules sont remplies en mémoire puis ensuite les tests sont effectués dans l'array. Puis une collection est remplie.

Est-ce que agir d'une telle façon accélère la vitesse d'exécution par rapport à lire directement la feuille de calcul?
 
Re : Recherche valeurs unique

Bonjour,

Le code donné par Pierrot93 m'intéresse énormément, mais j'aurais besoin qu'il ne compte qu'une seule colonne (au lieu de donner les résultats de chaque colonne une à une) et je n'arrive pas à l'adapter.
Quelqu'un pourrait-il m'aider à ne compter par exemple que la colonne A dans ce code?

D'avance merci
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
914
Réponses
4
Affichages
735
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
453
Réponses
3
Affichages
430
Réponses
4
Affichages
556
Retour