[Déplacé VB6 --> VBA] excel - identification groupe
corsair2a
Messages postés6Date d'inscriptionlundi 10 mai 2010StatutMembreDernière intervention17 août 2010
-
11 mai 2010 à 10:49
corsair2a
Messages postés6Date d'inscriptionlundi 10 mai 2010StatutMembreDernière intervention17 août 2010
-
11 mai 2010 à 15:22
Bonjour,
Je voudrais savoir comment identifier le nombre de cellule appartenant au même groupe puis exécuter une fonction dessus (valeur moyenne par exemple).
Exemple :
Groupe | objet | nombres lignes |
a__________1__________3
a__________2
a__________3
b__________4__________4
b__________5
b__________6
b__________7
A l'aide d'une macro, je pensais comparer une ligne avec la suivante. Si elle sont égales la variable nbr incremente de 1.
Je ne sais pas comment afficher le résultat trouvé dans une cellule.
Sub make_group()
Dim i As Integer, nbr As Integer 'declaration variable colone et nombre ligne par groupe
For i = 1 To 30
If "A" & i = "A" & (i + 1) Then
nbr = 1 + i 'j'ai mis 1 car un groupe 1 item appartient à un groupe
Else
nbr = i
End If
Next i
'? afficher nbr ds une cellule ?
End Sub
Puis dans le même principe, comment executer la valeur moyenne sur les valeurs d'un ensemble d'item?
Voilà je me plante peut être de chemin, j'aimerais avoir votre avis.
En vous remerciant.
PS : je connais la fonction ROWS(...) mais c'est manuel. J'ai à peu près 60000 lignes.
A voir également:
[Déplacé VB6 --> VBA] excel - identification groupe
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 11 mai 2010 à 12:25
Salut
If "A" & i = "A" & (i + 1) Then
ne sera jamais vrai car tu compares deux chaines "A8" et "A9", pas les cellules qu'elles représentent.
Méthode propre et adaptée aux objets Excel (tu es bien sous Excel ?) :
Dim maCellule As Range
For Each maCellule In Range("A1:A30")
If maCellule.Value = maCellule.Offset(1, 0).Value Then
' ma cellule a la même valeur que la cellule de la ligne suivante
Else
' Valeurs différentes
End If
Next
Un peu de lecture de l'aide de Excel ne serait pas du superflu ...
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
corsair2a
Messages postés6Date d'inscriptionlundi 10 mai 2010StatutMembreDernière intervention17 août 2010 11 mai 2010 à 14:10
thx !
Un peu de lecture de l'aide de Excel ne serait pas du superflu ...
Oui, quelle(s) site(s) me conseillerais-tu? stp.
J'ai des notions en C mais ça remonte, j'ai pratiquement tout oublié et oui c'est bien Excel que j'utilise (2000)
Je t'envoie ce que j'ai fais déjà, j'essaie de comprendre ce que tu as fais :) merci en tout cas
Mon nouveau programme :
Sub make_group()
Dim i As Integer, nbr As Integer 'declaration variable colone et nombre ligne par groupe
nbr = 0
For i = 2 To 30
If Range("A" & i) = "a" Then
nbr = nbr + 1
End If
Next i
Range("C" & nbr + 1).Value = nbr 'Pour attribuer la valeur dans la derniere ligne du groupe
End Sub
Le souci c'est que ça marche juste pour 1 groupe. Comment répéter l'action? Peut-on utiliser un programme sub comme include?
Comment écrit-t-on une ligne vide sous VB?
Par exemple :
For Each maCellule In Range("A1:prochaine ligne vide")
Pour déterminer la borne de travail.
Dsl ça part un peu dans tout les sens, mais j'ai vu la fonction IF qui fait le même calcul. Mais ça ne m'intéresse pas je suis obliger d'identifier le groupe d'abord (ici en E2)
=COUNTIF(A2:A30;E2)
Mais sur ce principe ça m'intéresse de trouver la valeur moyenne. Peut-on faire : =IF(A2:A46=E2;AVERAGE des éléments correspondant à "a")
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 11 mai 2010 à 14:30
Heu, pourquoi tu t'embêtes à faire ça par code ?
Ton fichier Excel :
A B C
1 Groupe | objet | nombres lignes |
2 a__________1__________3
3 a__________2
4 a__________3
5 b__________4__________4
6 b__________5
7 b__________6
8 b__________7
De simples formules Excel te donnent la réponse.
Avec un NB.SI, tu as ton nombre d'occurrence de Groupe.
Et si tes lignes sont triées par groupe, c'est du gâteau.
En C2, tu écris :
C2: =SI(A2=A1;"";NB.SI(A:A;A2))
Tu recopies ta formule sur toutes tes lignes (un double-clic suffit).
Et c'est terminé.
Tu as beau avoir 60000 lignes, je ne pense pas que ça soit plus long que défiler toutes les lignes une par une par code. Il y a même de grandes chances qu'une fonction intégrée aille plus vite que ce que tu coderas.
Pour la valeur moyenne, de la même façon, tu divises le SOMME.SI par le NB.SI et tu as ta réponse.