XL 2016 Changer une plage de recherche d'une macro à partir d'une feuille

L

Lucko

Guest
Code:
Private Sub Statistiques()
Dim T, i As Long, dico, Clé, OK As Boolean, T2


Set dico = CreateObject("Scripting.Dictionary")
With Worksheets("Tout ou Rien")
T = .range("E18:X24")  <--- J'aimerais modifier cette partie pour pouvoir changer la plage de recherche dans la feuille et non dans le code puisqu'elle varie en fonction des données recueillies et de mes recherches. Autrement dit, que je puisse écrire X500 ou x246, ou x1000 dans une cellule de la feuille.
For i = LBound(T, 1) To UBound(T, 1)
    For j = LBound(T, 2) To UBound(T, 2)
        dico(T(i, j)) = dico(T(i, j)) + 1
    Next
Next
T2 = Application.Transpose(Array(dico.keys, dico.Items))
While OK = False
    OK = True
    For i = LBound(T2, 1) To UBound(T2, 1) - 1
        If T2(i, 2) < T2(i + 1, 2) Then
            Tmp1 = T2(i, 1)
            Tmp2 = T2(i, 2)
            T2(i, 1) = T2(i + 1, 1)
            T2(i, 2) = T2(i + 1, 2)
            T2(i + 1, 1) = Tmp1
            T2(i + 1, 2) = Tmp2
            OK = False
        End If
    Next
Wend
.range("p5").Resize(1, 10) = Application.Transpose(T2)
End With

End Sub
Bonjour à tous,

Paf a eu l'amabilité de me soumettre ce code macro. Après réflexion, je le trouve utile. j'ai réussi à le modifier quelque peu pour limiter la plage de recherche et le nombre de numéros nécessaire, 10 ou lieu de 12, mais j'aimerais y apporter une autre modification. Voir en rouge dans le code. Merci à tous.
 
L

Lucko

Guest
[BonQUOTE="Paf, post: 20097869, member: 185400"]Bonjour,

Si la limite est inscrite en A1 (par exemple) :

1) sans le x ( directement 500 ou 245 ...)
T = .range("E18:X" & .Range("A1"))

2) avec le x ( directement x500 ou x245 ...)
T = .range("E18:" & .Range("A1"))

A+[/QUOTE


Bonjour Paf,

Et merci pour ta réponse. Est-ce à dire que je peux changer également le E18 par ceci?
T = .range("E & .Range("A2"):X" & .Range("A1"))
 

Paf

XLDnaute Barbatruc
Re,

Une petite dernière pour la route...

Si je veux trouver le plus grand nombre de numéros sous < 35, comment dois-je m'y prendre?

T = .range("E" & .Range("A2") & ":X" & .Range("A1"))

T = .range("E" & .Range("A2") & ":X" & .Range("A1")) sert à mettre globalement dans un tableau les données d'une plage. A ce niveau on ne peut jouer que sur la dimension de la plage.

Je ne comprends pas la demande "trouver le plus grand nombre de numéros sous < 35" avec cette ligne de code?

A+
 
L

Lucko

Guest
Re,



T = .range("E" & .Range("A2") & ":X" & .Range("A1")) sert à mettre globalement dans un tableau les données d'une plage. A ce niveau on ne peut jouer que sur la dimension de la plage.

Je ne comprends pas la demande "trouver le plus grand nombre de numéros sous < 35" avec cette ligne de code?

A+


Bonjour Paf,

C'est un peu ce que je j'avais compris mais je me demandais si avec l'ajout de plus petit que < 35, on pouvait trouver les numéros ayant le plus souvent sortie qui sont inférieurs à 35 ou 25 peu importe. Avec la fonction nb.si, on a juste à ajouter le <35 après le point-virgule (e:x;"<35"), je sais qu'avec la fonction application countif VBA on peut le faire ligne par ligne mais c'est foutrement long et que cela nous donne qu'une valeur et non les dix premières ou dernières, je ne sais plus...
 
L

Lucko

Guest
Bonjour à tous,

Lorsque j'utilise la macro ci-haut avec Option explicit , la macro ne fonctionne plus. Y a-t-il une corrélation dû à une erreur dans le code? De plus, je cherche toujours une manière de trouver, toujours à partir du code amicalement fourni par PAF ( que je remercie encore), les 10 nombres le plus souvent sortis plus petit que 35 dans une plage de 10,000 lignes de E18 à X10000.
 

Paf

XLDnaute Barbatruc
Re,
Lorsque j'utilise la macro ci-haut avec Option explicit , la macro ne fonctionne plus

La macro ne fonctionne plus, mais doit indiquer un message d'erreur ?

En comprenant ce que fait Option Explicit , la solution devrait être évidente .

je cherche toujours une manière de trouver, toujours à partir du code amicalement fourni par PAF ( que je remercie encore), les 10 nombres le plus souvent sortis plus petit que 35

il faut modifier:
VB:
    ....
    For j = LBound(T, 2) To UBound(T, 2)
        dico(T(i, j)) = dico(T(i, j)) + 1
    Next
....
en :
VB:
    ....
    For j = LBound(T, 2) To UBound(T, 2)
         if T(i,j) <35 Then   dico(T(i, j)) = dico(T(i, j)) + 1
    Next
....

A+
 
L

Lucko

Guest
Re,


La macro ne fonctionne plus, mais doit indiquer un message d'erreur ?

En comprenant ce que fait Option Explicit , la solution devrait être évidente .



il faut modifier:
VB:
    ....
    For j = LBound(T, 2) To UBound(T, 2)
        dico(T(i, j)) = dico(T(i, j)) + 1
    Next
....
en :
VB:
    ....
    For j = LBound(T, 2) To UBound(T, 2)
         if T(i,j) <35 Then   dico(T(i, j)) = dico(T(i, j)) + 1
    Next
....

A+


Bonjour Paf,

Merci pour ton aide. J'ai planché depuis dimanche sans trouver la solution. Quand je mets option explicit, le nom Sub Statistiques () est en subrillance. Variable non définie.
 
L

Lucko

Guest
J'imagine que parce que je n'y connais que peu de choses au VBA, je copie et reproduit les codes pour m'instruire, je n'ai pas les réflexions appropriés pour comprendre les messages d'erreur!!!! J'ai déclaré le J et le TMP1 et 2. Cela fonctionne maintenant mais ne me demander pas pourquoi...!
 

Discussions similaires

Réponses
11
Affichages
282

Statistiques des forums

Discussions
312 115
Messages
2 085 451
Membres
102 889
dernier inscrit
monsef JABBOUR