Nombre d'occurrences dans une ligne

Signaler
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011
-
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
-
Bonjour à tous,
je travail actuellement sur excel pour la gestion de pièces au sein de l'entreprise pour laquelle je travaille et je me suis initié au vba
Je ne suis qu'un simple débutant mais j'aimerais faire un petit programme
qui me simplifierait la vie c'est pourquoi je demande votre aide

par quoi commencer ?
Alors j'ai un tableau avec la colonne de gauche qui contient le nom des opérateurs et a coté les pieces qu'ils ont faites. En fait je cherche a compter le nombre de chaque piece faite par chaque opérateur et me l'affiche dans le tableau de droite. En fait ca revient en gros a compter les occurrences d'une ligne pour P1 P2 et P3
je pensais d'abord a ecrire une fonction qui prend en parametre une plage de cellules (une ligne) et une chaine de caractere mais JE ne sais pas comment m y prendre avez vous une idée svp

8 réponses

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut,
Exemple de boucles pour compter les occurences.

Soit la liste LST1 qui comprend n éléments (>1).
Soit la liste LST2 qui sert à enregistrer les résultats.

Dim i as Integer, j As Integer,nElements As Integer
Dim nOccurence As Integer
Dim CurrentElt As String

nElements=LST1.ListCount

For i=0 To nElements-2
CurrentElt=LST.List(i)
nOccurence =1
For j=i+1 To nElements-1
If CurrentElt=LST.List(j) Then
nOccurence=nOccurence+1
End If
Next
LST2.AddItem CurrentElt & " : " & nOccurence
Next



[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
la nuit porte sommeil !
Il faut tester si un élément n' a pas été déjà ajouté.
For i=0 To nElements-2
CurrentElt=LST.List(i)
DéjàAjoue=False
If LST2.ListCount>1 Then
For K=0 To LST2.ListCount-1
If CurrentElt=LST.List(K) Then
DéjàAjoue=True
Exit For
End If
Next
End If
If DéjàAjoue=False Then
nOccurence =1
For j=i+1 To nElements-1
If CurrentElt=LST.List(j) Then
nOccurence=nOccurence+1
End If
Next
LST2.AddItem CurrentElt & " : " & nOccurence
End If
Next

[] Ce qui va sans dire. va mieux en le disant.
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

Merci LIBRE_MAX pour vos réponses :D
En effet "la nuit porte sommeil " :) j'ai trouvé une solution à mon problème elle est bien plus basique et superficielle que la tienne parce que je ne connaissais pas les lignes de code de type ".AddItem" ou bien ".List"
Du coup j'ai crée une fonction qui compte les occurrences et après je l'appelle dans une routine que je n'ai pas finie
Ma fonction est du style
Function calculer(ByVal r1 As Long, ByVal mot As String)
    Dim i As Long
    Dim cpt As Long
    cpt = 0
    For i = 4 To 14 'c est la plage de cellules qui m'interesse en réalité
        
         If Cells(r1, i).Value = mot Then
                    cpt = cpt + 1
        End If
    Next
     calculer = cpt
End Function

Qu'en pensez vous ?
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Salut,
C' est vrai que j' ai pas bien expliqué la démarche,mais c' est un peu le même proncipe.
Et c' est ce que j' ai essayé de faire(tant bien que mal) avec des boucles imbriquées.
Ton code consisterait donc à faire 11 appels de la fonction calculer.
Le hic c' est que si par exemple le mot "HIC" se trouve dans les cellules 5,7,10 et 13, tu auras au final:
HIC:4
HIC:4
HIC:4
HIC:4
puisque tu auras cherché 4 fois le même mot.
L' idéal serait donc de vérifier pour chaque mot s' il n' a pas été déjà recherché auparavent.
Il faudra donc gérer les appels :
-en enregistrant chaque résultat(mot:cpt)
-en vérifiant parmi les résultats déjà enregistrés,si un tel mot n'y figure pas déjà, avant d' entamer une recherche.


[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
n' oublies pas que tu comptes compter
le nombre de chaque piece faite par chaque opérateur ..


[] Ce qui va sans dire. va mieux en le disant.
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
en parlant de hic, rectifier:

HIC:4
HIC:3
HIC:2
HIC:1
[] Ce qui va sans dire. va mieux en le disant.
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

Parfait j'ai fait comment vous m'avez dit Libre_max et tout marche bien, un vrai soulagement merci beaucoup ;)
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Statut
Membre
Dernière intervention
23 février 2011
5
Une simple formule SOMME.SI te donne la réponse. Ne va pas t'embêter avec autre chose, à moins que ça ne soit pour apprendre le VBA

Molenn