[Déplacé VB6 --> VBA] excel - identification groupe

corsair2a Messages postés 6 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 17 août 2010 - 11 mai 2010 à 10:49
corsair2a Messages postés 6 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 17 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.

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
corsair2a Messages postés 6 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 17 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")

Merci encore.
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
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.

Molenn
0
corsair2a Messages postés 6 Date d'inscription lundi 10 mai 2010 Statut Membre Dernière intervention 17 août 2010
11 mai 2010 à 15:22
Bravo...

Heu, pourquoi tu t'embêtes à faire ça par code ?

C'est que je ne savais pas que ça existait... Bien sur, je préfère cette méthode qui est quasi instantanée...

IF(A2A1;"";SUMIF(A:A;A2;B:B)/COUNTIF(A:A;A2))

Merci... Impeccable...
0
Rejoignez-nous