Nombre d'occurrences dans une ligne

rouday55 Messages postés 40 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 8 décembre 2011 - 9 juin 2010 à 00:30
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 - 11 juin 2010 à 13:56
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

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
9 juin 2010 à 01:22
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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
9 juin 2010 à 05:58
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.
0
rouday55 Messages postés 40 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 8 décembre 2011
9 juin 2010 à 17:35
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 ?
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 juin 2010 à 01:54
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 juin 2010 à 02:00
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.
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
10 juin 2010 à 02:08
en parlant de hic, rectifier:

HIC:4
HIC:3
HIC:2
HIC:1
[] Ce qui va sans dire. va mieux en le disant.
0
rouday55 Messages postés 40 Date d'inscription jeudi 28 février 2008 Statut Membre Dernière intervention 8 décembre 2011
11 juin 2010 à 13:38
Parfait j'ai fait comment vous m'avez dit Libre_max et tout marche bien, un vrai soulagement merci beaucoup ;)
0
Molenn Messages postés 797 Date d'inscription mardi 7 juin 2005 Statut Membre Dernière intervention 23 février 2011 7
11 juin 2010 à 13:56
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
0
Rejoignez-nous