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

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

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.
 
[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"))
 
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+
 
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...
 
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.
 
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+
 
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.
 
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...!
 
- 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
236
Réponses
3
Affichages
665
Réponses
40
Affichages
3 K
Retour