VBA--principe de listage.

  • Initiateur de la discussion Initiateur de la discussion JJ1
  • 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 !

J

JJ1

Guest
Bonjour,

Je souhaiterais un code "light" pour lister, à partir d'une plage, les nombres qui y sont les plus présents.
Bien sûr c'est un modèle (taille de la plage, nombre de nombres (ici 3)...) que j'adapterai ensuite à mes différents fichiers.
Si vous pouviez me faire un modèle VBA de recherche et de listage (extraction en bleu dans l'exemple), merci.

Bonne journée
 

Pièces jointes

Re : VBA--principe de listage.

Bonjour le fil 🙂,
Pas forcément "light", mais bon 😛...
Code:
Sub Test()
Dim Tablo(1 To 200) As Integer, Cellule As Range
Dim I As Integer, J As Integer, K As Integer, Halte As Integer
Halte = Application.InputBox("Nombre de valeurs", "Extraction", 3, , , , , 1)
Range("O:P").Clear
For Each Cellule In Selection
Tablo(Cellule.Value) = Tablo(Cellule.Value) + 1
Next Cellule
For I = Application.WorksheetFunction.Max(Tablo) To 1 Step -1
For J = 1 To 200
If Tablo(J) = I Then
K = K + 1
Range("O" & K) = J
Range("P" & K) = I
If K = Halte Then Exit Sub
End If
Next J
Next I
End Sub
Sélectionner la zone, lancer la macro et renseigner le nombre de valeurs voulues 🙄...
Bonne suite 😎
 
Re : VBA--principe de listage.

Re 🙂,
Une version encore moins light, mais plus universelle 😛...
Code:
Sub Test()
Dim Tablo() As Integer, Cellule As Range
Dim I As Integer, J As Integer, K As Integer
Dim Zone As Range, Résultat As Range, Halte As Integer, ValeurMax As Integer
Set Zone = Application.InputBox("Zone à traiter", "Extraction", , , , , , 8)
ValeurMax = Application.WorksheetFunction.Max(Zone)
ReDim Tablo(1 To ValeurMax)
Set Résultat = Application.InputBox("Emplacement du résultat", "Extraction", , , , , , 8)
If Résultat.Count <> 1 Then Set Résultat = Résultat.Resize(1, 1)
Halte = Application.InputBox("Nombre de valeurs", "Extraction", 3, , , , , 1)
Résultat.Resize(, 2).EntireColumn.Clear
For Each Cellule In Zone
Tablo(Cellule.Value) = Tablo(Cellule.Value) + 1
Next Cellule
For I = Application.WorksheetFunction.Max(Tablo) To 1 Step -1
For J = 1 To ValeurMax
If Tablo(J) = I Then
Résultat.Offset(K) = J
Résultat.Offset(K, 1) = I
K = K + 1
If K = Halte Then Exit Sub
End If
Next J
Next I
End Sub
Bonne suite 😎
 
Re : VBA--principe de listage.

Bonjour JNP, PhLaurent,
merci pour vos deux solutions, je vais essayer d'adapter à mes tableaux.

2 remarques toutefois:

le code de Philippe semble me lister les nombres les plus fréquents DANS LA PLAGE et non les nombres les plus "ensemble" par lignes.
le code "plus universel" de JNP demande la zone (ok) la plage de restitution (je ne connais que la cellule de départ car je ne sais pas le nombre de combinaisons de 3 (par ex) qui vont être listées?

Pourriez-vous me renseigner sur ces 2 points.
merci

le fichier contient le dernier code.
Bonne journée
 

Pièces jointes

Re : VBA--principe de listage.

Re 🙂,
Pas la plage, mais l'emplacement où tu veux commencer de mettre les résultats 🙄...
Mon code aussi liste les nombres les plus fréquents dans la plage 😱...
Il faudrait que tu expliques exactement ce que tu veux dire par "par ligne" 😕...
Tu comptes 1 pour chaque ligne où est présente la valeur, c'est ça 🙄 ?
Il faudrait aussi que tu définisse ce qui doit être renvoyé, si je comprends ton dernier post, tu souhaites les ex-aequos sur la même ligne 😱 ?
Et 3, ce sera le nombre de séries à renvoyer 😕 ?
A te lire 😎
PS : T'es toujours aussi compliqué, et pas trop explicatif 😛...
 
Re : VBA--principe de listage.

Re,
"PS : T'es toujours aussi compliqué, et pas trop explicatif "... pas faux, on me dit trop concis. Sorry !
Je cherche les numéros les plus fréquents mais contenus sur les lignes ( duos, triplets...) et non les numéros les plus fréquents de la plage entière. Pour parler simplement, les numéros associés qui reviennent le plus souvent.
Regarde dans mon fichier, 4 8 9 et 31 33 35 sont toujours " ensemble" sur une ligne (choix: 3).
La macro renvoie donc succesivement la liste des triplets (ici avec le choix 3) qui reviennent le plus souvent qu'elle trouve.
J'appliquerai ta macro à mon fichier où je modifierai la plage et je testerai avec 2 (duos) 3 (triplets) ... etc...
merci, en espérant que c'est un peu plus clair....
Bon am
 
- 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
0
Affichages
887
Retour