bonjour a tous
jai besoin daide sur un ptit bo
je veux faire une fonction vba qui récupére la plus grande valeur d'une colonne particuliere( disons B)
merci de votre aide
Version imprimable
bonjour a tous
jai besoin daide sur un ptit bo
je veux faire une fonction vba qui récupére la plus grande valeur d'une colonne particuliere( disons B)
merci de votre aide
salut,
ben je pense à ceci:
-tu parcours chaque cellules de ta colonne. Tu enregistres la première valeur dans une variable,
-puis ligne suivante, tu compares la valeur de la cellule avec ta variable, si c'est plus grand, tu enregistres cette valeur dans ta variable, sinon, tu passe à la cellule suivante.
Au final tu auras dans ta variable la + grande valeur de ta colonne.
Je sais que tu as tout ce qu'il faut pour y arriver dans les tuto et faq
tu sais deja combien tu as de ligne maxi dans la colonne ou non?
si tu le sais et que c'est 50 par exemple, tu peu faire:Code:
1
2
3
4
5
6
7
8
9 dim a as double a=0 for i = 1 to 50 if range("A" & i).value>a then 'par exemple tu veux tester la colonne A a = range("A" & i).value end if next i range("B1").value = a ' tu écris le résultat de la recherche dans B1
il me semble bien que dans le forum il y a un post qui traite de ça, qui pemet de retrouver la fin. Attends, je jette un oeil, fais pareil..
c'est-il pas beau ça?
http://www.developpez.net/forums/sho...lignes+colonne
lol ça doit faire le cinquième fois que je la mets cette ligne de code :D
Pour avoir la taille d'une colonne particulière (attention il ne faut pas de cellule vide au milieu de la colonne) il faut écrire :
Feuille c'est le nom de ta feuille et Debut c'est le nom de la première cellule de ta colonne (n'oublie pas les guillemets quand même ;))Code:nbligne=worksheets(Feuille).range(worksheets(Feuille).range(Debut).address & ":" & worksheets(Feuille).range(Debut).end(xldown).address).rows.count
Note : quand je mets, on pourrait aussi bien mettreCode:worksheets(Feuille).range(Debut).address & ":"
Le seul intérêt c'est de pouvoir adapter si par exemple la première case de ta colonne est celle en dessous de Debut, alors tu mettras :Code:"Debut:" &
Code:nbligne=worksheets(Feuille).range(worksheets(Feuille).range(Debut).offset(1,0).address & ":" & worksheets(Feuille).range(Debut).end(xldown).address).rows.count
Le lien qu'a mis asdorve te permettra de connaître la dernière ligne d'une région mais pas forcément d'une colonne...
Je m'explique, imaginons que tu veuilles le nb de lignes de la colonne A. Si ta colonne A contient 100 lignes et ta colonne B 200 et que tu te sert de currentregion sur le debut de ta colonne A tu vas te retrouver avec un résultat de 200 lignes (enfin je crois bien ;)) vu qu'il considère tt la région A:B
Bonjour,
Juste une petite remarque, la fonction Max d'Excel ne marche pas ????
+
Théo
Re,
Petit complément pour la fonction Max dans VBA : regarder dans l'aide du côté de la propriété WorksheetFunction
+
Théo
Alala,
toujours aussi compliqué le comcombre !
:vomi:Citation:
nbligne=worksheets(Feuille).range(worksheets(Feuille).range(Debut).address & ":" & worksheets(Feuille).range(Debut).end(xldown).address).rows.count
c'est pas plus beau ca ?
Sinon je pense que la solution de Théo à l'air bien.Code:DerniereLigne = Worksheets(NomFeuilleSource).Range("D1").End(xlDown).Row
on peut faire plus rapide que la copie dans une variable temporaire je pense...
un sort et on recupere la valeur de la derneire ligne ;) (je sais plus si ca trie de facon croissante ou non...)
Je rappelle tout de même qu'il souhaite :Citation:
Envoyé par Elstak
... et non la dernière ligne définie dans la colonne (nuance)Citation:
Envoyé par VBBBA
Théo
justement, on avait parlé de recherche de la dernière ligne si on utilise ma proposition, qui consistait à parcourir la colonne particulière, de faire une boucle de la ligne 1 à la ligne "DernièreLigne" et d'utiliser une variable + comparaison avec la valeurdu champs en cours.
Et bien pour moi une colonne particuliere est connue (comme sa colonne B qu'il a dit en exemple) et donc on peut utiliser mon code en mettant "B1".
Il n'a pas di une colonne variable, changeante....
j'ai bien compris ta solution asdorve mais le "sort" d'excel est beaucoup plus rapide (ca crois moi !) et donc y'a jsute à lancer un sort et récuperer la valeur de sa colonne B qui est à la ligne derniere ligne un fois le Sort fait...
Code:cells(derniereligne,2)
possible, je ne suis pas expert en vba-Excel... Je connais pas tout
Personnellement, je pense que la fonction Max est la plus rapide (intrinsèquement codée) que la manipulation des données avec un sort ...Citation:
Envoyé par Elstak
...
Théo
quoi qu'il en soit, il y a ici 3 façons plus ou moins rapide de régler le problème. Il serait bien que l'auteur de ce post se manifeste...
Juste une remarque pour mon ami elstak :D
Mon bout de code est plus long mais il donne le nb de ligne d'une plage spécifique et pas le numéro de la dernière ligne de la plage!!!
Réfléchis-y tu verras c'est très différent ;)
bonjour
tu peux tester
etCode:MsgBox Application.WorksheetFunction.Large(Columns(2), 1)
Code:MsgBox Application.WorksheetFunction.Subtotal(4, Columns(2))
bonne soiree
michel
vraiment merci pour toutes vos reponses
ca ma aidé.
maintenant je veux récupérer le numéro de la ligne qui contient le max dans une variable.
c'est plus interessant je trouve.
vu l'interet qu'a porté mon sujet je précise mon projet.
jai deux classeurs.
dans un premier jai plusieurs colonnes
je veuxx en fait prendre chaque colonne la trier par ordre decroissant et prendre unqiuement les 3 plus grandes valeurs.
ensuite je recopie ces valeurs avec le libélé de la colonne 1 correspondant dans un tableau de lautre classeur.
simple et compliqué à la fois...
Tu ne pourrais pas tout nous dire en une fois ou c'est pour faire durer le plaisir?Citation:
Envoyé par VBBBA
désolé.
rebonsoir
tu peux essayer cette macro , sans trier chaque colonne
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Dim x As Byte Dim Nombre As Single Dim Ligne As Long For x = 1 To 3 'boucle pour récupérer les 3 valeurs les plus eleveées 'récupère la Xieme valeur la plus élevée dans la 2eme colonne Nombre = Application.WorksheetFunction.Large(Columns(2), x) 'recherche le numéro de ligne pour la valeur trouvée Ligne = Application.Match(Nombre, Columns(2), 0) 'récupère le contenu de la 1ere colonne pour la valeur cible MsgBox Cells(Ligne, 1) Next x
bonne soirée
michel
t un boss!:!!
merci.simple et efficace a la fois
t'a oublié le ptit tag résolu ;)
=max(b:b)
oui mais comment faire si l'on veut les 5 plus grandes?ton truc est bon pour juste une valeur
Ben t'as qu'à stocker le premier max dans un variable avec son adresse, puis tu le remplace sur ta feuille par un chiffre tt petit genre -1000000.
Tu réexécutes ensuite max(B:B) puis tu refais le truc cinq fois et à la fin tu réécris les variables effacées au bon endroit ;)
Lol toujours aussi bricoleur le comcombre :mouarf:
moi j'aurai placé la place grande valeur dans un tableau (que tu redimensionne à chaque fois) et tu met en condition pour trouver la plus grande valeur, "si elle ne se trouve pas dans le tableau".
ou alors la prochaine fois tu nous dis directement que tu veux recuperer les 5 plus grandes tout de suite :evil:
Pour ma part, j'utiliserait Excel qui fait ça très bien.
Copie de toutes les valeurs dans une colonne.
Tri de cette colonne.
Récupération des 5 premières cellules.
En plus je l'avais deja proposé page 1 :roll:
fallait juste changer et recuperer les 5 premieres lignes... :mrgreen:Citation:
un sort et on recupere la valeur de la derneire ligne (je sais plus si ca trie de facon croissante ou non...)
Faut dire qu'à donner les infos au compte-gouttes, on s'y perd...
Bah oui... en fait je l'avais aussi oublié moi meme :mouarf:
c'est en voyant ta proposition que je m'en suis rappelé :?
il mérite un carton jaune le VBBBBBBA :P ... bon y'a plus qu'à attendre qu'il nous donne l'info suivante !! :mouarf:
bonjour
à qui s'adresse ce message ?Citation:
oui mais comment faire si l'on veut les 5 plus grandes?ton truc est bon pour juste une valeur
quitte à utiliser les outils tout faits d'Excel, pourquoi ne pas utiliser la fonction Grande.Valeur
GRANDE.VALEUR(matrice;k)
matrice représente la matrice ou la plage de données dans laquelle vous recherchez la k-ième plus grande valeur.
k représente, dans la matrice ou la plage de cellules, le rang de la donnée à renvoyer, déterminé à partir de la valeur la plus grande.
Recuperer la 3eme valeur la plus élevée dans la colonne B
Code:=GRANDE.VALEUR(B:B;3)
et en VBA ça donne
Code:Application.WorksheetFunction.Large(Columns(2), 3)
bonne journée
michel