nombre commun

perrmi

XLDnaute Occasionnel
bonjour,

A partir d'1 colonne de nombres de 2 chiffres.(12-25-32-52...)
j'aimerais extraire les nombres communs de cette colonne qui possedent les meme chiffres.
ici par excemple 25 et 52
voir fichier joint
merci
perrmi
 

Pièces jointes

  • commun.xlsx
    10.7 KB · Affichages: 37
Dernière édition:

CISCO

XLDnaute Barbatruc
Bonjour à tous

Effectivement, Job75 :
1) Ma proposition ne prend pas systématiquement en charge les doublons
2) Lorsqu'on travaille avec des nombres, souvent, c'est plus simple de faire sans INDEX(.....;LIGNE(....)) et de faire directement avec PETITE.VALEUR(....)
3) Le plus sympa, cela serait de trouver une solution plus polyvalente, traitant des nombres plus grands, avec 3, 4 ou un nombre quelconque de chiffres. Avec des formules, cela me parait peu possible. Avec du VBA, c'est certainement faisable.

@ plus
 

job75

XLDnaute Barbatruc
Re, bonjour Laetitia :)
3) Le plus sympa, cela serait de trouver une solution plus polyvalente, traitant des nombres plus grands, avec 3, 4 ou un nombre quelconque de chiffres. Avec des formules, cela me parait peu possible. Avec du VBA, c'est certainement faisable.
Oui tout à fait faisable et pas trop difficile si on utilise cette fonction personnalisée pour classer les chiffres :
Code:
Function Classer(n As String) As String
Dim i%, a
If Len(n) < 2 Or Not n Like String(Len(n), "#") Then Exit Function
ReDim a(1 To Len(n))
For i = 1 To UBound(a): a(i) = Mid(n, i, 1): Next
tri a, 1, UBound(a)
Classer = Replace(Join(a, ""), 0, "#") 'NB.SI ignore les zéros non significatifs
End Function

Sub tri(a, gauc, droi)  ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
Elle est entrée dans une colonne auxiliaire (à masquer).

Le tableau est organisé en tableau Excel pour qu'elle se recopie automatiquement.

Les formules de la MFC et de l'extraction sont très simples.

Fichier joint.

Finalement tout ça est très intéressant, pour la peine je mets un "J'aime" au post #1.

A+
 

Pièces jointes

  • commun VBA(1).xlsm
    28.4 KB · Affichages: 23
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Ci-joint un essai avec 1000 nombres de 15 chiffres maximum.

TOUCHE F9 POUR UN NOUVEAU TIRAGE.

Avec 8 formules d'extraction le calcul se fait en 1,5 seconde chez moi.

A+
 

Pièces jointes

  • commun VBA 1000 nombres(1).xlsm
    66.5 KB · Affichages: 14

job75

XLDnaute Barbatruc
Bonjour perrmi, le forum,

La solution précédente n'est pas très rapide car le calcul des fonctions NB.SI prend du temps.

Pour aller vite on utilisera le Dictionary avec cette macro dans le code de la feuille :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, doublon(), d As Object, i&, x$
If FilterMode Then ShowAllData 'si la feuille est filtrée
tablo = [T].Resize([T].Rows.Count + 1) 'tableau, plus rapide, au moins 2 éléments
ReDim doublon(1 To UBound(tablo) - 1, 1 To 1)
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(doublon)
    x = Classer(CStr(tablo(i, 1))) 'appelle la fonction
    If x <> "" Then
        If d.exists(x) Then
            doublon(d(x), 1) = tablo(d(x), 1)
            doublon(i, 1) = tablo(i, 1)
        Else
            d(x) = i 'mémorise la ligne
        End If
    End If
Next
Application.EnableEvents = False
[M] = doublon
Application.EnableEvents = True
End Sub
Fichiers (2).

Il n'y a plus de formules, ni en colonne A ni en colonne B (qu'on ne peut pas effacer manuellement).

Le traitement des 1000 nombres se fait chez moi en 0,09 seconde.

A+
 

Pièces jointes

  • commun VBA(2).xlsm
    31.1 KB · Affichages: 9
  • commun VBA 1000 nombres(2).xlsm
    49.7 KB · Affichages: 10
Dernière édition:

Discussions similaires

Réponses
9
Affichages
147

Statistiques des forums

Discussions
314 120
Messages
2 106 095
Membres
109 488
dernier inscrit
Abdel44